webpackJsonp([24],{"+O6S":function(e,t){},0:function(e,t,s){s("j1ja"),e.exports=s("NHnr")},"7TWk":function(e,t){},"7YgM":function(e,t){e.exports={name:"emq-dashboard",version:"4.2-rc.2",description:"EMQ X Dashboard",author:"zhangwh ",private:!0,scripts:{dev:"BABEL_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",start:"npm run dev",lint:"eslint --ext .js,.vue src",format:'prettier --write "src/**/*.js" "src/**/*.vue" "src/**/*.scss"',build:"node build/build.js","deploy:build":"node build/build.js && ./dist.sh"},dependencies:{axios:"^0.19.0",clipboard:"^2.0.6",codemirror:"^5.48.0",dateformat:"^3.0.3","element-ui":"^2.11.1","js-sql-parser":"^1.2.1",jsonlint:"^1.6.3",jsonwebtoken:"^8.5.1","monaco-editor":"^0.18.1",mqtt:"^2.18.8",nprogress:"^0.2.0","script-loader":"^0.7.2","sql-formatter":"^2.3.3",vue:"^2.6.10","vue-i18n":"^8.12.0","vue-router":"^3.0.7",vuex:"^3.1.1","vuex-router-sync":"^5.0.0"},devDependencies:{"@vue/eslint-config-prettier":"^6.0.0",autoprefixer:"^7.1.2","babel-core":"^6.22.1","babel-eslint":"^8.2.1","babel-helper-vue-jsx-merge-props":"^2.0.3","babel-loader":"^7.1.1","babel-plugin-dynamic-import-node":"^2.2.0","babel-plugin-syntax-jsx":"^6.18.0","babel-plugin-transform-runtime":"^6.22.0","babel-plugin-transform-vue-jsx":"^3.5.0","babel-polyfill":"^6.26.0","babel-preset-env":"^1.3.2","babel-preset-stage-2":"^6.22.0",chalk:"^2.0.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.0",eslint:"^4.15.0","eslint-config-airbnb-base":"^11.3.0","eslint-config-prettier":"^6.11.0","eslint-friendly-formatter":"^3.0.0","eslint-import-resolver-webpack":"^0.8.3","eslint-loader":"^1.7.1","eslint-plugin-import":"^2.7.0","eslint-plugin-prettier":"^3.1.4","eslint-plugin-vue":"^4.0.0","extract-text-webpack-plugin":"^3.0.0","file-loader":"^1.1.4","friendly-errors-webpack-plugin":"^1.6.1","html-webpack-plugin":"^2.30.1","monaco-editor-webpack-plugin":"^1.7.0","node-notifier":"^5.1.2","node-sass":"^4.8.3","optimize-css-assets-webpack-plugin":"^3.2.0",ora:"^1.2.0",portfinder:"^1.0.13","postcss-import":"^11.0.0","postcss-loader":"^2.0.8","postcss-url":"^7.2.1",prettier:"^2.0.5",rimraf:"^2.6.0","sass-loader":"^6.0.7",semver:"^5.3.0",shelljs:"^0.7.6","uglifyjs-webpack-plugin":"^1.1.1","url-loader":"^0.5.8","vue-loader":"^13.7.3","vue-style-loader":"^3.0.1","vue-template-compiler":"^2.5.2",webpack:"3.8.0","webpack-bundle-analyzer":"^3.3.2","webpack-dev-server":"2.9.7","webpack-merge":"^4.1.0"},engines:{node:">= 6.0.0",npm:">= 3.0.0"},browserslist:["> 1%","last 2 versions","not ie <= 8"]}},"HL/F":function(e,t,s){"use strict";var n=s("Dd8w"),a=s.n(n),r=s("wUZ8"),i=s.n(r),o=a()({},i.a,{select:{cluster:"All Nodes",placeholder:"Select Node"},error:{networkError:"Network Error",initializationError:"Initialization Error",module_not_loaded:"Related module are not load"},success:{createSuccess:"Create Success"},oper:{confirmDelete:"Confirm Delete ?",confirmStop:"Confirm Stop?",cancel:"Cancel",confirm:"Confirm",delete:"Delete",oper:"Operation",edit:"Edit",save:"Save",create:"Create",view:"View",viewMore:"View More",expand:"Expand",collapse:"Collapse",refresh:"Refresh",add:"Add",addSuccess:"Add Success",editSuccess:"Edit success",startSuccess:"Start Success",stopSuccess:"Stop Success",enableSuccess:"Enable Success",disabledSuccess:"Disable Success",deleteSuccess:"Delete Success",disconnectSuccess:"Disconnect Success",clear:"Clear Success",from:"From",stop:"Stop",start:"Start",notice:"Notice",learnMore:"Learn More",confirmDisconnect:"Confirm disconnect?",confirmKickOut:"Confirm kick out?",confirmCleanSession:"Confirm Clean Session?",yes:"Yes",no:"No",online:"Online",offline:"Offline",warning:"Warning",subscribe:"Subscribe",unsubscribe:"Unsubscribe",unsubscribeConfirm:"This action will cancel subscription to the topic",pleaseEnter:"Please Enter",copy:"Copy",copySuccess:"Copy successfully",copyFailed:"Copy failed",generate:"Generate",search:"Search",reset:"Reset",next:"Next",prev:"Previous"},topbar:{tryEnterprise:"Free Trial"},leftbar:{monitor:"Monitor",overview:"Overview",clients:"Clients",connections:"Connections",sessions:"Sessions",topics:"Topics",subscriptions:"Subscriptions",rule_engine:"Rule",management:"Management",plugins:"Plugins",modules:"Modules",listeners:"Listeners",instances:"Instances",tools:"Tools",websocket:"Websocket",api:"HTTP API",applications:"Applications",admin:"Admin",users:"Users",settings:"Settings",help:"Help",general:"General",analysis:"Analysis",topicMetrics:"Topic metrics",alarms:"Alarms"},overview:{broker:"Broker",erlangOTPRelease:"Erlang/OTP Release",systemName:"System Name",version:"Version",uptime:"Uptime",systemTime:"System Time",nodes:"Nodes",name:"Name",erlangProcesses:"Erlang Processes",cpuInfo:"CPU Info",memoryInfo:"Memory Info",maxFds:"MaxFds",status:"Status",stats:"Stats",topicsCount:"Topics",topicsMax:"Max",connectionsCount:"Connections",connectionsMax:"Max",retainedCount:"Retained",retainedMax:"Max",sessionsCount:"Sessions",sessionsMax:"Max",subscribersCount:"Subscribers",subscribersMax:"Max",subscriptionsCount:"Subscriptions",subscriptionsMax:"Max",subscriptionsSharedCount:"Subscriptions Shared",subscriptionsSharedMax:"Max",metrics:"Metrics",packetsData:"The packets data",messagesData:"The messages data",bytesData:"The bytes data",session:"Session",client:"Client",delivery:"Delivery"},clients:{node:"Node",nodeName:"Node Name",clientId:"Client ID",username:"Username",ipAddr:"IP Address",port:"Port",cleanStart:"CleanStart",keepalive:"Keepalive(s)",back:"Back",subscriptionsCount:"Subscriptions Count",expiryInterval:"Expiry Interval(s)",maxInflight:"MaxInflight",inflightLen:"Inflight Len",mqueueLen:"MqueueLen",mqueueDropped:"MqueueDropped",awaitingRelLen:"AwaitingRelLen",deliverMsg:"DeliverMsg",enqueueMsg:"EnqueueMsg",createdAt:"Created At",connectedAt:"Connected At",connected:"Connect Status",basicInfo:"Basic Info",subsInfo:"Subscriptions",protoVer:"ProtoVer",protoName:"Protocol Name",protoType:"Protocol",connectInfo:"Connection",isBridge:"Is Bridge",disconnectAt:"Disconnect At",session:"Session",max:"Maximum",historicHigh:"Historic High of",subscriptions:"Subscriptions Count",inflight:"Inflight Window Size",mqueue:"Message Queue Size",awaiting_rel:"Unconfirmed PUBREC Packets Count",recv_cnt_desc:"Number of TCP Packets Received",recv_msg_desc:"Number of PUBLISH Packets Received",recv_oct_desc:"Number of Bytes Received",recv_pkt_desc:"Number of MQTT Packets Received",send_cnt_desc:"Number of TCP Packets Sent",send_msg_desc:"Number of PUBLISH Packets Sent",send_oct_desc:"Number of Bytes Sent",send_pkt_desc:"Number of MQTT Packets Sent",currentSubs:"Subscriptions Count",addSubs:"Add Subscription",view:"View",disconnected:"Disconnected",kickOut:"Kick Out"},topics:{topic:"Topic",node:"Node"},subscriptions:{clientId:"Client ID",topic:"Topic",qoS:"QoS",share:"Share"},plugins:{name:"Name",version:"Version",description:"Description",status:"Status",stopped:"Stopped",running:"Running",oper:"Operation",start:"Start",stop:"Stop",config:"Config",manage:"Manage",tutorial:"Tutorial",back:"Back",advancedConfig:"Advanced Config",add:"Add",configSuccess:"Config success",configFailure:"Config failure",notice:"Are you sure you want to submit changes and apply them ?",giveUpNotice:"Are you sure you want to give up the change and exit?",noticeTitle:"Notice",cacheNotice:"You have given up this change",emptyConfigOption:"No Default Configuration",searchByName:"Search by plugin name",usernameRequired:"username is required",passwordRequired:"password is required",clientidRequired:"Client ID is required",algorithm:"Algorithm",secret:"Secret or Private key",payloadDesc:"It is valid when verify_claims is enabled. You can use% u and% c placeholders to replace the entered user name and clientid respectively. For details, see",jwtDoc:"JWT Authentication",dataDesc:"One line is a set of data, separated by comma username,clientid",secretRequired:"Secret is required",payloadRequired:"Payload template is required",dataRequired:"Payload data is required",leaveTokenPage:"After leaving the page, the currently entered configuration and generated TOKEN information are no longer retained. Continue?"},modules:{name:"Name",enable:"Enable",disable:"Disable",enabled:"Enabled",disabled:"Disabled"},instances:{instances:"Instances",back:"Back",info:"Basic Info",name:"instance name",descr:"description",service:"service",configInfo:"Config Options",initConfig:"Init config or ",remarkConfig:"description is required",createInstance:"Create Instance",selectServiceType:"Instance Type",all:"All",running:"Running",stopped:"Stopped",auth:"Auth",backend:"Backend",hook:"hook",bridge:"Bridge",other:"Other",select:"Select",selected:"Selected",nextStep:"Next",authDesc:"Provide login authentication and publish subscribe ACL service.",backendDesc:"Provide message persistence to database services.",bridgeDesc:"Bridging a message flow into a message middleware data source.",hookDesc:"A service that uses the trigger callback mechanism to respond to the operation.",otherDesc:"The system runs information and other services."},listeners:{protocol:"Protocol",listenOn:"Listen On",maxConnections:"Max Connections",currentConnections:"Current Connections"},websocket:{connect:"Connect",host:"Host",port:"Port",clientID:"Client ID",username:"Username",password:"Password",keepAlive:"Keep Alive",cleanSession:"Clean Session",disconnect:"Disconnect",currentState:"Current State",subscribe:"Subscribe",topic:"Topic",qoS:"QoS",date:"Date",oper:"Operation",messages:"Messages",retained:"Retained",send:"send",messagesAlreadySent:"Messages already sent",messagesReceived:"Messages received",time:"Time",connectError:"Message send error",connectFailure:"Connect failed on",connectLeave:"The client does not connect to the broker",subscribeSuccess:"Subscribe success",subscribeFailure:"Subscribe failure",unsubscribeFailure:"Unsubscribe Failure",messageSendOut:"Message send out",connected:"CONNECTED",connecting:"CONNECTING",disconnected:"DISCONNECTED",notSupport:"Your browser doesn't support WebSocket"},httpApi:{introduction:"Introduction",desc:"Apart from this help page, all URIs will serve only resources of type application/json, and will require HTTP basic authentication. The default user is admin / public.\n
The emqx_dashboard plugin provides a web management console. The Dashboard helps monitor broker's running status, statistics and metrics of MQTT packets.",reference:"Reference",method:"Method",path:"Path",description:"Description",back:"Back",linkAddress:"Request address",data:"Response data"},app:{appId:"AppID",secret:"AppSecret",newApp:"New App",viewApp:"View App",editApp:"Edit App",create:"Create",errors:"Option Required",name:"AppName",desc:"Remark",expired:"Expired date",status:"Status",enable:"Allowed",disable:"Denied",enableText:"Access allowed",disableText:"Access barred",expiredText:"Never expired",guide:"Application for authentication of EMQ X Management API (REST API)",docs:"Documentation"},users:{newUser:"New User",editUser:"Edit User",username:"Username",remark:"Remark",password:"Password",confirmPassword:"Confirm Password",oldPassword:"Old Password",newPassword:"New Password",confirmNewPassword:"Confirm New Password",changePassword:"Change Password",dontChangePassword:"Don't Change Password",confirm:"Confirm",confirmDelete:"Confirm Delete ?",usernameRequired:"Username required",remarkRequired:"Remark required",usernameIllegal:"Username length: 3~32",passwordRequired:"Password required",newPasswordRequired:"new password required",passwordInconsistent:"Password is inconsistent",authenticate:"You have changed your password. Please re authenticate",createUser:"Create user success",passwordIllegal:"Password length: 3~255"},alert:{required:"required",success:" success",failure:" failure",connect:"Connect"},login:{title:"LOG IN",username:"Username",password:"Password",remember:"Remember",loginButton:"Log In",error:"Username Or Password Error",usernameRequired:"Username Required",passwordRequired:"Password Required"},settings:{themes:"Themes",language:"Language",apply:"Apply",success:"Apply success"},config:{importConfig:"Import",selectConfigFile:"Select a config file",configFileMustBeJson:"Config file must be JSON",createBy:"Create by",create:"",createUser:"owner",nodeName:"node name",host:"host",descr:"description",createAt:"create At",more:"more",reSelect:"Select another",not_a_valid_config_file:"Not a valid config file",payload_error:"Config option is empty",import_file_error:"Import failure",exportConfig:"Export",ex:"Export",atLeastThree:"At least three words",importSuccess:"Import success",notice:"Use backup configuration files to configure initialization modification.
Notice: configuration files may contain important data, such as database address and authentication information. Please keep good configuration files and use backup function reasonably."},help:{quickStart:"Quick start",emqxDesc:"EMQ X is a MQTT broker developed on the Erlang/OTP platform, which is the most popular MQTT message middleware in the open source community. It supports common IoT protocols, including MQTT, LwM2M, MQTT-SN, CoAP, LoRaWAN, HTTP, and WebSocket. Welcome to follow our project or participate in development.",emqxEnterprise:"EMQ X Enterprise Edition",enterpriseDesc:"EMQ X Enterprise Edition has built-in data persistence support, security auditing, operation monitoring and other functions, providing you with the service of more comprehensive functions, enhanced stability and performance, and higher level of data security and service response.
The latest Enterprise Edition includes a new Dashboard, which allows you to easily create and manage IoT Hub clusters with dozens of nodes and millions of connections.",freeTrial:"Free Trial",useDocs:"Documentation",docsDesc:"We have prepared a comprehensive documentation to help you familiarize yourself with more powerful features.",forwardView:"View documentation",faqDesc:"The FAQ contains questions that we are often asked about. It is recommended to use the FAQ to retrieve problems you encounter during use.",forwardFaq:"Go to FAQ",followUs:"Follow us"},analysis:{topicMetrics:"Topic metrics",metricsTip:"(The metrics are real-time refresh data, including all statistics since the addition)",messageIn:"Message In",messageOut:"Message Out",messageDrop:"Message Drop",addTopic:"Add Topic",details:"Details",all:"All",rateItem:"{0} / second",rate:"(rate)",messageInDesc:"(message in rate)",messageOutDesc:"(message out rate)",messageDropDesc:"(message drop rate)",loadAnalysis:"Load",loadSuccess:"Load Success",alarmName:"Alarm Name",alarmMessage:"Alarm Message",activateAt:"Activate At",deactivateAt:"Deactivate At",duration:"Duration",currentAlarms:"Current Alarms",historicalAlarm:"Historical Alarms",deactivate:"Deactivate",clearAll:"Clear All",confirmClear:"Confirm clear all alarms?",confirmDeactivate:"Confirm deactivate this alarm?"},httpCode:{0:"Success",101:"Bad RPC",102:"Unknown Error",103:"Username or password error",104:"Empty username or password",105:"User does not exist",106:"Admin can not be deleted",107:"Missing request parameter",108:"Request parameter type error",109:"Request parameter is not a json",110:"Plugin has been loaded",111:"Plugin has been unloaded",112:"Client not online",113:"User already exist",114:"Old password error",115:"Bad topic"},util:{day:"day | days",year:"year | years"}}),c=s("Vi3T"),l=s.n(c),d=a()({},l.a,{select:{cluster:"全部节点",placeholder:"请选择"},error:{networkError:"网络错误",initializationError:"初始化错误",module_not_loaded:"相关模块未打开"},success:{createSuccess:"创建成功"},oper:{confirmDelete:"确认删除该项?",confirmStop:"确认停止?",confirm:"确认",cancel:"取消",delete:"删除",oper:"操作",edit:"编辑",save:"保存",create:"创建",view:"查看",viewMore:"查看更多",expand:"展开",collapse:"收起",refresh:"刷新",add:"添加",addSuccess:"添加成功",editSuccess:"编辑成功",startSuccess:"启动成功",stopSuccess:"停止成功",enableSuccess:"启用成功",disabledSuccess:"停用成功",deleteSuccess:"删除成功",disconnectSuccess:"断开连接成功",clear:"清空成功",from:"从",stop:"停止",start:"启动",notice:"注意",learnMore:"了解更多",confirmDisconnect:"确认断开连接?",confirmKickOut:"确认踢除客户端?",confirmCleanSession:"确认清除会话?",yes:"是",no:"否",online:"在线",offline:"离线",warning:"警告",subscribe:"订阅",unsubscribe:"取消订阅",unsubscribeConfirm:"此操作将取消订阅该主题",pleaseEnter:"请输入",copy:"复制",copySuccess:"复制成功",copyFailed:"复制失败",generate:"生成",search:"搜索",reset:"重置",next:"下一页",prev:"上一页"},topbar:{tryEnterprise:"试用企业版"},leftbar:{monitor:"监控",overview:"控制台",clients:"客户端",connections:"连接",sessions:"会话",topics:"主题",subscriptions:"订阅",rule_engine:"规则",management:"管理",plugins:"插件",modules:"模块",listeners:"监听器",instances:"服务",tools:"工具",websocket:"Websocket",api:"HTTP接口",applications:"应用",admin:"系统",users:"用户",settings:"设置",help:"帮助",general:"通用",analysis:"统计分析",topicMetrics:"主题监控",alarms:"告警"},overview:{broker:"系统信息",systemName:"名称",version:"版本",uptime:"运行时间",systemTime:"系统时间",nodes:"节点信息",name:"节点名称",erlangOTPRelease:"Erlang/OTP 版本",erlangProcesses:"Erlang 进程",cpuInfo:"CPU",memoryInfo:"内存",maxFds:"最大文件句柄数",status:"状态",stats:"运行统计",topicsCount:"主题数",topicsMax:"峰值",connectionsCount:"连接数",connectionsMax:"峰值",retainedCount:"保留消息数",retainedMax:"最大保留消息数",sessionsCount:"会话数",sessionsMax:"峰值",subscribersCount:"订阅数",subscribersMax:"峰值",subscriptionsCount:"订阅数",subscriptionsMax:"峰值",subscriptionsSharedCount:"共享订阅数",subscriptionsSharedMax:"峰值",metrics:"度量指标",packetsData:"MQTT 报文",messagesData:"消息",bytesData:"流量收发(字节)",session:"会话",client:"客户端",delivery:"Delivery"},clients:{node:"节点",nodeName:"节点名称",clientId:"客户端 ID",username:"用户名",ipAddr:"IP 地址",port:"端口",cleanStart:"清除会话",keepalive:"心跳(秒)",back:"返回",subscriptionsCount:"当前订阅数量",expiryInterval:"会话过期间隔(秒)",maxInflight:"最大拥塞",inflightLen:"当前拥塞",mqueueLen:"当前缓存消息",mqueueDropped:"丢弃消息",awaitingRelLen:"等待释放",deliverMsg:"投递消息",enqueueMsg:"入队消息",createdAt:"会话创建时间",connectedAt:"连接时间",connected:"连接状态",clientsDetails:"详情",basicInfo:"基础信息",subsInfo:"订阅列表",protoVer:"协议版本",protoName:"协议名称",protoType:"协议类型",connectInfo:"连接信息",isBridge:"是否为桥接",disconnectAt:"断开连接时间",session:"会话信息",max:"最大",subscriptions:"订阅数量",inflight:"飞行窗口",mqueue:"消息队列",awaiting_rel:"未确认的 PUBREC 数据包计数",recv_cnt_desc:"接收的 TCP 报文数量",recv_msg_desc:"接收的 PUBLISH 报文数量",recv_oct_desc:"接收的字节数量",recv_pkt_desc:"接收的 MQTT 报文数量",send_cnt_desc:"发送的 TCP 报文数量",send_msg_desc:"发送的 PUBLISH 报文数量",send_oct_desc:"发送的字节数量",send_pkt_desc:"发送的 MQTT 报文数量",currentSubs:"当前订阅数",addSubs:"添加订阅",view:"详情",disconnected:"已断开",kickOut:"踢除"},topics:{topic:"主题",node:"节点"},subscriptions:{clientId:"客户端 ID",topic:"主题",qoS:"QoS",share:"共享订阅"},plugins:{name:"插件名称",version:"版本",description:"描述",status:"状态",stopped:"已停止",running:"运行中",start:"启动",stop:"停止",config:"配置",manage:"管理",tutorial:"使用文档",back:"返回",advancedConfig:"高级配置",add:"新增",configSuccess:"配置成功",configFailure:"配置失败",notice:"你确定提交这些配置吗?重启插件后生效",giveUpNotice:"你确定放弃应用已更改的配置吗?",noticeTitle:"注意",cacheNotice:"已放弃操作",emptyConfigOption:"默认配置项为空",searchByName:"按插件名称搜索",usernameRequired:"请填写 username",passwordRequired:"请填写 password",clientidRequired:"请填写 Client ID",algorithm:"加密算法",secret:"密钥或私钥",payloadDesc:"启用 verify_claims 时有效, 可以使用 %u,%c 占位符分别替换输入的 username 和 clientid,详见",jwtDoc:"JWT 认证",dataDesc:"一行一组数据,使用逗号分割 username,clientid",secretRequired:"请输入 Secret",payloadRequired:"请输入 Payload 模版",dataRequired:"请填写 Payload 数据",leaveTokenPage:"离开页面后当前输入的配置与生成的 TOKEN 信息均不再保留,确认离开?"},modules:{name:"模块名称",enable:"启用",disable:"停用",enabled:"已启用",disabled:"已停用"},instances:{instances:"服务",back:"返回",info:"基本信息",name:"实例名称",descr:"备注信息",service:"所属服务",configInfo:"配置信息",initConfig:"初始化配置或",remarkConfig:"请输入备注信息",createInstance:"新建服务",selectServiceType:"选择实例类型",all:"全部",running:"运行中",stopped:"已停止",auth:"认证",backend:"持久化",hook:"回调钩子",bridge:"数据桥接",other:"其他",select:"选择",selected:"已选择",nextStep:"下一步",authDesc:"提供登录认证与发布订阅 ACL 服务。",backendDesc:"提供消息持久化到数据库服务。",bridgeDesc:"提供将消息流桥接为消息中间件数据源服务。",hookDesc:"使用触发回调机制响应操作的服务。",otherDesc:"系统运行信息等其他服务。"},listeners:{protocol:"协议",listenOn:"监听地址",maxConnections:"最大连接数",currentConnections:"当前连接数"},websocket:{connect:"连接",host:"主机地址",port:"端口",clientID:"客户端 ID",username:"用户名",password:"密码",keepAlive:"心跳(秒)",cleanSession:"清除会话",disconnect:"断开连接",currentState:"当前状态",subscribe:"订阅",topic:"主题",qoS:"服务质量",date:"订阅时间",oper:"操作",messages:"消息",retained:"保留",send:"发送",messagesAlreadySent:"发布消息列表",messagesReceived:"订阅消息列表",time:"时间",connectError:"消息发送错误",connectFailure:"连接失败",connectLeave:"尚未连接到服务器",subscribeSuccess:"订阅成功",subscribeFailure:"订阅失败",messageSendOut:"消息已发出",connected:"已连接",connecting:"正在连接",disconnected:"未连接",notSupport:"你的浏览器暂不支持WebSocket"},httpApi:{introduction:"说明",desc:"除了帮助页面,所有URI返回application/json格式的的资源,每个请求都需要HTTP基本认证。默认用户是admin / public。
emqx_dashboard插件提供了一个Web管理控制台, 用于监控服务器的运行状态,数据统计和MQTT包计数监控。",reference:"参考",method:"请求方法",path:"路径",description:"描述",back:"返回",linkAddress:"请求地址",data:"响应数据"},app:{appId:"AppID",secret:"App密钥",newApp:"新建APP",viewApp:"查看App",editApp:" 编辑App",errors:"该项为必填项",name:"App名称",desc:"备注",expired:"到期日期",status:"状态",enable:"允许访问",disable:"拒绝访问",enableText:"允许访问",disableText:"拒绝访问",expiredText:"永不过期",guide:"应用用于 EMQ X 管理监控 API (REST API) 连接认证,详见",docs:"文档"},users:{newUser:"新建用户",editUser:"编辑用户",username:"用户名",remark:"备注",password:"密码",confirmPassword:"确认密码",oldPassword:"旧密码",newPassword:"新密码",confirmNewPassword:"确认新密码",changePassword:"修改密码",dontChangePassword:"不修改密码",usernameRequired:"请填写用户名",remarkRequired:"请填写备注",usernameIllegal:"用户名长度: 3~32",passwordRequired:"请填写密码",newPasswordRequired:"请填写新密码",passwordInconsistent:"密码不一致",authenticate:"你已成功修改已登录用户密码,请重新登录",createUser:"新建用户成功",passwordIllegal:"密码长度: 3~255"},alert:{required:"字段是必填项",success:"成功",failure:"失败",connect:"连接"},login:{title:"登 录",username:"用户名",password:"密码",remember:"记住",loginButton:"登 录",error:"用户名或密码错误",usernameRequired:"请填写用户名",passwordRequired:"请填写密码"},settings:{themes:"样式主题",language:"系统语言",apply:"应 用",success:"修改成功"},config:{importConfig:"导入配置",selectConfigFile:"选择配置文件",configFileMustBeJson:"请确保备份文件为正常 JSON 格式",createBy:"由",create:"创建",createUser:"创建用户",nodeName:"节点名称",host:"主机地址",descr:"备注信息",createAt:"创建时间",more:"更多信息",reSelect:"重新选择",not_a_valid_config_file:"不是合法的配置文件",payload_error:"无效的内容",import_file_error:"导入文件出错",exportConfig:"导出配置",ex:"导出",atLeastThree:"至少3个字符",importSuccess:"导入成功",notice:"使用备份的配置文件进行配置初始化/修改。
注意: 配置文件可能包含有重要数据如数据库地址与认证信息,请妥善保管配置文件并合理使用备份功能。"},help:{quickStart:"快速开始",emqxDesc:"EMQ X 基于 Erlang/OTP 平台开发的 MQTT 消息服务器,是开源社区中最流行的 MQTT 消息服务器,支持丰富的物联网协议,包括 MQTT、LwM2M、MQTT-SN、CoAP、 LoRaWAN、 HTTP 和 WebSocket 等。欢迎 follow 我们的项目或参与构建。",emqxEnterprise:"EMQ X 企业版",enterpriseDesc:"EMQ X 企业版内置了各种数据持久化支持、安全审计、运行监控等功能,为您提供功能更全面、稳定性与性能更强、数据安全与服务响应级别更高的服务。
最新企业版包含全新的 Dashboard,让您可以轻松创建并管理数十个节点、数百万连接的 IoT Hub 集群。",freeTrial:"免费试用",useDocs:"使用文档",docsDesc:"我们为您准备了齐全的使用文档,帮助您熟悉更多强大的功能。",forwardView:"前往查看",faqDesc:"FAQ 收录了所有可能出现的问题,优先推荐使用 FAQ 检索您使用过程中遇到的问题。",forwardFaq:"前往 FAQ",followUs:"关注我们"},analysis:{topicMetrics:"主题监控",metricsTip:"(数据统计为实时刷新数据,包含自添加以来全部统计数据)",messageIn:"消息流入",messageOut:"消息流出",messageDrop:"消息丢弃",addTopic:"添加主题",details:"详情数据",all:"全部",rateItem:"{0} 条/秒",rate:"(速率)",messageInDesc:"(消息流入速率)",messageOutDesc:"(消息流出速率)",messageDropDesc:"(消息丢弃速率)",loadAnalysis:"启用",loadSuccess:"启用成功",alarmName:"告警名称",alarmMessage:"告警消息",activateAt:"开始时间",deactivateAt:"结束时间",duration:"持续时间",currentAlarms:"当前告警",historicalAlarm:"历史告警",deactivate:"取消告警",clearAll:"清除全部",confirmClear:"确认清除全部告警信息?",confirmDeactivate:"确认取消该告警信息?"},httpCode:{0:"成功",101:"RPC 操作失败",102:"未知错误",103:"用户名或密码错误",104:"空的用户名密码",105:"用户不存在",106:"不能删除管理员",107:"请求参数错误",108:"请求参数类型错误",109:"请求体不是 JSON",110:"插件当前已经启动",111:"插件当前已经停止",112:"客户端不在线",113:"用户已存在",114:"旧密码错误",115:"主题错误"},util:{day:"天",year:"年"}}),u=s("znjY"),p=s.n(u),m=a()({},p.a,{select:{cluster:"全てのノード",placeholder:"選択してください"},error:{networkError:"ネットワークエラーが発生しました",initializationError:"初期状態に戻すときに問題が発生しました",module_not_loaded:"関連モジュールが有効になっていません"},success:{createSuccess:"新規が成功しました"},oper:{confirmDelete:"本当に削除しますか?",confirmStop:"本当に停止処理を実行しますか?",confirm:"確認",cancel:"キャンセル",delete:"削除",oper:"オペレーション",edit:"編集",save:"保存",create:"新規",view:"詳細",viewMore:"さらに表示",expand:"展開",collapse:"折り畳み",refresh:"リフレシュ",add:"新規",addSuccess:"追加しました",editSuccess:"更新しました",startSuccess:"開始しました",stopSuccess:"停止しました",enableSuccess:"有効になりました",disabledSuccess:"無効になりました",deleteSuccess:"削除しました",disconnectSuccess:"正常に接続が切れました",from:"から",stop:"停止",start:"開始",notice:"お知らせ",learnMore:"もっと詳しく知る",confirmDisconnect:"今すぐ切断しますか?",confirmKickOut:"クライアントを強制的に切断しますか?",confirmCleanSession:"セッションをクリアしてもよろしいですか?",yes:"はい",no:"いいえ",online:"オンライン",offline:"オフライン",warning:"ワーニング",subscribe:"サブスクライブ",unsubscribe:"アンサブスクライブ",unsubscribeConfirm:"アンサブスクライブしてもよろしいですか",pleaseEnter:"入力してください",copy:"コピー",copySuccess:"コピーが成功しました",copyFailed:"コピーが失敗しました",generate:"生成",search:"検索",reset:"リセット",next:"次へ",prev:"前へ"},topbar:{tryEnterprise:"無料トライアル"},leftbar:{monitor:"モニター",overview:"コンソール",clients:"クライアント",topics:"トピック",subscriptions:"サブスクリプション",rule_engine:"ルール",plugins:"プラグイン",modules:"モジュール",listeners:"リスナー",tools:"ツール",websocket:"Websocket",api:"API",applications:"アプリケーション",users:"ユーザー",settings:"設定",help:"ヘルプ",general:"汎用",analysis:"分析",topicMetrics:"トピック分析",alarms:"アラート"},overview:{broker:"ブローカー",systemName:"システム名",version:"バージョン",uptime:"稼働時間",systemTime:"システム時間",nodes:"ノード情報",name:"ノード名",erlangOTPRelease:"Erlang/OTP バージョン",erlangProcesses:"Erlang プロセス",cpuInfo:"CPU",memoryInfo:"メモリ情報",maxFds:"ファイルオープン上限数",status:"ステータス",stats:"統計",topicsCount:"トピック数",topicsMax:"トピックの最大数",connectionsCount:"接続数",connectionsMax:"最大の接続数",retainedCount:"最新保持したメッセージ数",retainedMax:"最新保持したメッセージの最大数",sessionsCount:"セッション数",sessionsMax:"セッションの最大数",subscribersCount:"サブスクライブ登録者数",subscribersMax:"サブスクライブ登録者の最大数",subscriptionsCount:"サブスクリプション数",subscriptionsMax:"サブスクリプションの最大数",subscriptionsSharedCount:"共有したサブスクリプション数",subscriptionsSharedMax:"共有したサブスクリプションの最大数",metrics:"メトリック",packetsData:"MQTT メッセージ",messagesData:"メッセージ",bytesData:"バイド",session:"セッション",client:"クライアント",delivery:"デリバリー"},clients:{node:"ノード",nodeName:"ノード名",clientId:"クライアントID",username:"ユーザー名",ipAddr:"IP アドレス",port:"ポート",cleanStart:"クリア",keepalive:"キープアライブ(秒)",back:"戻る",subscriptionsCount:"カレントのサブスクリプション数",expiryInterval:"タイムアウト間隔(秒)",maxInflight:"最大の渋滞",inflightLen:"現在の渋滞",mqueueLen:"キャッシュされているメッセージ",mqueueDropped:"メッセージドロップ",awaitingRelLen:"解放待ち",deliverMsg:"配信",enqueueMsg:"メッセージエンキュー",createdAt:"セッション作成日時",connectedAt:"接続日時",connected:"接続ステータス",clientsDetails:"詳細",basicInfo:"基本情報",subsInfo:"サブスクリプションリスト",protoVer:"プロトコルバージョン",protoName:"プロトコル名",protoType:"プロトコルタイプ",connectInfo:"接続情報",isBridge:"ブリッジフラグ",disconnectAt:"切断日時",session:"セッション情報",max:"最大の",subscriptions:"サブスクリプション数",inflight:"インフライト",mqueue:"メッセージキュー",awaiting_rel:"未確認のPUBRECパケット数",recv_cnt_desc:"受け取った TCP メッセージ数",recv_msg_desc:"受け取った PUBLISH メッセージ数",recv_oct_desc:"受け取ったバイト数",recv_pkt_desc:"受け取った MQTT メッセージ数",send_cnt_desc:"送信された TCP メッセージ数",send_msg_desc:"送信された PUBLISH メッセージ数",send_oct_desc:"送信されたバイト数",send_pkt_desc:"送信された MQTT メッセージ数",currentSubs:"カレントのサブスクリプション数",addSubs:"サブスクリプション追加",view:"詳細",disconnected:"未接続",kickOut:"キックアウト"},topics:{topic:"トピック",node:"ノード"},subscriptions:{clientId:"クライアントID",topic:"トピック",qoS:"QoS",share:"サブスクライブ"},plugins:{name:"プラグイン名",version:"バージョン",description:"用途",status:"ステータス",stopped:"停止済",running:"実行中",start:"開始",stop:"停止",config:"設定",manage:"管理",tutorial:"ドキュメント",back:"戻る",advancedConfig:"詳細設定",add:"新規",configSuccess:"設定に成功しました",configFailure:"設定に失敗しました",notice:"プラグインの設定を変更してもよろしいですか?プラグインを再起動した後に有効になります",giveUpNotice:"変更されたプラグインの設定を破棄してもよろしいですか?",noticeTitle:"お知らせ",cacheNotice:"キャンセルされました",emptyConfigOption:"デフォルトの設定項目が空です",searchByName:"プラグイン名で検索",usernameRequired:"ユーザー名を入力してください",passwordRequired:"パスワードを入力してください",clientidRequired:"クライアントIDを入力してください",algorithm:"アルゴリズム",secret:"シークレット",payloadDesc:"%uと%cプレースホルダは、入力したユーザー名とクライアントIDの代わりに使用できます(verify_claimsを起動する場合)、詳細はこちらへ",jwtDoc:"JWT認証",dataDesc:"データセットは行で表示されています。ユーザー名とクライアントIDはコンマで区切られます",secretRequired:"シークレットを入力してください",payloadRequired:"Payloadのテンプレートを入力してください",dataRequired:"Payloadのデータを入力してください",leaveTokenPage:"現在のページを離れると、入力内容及び生成したTOKENが失われます。このまま処理を続けてもよろしいですか?"},modules:{name:"モジュール名",enable:"有効にする",disable:"無効にする",enabled:"有効",disabled:"無効"},instances:{instances:"インスタンス",back:"戻る",info:"基本情報",name:"インスタンス名",descr:"備考",service:"サービス",configInfo:"設定",initConfig:"初期設定",remarkConfig:"備考を入力してください",createInstance:"新規インスタンス",selectServiceType:"インスタンスタイプ",all:"全て",running:"実行中",stopped:"停止済",auth:"認証",backend:"バックエンド",hook:"フック",bridge:"ブリッジ",other:"その他",select:"選択",selected:"選択済",nextStep:"次のステップ",authDesc:"ログイン認証を提供し、ACLサービスのパブリッシュ及びサブスクライブ",backendDesc:"指定したデータベースにメッセージを保存する",bridgeDesc:"メッセージミドルウェアのデータソースとして、メッセージフローをブリッジするためのサービス",hookDesc:"トリガーによるコールバック起動できるサービス",otherDesc:"システム稼働情報やその他のサービス"},listeners:{protocol:"プロトコル",listenOn:"アドレス",maxConnections:"最大の接続数",currentConnections:"現在の接続数"},websocket:{connect:"接続",host:"ホスト",port:"ポート",clientID:"クライアントID",username:"ユーザー名",password:"パスワード",keepAlive:"キープアライブ(秒)",cleanSession:"セッションクリア",disconnect:"切断",currentState:"カレントステータス",subscribe:"サブスクライブ",topic:"トピック",qoS:"QoS",date:"サブスクライブ日時",oper:"オペレーション",messages:"メッセージ",retained:"最新保持",send:"送信する",messagesAlreadySent:"送信されたメッセージリスト",messagesReceived:"受け取ったメッセージリスト",time:"時間",connectError:"接続エラーが発生しました",connectFailure:"接続に失敗しました",connectLeave:"サーバーに接続されていません",subscribeSuccess:"サブスクライブが成功にしました",subscribeFailure:"サブスクライブが失敗にしました",messageSendOut:"メッセージが送信されました",connected:"接続済",connecting:"接続中",disconnected:"未接続",notSupport:"お使いのブラウザはWebSocketをサポートしていません"},httpApi:{introduction:"説明",desc:"ヘルプページを除いて、すべてのURIはapplication / json形式でリソースを返し、各リクエストにはHTTP基本認証が必要です。デフォルトのユーザー名とパスワードはadmin / publicです。
emqx_dashboardプラグインは、サーバーの実行ステータス、データ統計、MQTTパケット数を可視化するためのWeb管理コンソールを提供します。",reference:"リファレンス",method:"メソッド",path:"パス",description:"詳細",back:"戻る",linkAddress:"リクエストURL",data:"レスポンスデータ"},app:{appId:"App ID",secret:"App secret",newApp:"新規",viewApp:"詳細",editApp:" 編集",errors:"この項目は入力が必須です",name:"App名",desc:"備考",expired:"有効期限",status:"ステータス",enable:"有効",disable:"無効",enableText:"有効になります",disableText:"無効になります",expiredText:"有効期限なし",guide:"EMQ X REST API を利用してアプリケーションを構築するガイド、詳細はこちらへ",docs:"ドキュメント"},users:{newUser:"新規",editUser:"編集",username:"ユーザー名",remark:"備考",password:"パスワード",confirmPassword:"パスワード確認用",oldPassword:"古いパスワード",newPassword:"新しいパスワード",confirmNewPassword:"新しいパスワード確認用",changePassword:"パスワード変更",dontChangePassword:"キャンセル",usernameRequired:"ユーザー名を入力してください",remarkRequired:"備考を入力してください",usernameIllegal:"ユーザー名の長さ: 3~32",passwordRequired:"パスワードを入力してください",newPasswordRequired:"新しいパスワードを入力してください",passwordInconsistent:"新パスワードと再入力パスワードが一致しません",authenticate:"パスワードが変更されたので、もう一度ログインしてください",createUser:"ユーザーを作成しました",passwordIllegal:"パスワードの長さ: 3~255"},alert:{required:"必須項目です",success:"が成功しました",failure:"が失敗しました",connect:"接続"},login:{title:"ログイン",username:"ユーザー名",password:"パスワード",remember:"ログイン状態を保持する",loginButton:"ログイン",error:"ユーザー名またはパスワードが間違っています",usernameRequired:"ユーザー名を入力してください",passwordRequired:"パスワードを入力してください"},settings:{themes:"テーマ",language:"システム言語",apply:"アプライ",success:"更新しました"},config:{importConfig:"設定をインポートする",selectConfigFile:"設定ファイルを選択してください",configFileMustBeJson:"バックアップファイルがJSON形式であることを確認してください",createBy:"作成者:",create:"新規",createUser:"新規ユーザー",nodeName:"ノード名",host:"ホスト",descr:"備考",createAt:"作成日時",more:"もっと詳しく知る",reSelect:"もう一度選択",not_a_valid_config_file:"有効な設定ファイルではありません",payload_error:"無効なコンテンツが含まれています",import_file_error:"設定ファイルをインポートするときにエラーが発生しました",exportConfig:"設定をエクスポートする",ex:"エクスポート",atLeastThree:"少なくとも3つの文字",importSuccess:"正しくインポートできました",notice:"バックアップした設定ファイルを使用して設定を初期化/変更します。
※ 設定ファイルには、データベースアドレスや認証情報などの重要なデータが含まれている可能性があります。設定ファイルを適切に保管してください。"},help:{quickStart:"クイックスタート",emqxDesc:"EMQ X Brokerは、高い並行処理指向のErlang / OTPに基づいて、オープンソースコミュニティで最も人気のあるMQTT ブローカーです。MQTT、LwM2M、MQTT-SN、CoAP、LoRaWAN、HTTP、WebSocketなどの豊富なIoTプロトコルをサポートしています。EMQ X Brokerが良かったと思われる方は、GitHubでフォローしていただけると嬉しいです。更に、皆様からのコントリビューションを歓迎します。",emqxEnterprise:"EMQ X Enterprise",enterpriseDesc:"EMQ X Enterpriseにおいて、様々なデータ永続化、セキュリティ監視サービス、稼働監視など機能を提供しています。無料体験版より包括的な機能、より強力な安定性とパフォーマンス、より厳密なセキュリティのメリットがあります。
更に、新しいダッシュボードが含まれ、1つのIoT Hubクラスターにより数百万のデバイス接続を簡単に作成及び管理できます。",freeTrial:"無料トライアル",useDocs:"ドキュメント",docsDesc:"EMQ X Brokerの全機能に関する役立つドキュメントを用意しています。",forwardView:"ドキュメントを見る",faqDesc:"EMQ X Brokerの使用中にエラー(「一時的なエラー」など)が発生した場合、よくあるご質問ページを参考にして問題を解決することをお勧めします。",forwardFaq:"よくあるご質問",followUs:"フォローする"},analysis:{topicMetrics:"トピック分析",metricsTip:"(メトリックはすべての統計を含む、データがリアルタイムで反映されます)",messageIn:"メッセージ流入",messageOut:"メッセージ流出",messageDrop:"メッセージドロップ",addTopic:"トピック追加",details:"詳細データ",all:"全て",rateItem:"{0} 件/秒",rate:"(頻度)",messageInDesc:"(メッセージ流入頻度)",messageOutDesc:"(メッセージ流出頻度)",messageDropDesc:"(メッセージドロップ頻度)",loadAnalysis:"有効にする",loadSuccess:"有効になりました",alarmName:"アラート名",alarmMessage:"アラート内容",activateAt:"開始日時",deactivateAt:"終了日時",duration:"持続時間",currentAlarms:"カレントアラート",historicalAlarm:"アラート履歴",deactivate:"無効にする",clearAll:"全てクリア",confirmClear:"全てのアラートをクリアにしてもよろしいですか?",confirmDeactivate:"全てのアラートを無効にしてもよろしいですか?"},httpCode:{0:"成功しました",101:"RPC 操作に失敗しました",102:"未知のエラーが発生しました",103:"ユーザー名またはパスワードが間違っています",104:"ユーザー名とパスワードを入力してください",105:"ユーザーは存在しません",106:"管理者を削除できません",107:"リクエストパラメータが正しくないために、エラーが発生しました",108:"リクエストパラメータタイプが正しくないために、エラーが発生しました",109:"リクエスト本文がJSON形式ではありません",110:"プラグインは既に有効になります",111:"プラグインは既に無効になります",112:"クライアントはオンラインではありません",113:"ユーザー名は既に存在しています",114:"入力された古いパスワードが正しくありません",115:"テーマを変更するときにエラーが発生しました"},util:{day:"日",year:"年"}});t.a={en:a()({},o,{rule:{viewStates:"Status",topic:"Topic",node:"Node",all:"All",connectSuccess:"Connect success",speed_unit:"times/s",match_unit:"times",match_rate:"Hit Rate",success:"success",failed:"failed",params:"Params",matched_line:"(matched/not matched)",speed_line:"(current/max/last5m)",current:"current",max:"max",last5m:"last5m",metrics:"Metrics",speed:"Speed(seconds)",speed_max:"Speed max",speed_last5m:"The last 5 minutes speed",rule_matched:"Rule matched number",rule_nomatch:"Number of not atched",speed_current:"Matching Speed",speed_max_1:"Maximum Speed",speed_last5m_1:"Last5Mins Speed",rule_matched_1:"Matched",rule_nomatch_1:"Not Matched",enabled:"In Service",disabled:"Out of Service",running_statue:"Running status",reconnect:"Reconnect",connect:"Connect",stopped:"Stopped",running:"Running",no_test_output:"",test_output:"Result",test:"Test",input_test_data:"Test SQL",input_test_data_tips:"Input mock data and test SQL",is_required:"is required",conf_test:"Test Connection",conf_test_success:"Connection Success",conf_test_fail:"Connection Failed",new_resource:"New Resource",action_type:"Action Type",event_info:"Available Field",suggest_sql:"SQL Example",upgrade_tip:"Upgrade Tip",json_decode_upgrade:"The current version cancels the automatic JSON decoding of the payload. Select the field in the payload and use json_decode to decode it, as in the SQL example.",events:{message_acked:"message.acked",message_dropped:"message.dropped",message_publish:"message.publish",message_delivered:"message.deliver",client_unsubscribe:"client.unsubscribe",client_subscribe:"client.subscribe",client_disconnected:"client.disconnected",client_connected:"client.connected"},trigger_events:"Trigger",id:"ID",exists:"exists key",data_key:"KEY",data_value:"VALUE",events_rule:"Events Rule",create_rule:"Events Rule",events_type:"Events Type",rely_resource:"Resource",actions_tips:"Processing messages for hit rules",conditional_tips:"Defining rule conditions and data processing ways through SQL",conditional:"Rule condition",rule_engine:"Rule Engine",message_rule:"Rule",create:"Create",rule_name:"Rule Name",actions:"Actions",action:"Action",resource:"Resource",oper:"Operation",view:"View",confirm:"Confirm",delete:"Delete",rule_details:"Details",rule_desc:"Description",confirm_stop_delete:"Confirm to stop and remove ?",delete_success:"Delete success",action_exists:"Action already exists",cancel:"Cancel",resource_mgmt:"Resources",name:"Name",resource_type:"Resource Type",description:"Description",create_success:"Create success",type:"Type",value:"Value",edit:"Edit",add:"Add",ruleEnabled:"Enabled",ruleDisabled:"Disabled",basic_info:"Basic Info",rule_name_required:"rule name required",rule_sql:"SQL",rule_id:"Rule ID",rule_descr_placeholder:"e.g.message render to Webhook",rule_sql_tips_title:"Write SQL statements for conditional filtering and data processing:",sql_tips_html:'

EMQ X will trigger the Rule Engine when the message is published and the event is triggered, and the rules meeting the triggering conditions will execute their respective SQL statements to filter and process the context information of the message and event.

\n\n

\n With the Actions, the Rule Engine can store the message processing results of a specified topic to the database, send them to the HTTP Server, forward them to the Kafka or RabbitMQ, and republish them to a new topic or another broker cluster like Azure IoT Hub. Each rule can allocate multiple Actions.\n

\n\n

1. Select the messages published to t/# and select all fields:

\n\n
\n SELECT * FROM "t/#"\n
\n\n

2. Select the message published to the t/a topic, and select the "x" field from the message payload in JSON format:

\n\n
\n SELECT payload.x as x FROM "t/a"\n
\n\n

The Rule Engine uses the virtual topic (Event Topic) starting with $events/ to process the built-in events of EMQ X. the built-in events provide more sophisticated message control and client action processing capabilities, which can be used in the message arrival records of QoS 1 and QoS 2, the device up and down line records and other businesses.

\n\n

1. Select the client connected event, filter the device with Username \'emqx\' and select the connection information:

\n
\n SELECT clientid FROM "$events/client_connected" WHERE username = \'emqx\'\n
\n\n

See the EMQ X documentation for a detailed tutorial on the rules engine and SQL statements.

',condition_screening:"Condition Screening",topic_condition:"Topic",message_publish_topic:"Message topic",set_action:"Action Handler",sql_required:"SQL required",actions_required:"actions required",rule_action_tips_title:"Define action handlers",action_tips_html:"\n

1. Re-publish message to message server

\n\n Re-publishing messages to broker requires specifying the target theme\n\n

2. Forwarding messages to Webhook

\n\n Forwarding messages to HTTP Webhook",resource_title:"Resource",resource_des:"Description",resource_id:"Resource ID",id_len_tip:"The longest 64",id_char_tip:"Only Numbers, letters, underscores, and colons are supported",type_required:"Type is required",resource_details:"Details",config_info:"Configuration",clientid_doc:"Current MQTT clientid",username_doc:"Current MQTT username",event_doc:"Trigger event name",id_doc:"MQTT message id",payload_doc:"The payload, if in JSON format, will be automatically decoded, and the object information will be obtained by using payload.x in SQL",peerhost_doc:"Client peer name",qos_doc:"Enumeration of message QoS 0,1,2",timestamp_doc:"Timestamp(millisecond)",topic_doc:"Currently MQTT topic can be filtered by wildcards in SQL. When multiple topics are included in subscribe and unsubscribe, only the first one will be obtained here. To obtain all topics, please use topic_filters",node_doc:"Node name of the trigger event",message_delivered:"message delivered",message_acked:"message acked",message_dropped:"message dropped",client_connected:"client connected",client_disconnected:"client disconnected",session_subscribed:"session subscribed",session_unsubscribed:"session unsubscribed",parse_confirm:"Detected incompatible old SQL syntax, confirm to automatically convert it to the new version?",fallbackAction:"Fallback Actions",fallbackActionCreate:"Set the action that will be performed when an action execution error occurs (optional)",fallbackActionTip:"Action to be performed when the action execution error"}}),zh:a()({},d,{rule:{viewStates:"状态",topic:"主题",node:"节点",all:"合计",connectSuccess:"连接成功",speed_unit:"次/秒",match_unit:"次",match_rate:"命中率",success:"成功",failed:"失败",params:"参数",matched_line:"(命中/未命中)",speed_line:"(当前/最大/最近5分钟)",current:"当前",max:"最大",last5m:"最近5分钟",metrics:"度量指标",speed:"速度(秒)",speed_max:"最大命中速度",speed_last5m:"5分钟平均速度",rule_matched:"匹配条数",rule_nomatch:"未匹配条数",speed_current:"命中速度",speed_max_1:"最大命中速度",speed_last5m_1:"5分钟平均速度",rule_matched_1:"已命中",rule_nomatch_1:"未命中",enabled:"可用",disabled:"不可用",running_statue:"运行状态",reconnect:"重新连接",connect:"连接",stopped:"已停止",running:"运行中",no_test_output:"暂无结果",test_output:"测试输出",test:"测试",input_test_data:"SQL 测试",input_test_data_tips:"自定义模拟数据进行 SQL 命令测试,仅用于测试功能",is_required:"必填",conf_test:"测试连接",conf_test_success:"连接可用",conf_test_fail:"连接不可用",new_resource:"新建资源",action_type:"动作类型",event_info:"可用字段",suggest_sql:"规则 SQL 示例",upgrade_tip:"升级提示",json_decode_upgrade:"当前版本取消对 payload 的自动 JSON 解码,选择 payload 中的字段请使用 json_decode 解码,如 SQL 示例。",events:{message_acked:"消息确认",message_dropped:"消息丢弃",message_publish:"消息发布",message_delivered:"消息投递",client_unsubscribe:"取消订阅",client_subscribe:"订阅",client_disconnected:"连接断开",client_connected:"连接完成"},trigger_events:"触发事件",id:"ID",exists:"键重复",data_key:"键",data_value:"值",rely_resource:"关联资源",actions_tips:"处理命中规则的消息",conditional_tips:"使用 SQL 定义规则条件与数据处理方式",conditional:"条件",rule_engine:"规则引擎",message_rule:"规则",create:"新建",rule_name:"规则名称",actions:"响应动作",action:"动作",resource:"关联资源",oper:"操作",view:"查看",confirm:"确认",delete:"删除",rule_details:"规则详情",rule_desc:"规则描述",confirm_stop_delete:"确认停用并删除?",delete_success:"删除成功",action_exists:"动作已存在",cancel:"取消",resource_mgmt:"资源管理",name:"名称",resource_type:"资源类型",description:"备注",create_success:"创建成功",type:"类型",value:"值",edit:"编辑",add:"添加",ruleEnabled:"已启动",ruleDisabled:"已停止",basic_info:"基本信息",rule_name_required:"请输入规则名称",rule_sql:"规则 SQL",rule_id:"规则 ID",rule_descr_placeholder:"e.g.消息转发到 Webhook",rule_sql_tips_title:"编写 SQL 进行条件过滤与数据处理:",sql_tips_html:'

EMQ X 在消息发布、事件触发时将触发规则引擎,满足触发条件的规则将执行各自的 SQL 语句筛选并处理消息和事件的上下文信息。

\n

规则引擎借助响应动作可将特定主题的消息处理结果存储到数据库,发送到 HTTP Server,转发到消息队列 Kafka 或 RabbitMQ,重新发布到新的主题甚至是另一个 Broker 集群中,每个规则可以配置多个响应动作。

\n\n

1. 选择发布到 \'t/#\' 主题的消息,并筛选出全部字段:

\n\n
\n SELECT * FROM "t/#"\n
\n\n

2. 选择发布到 \'t/a\' 主题的消息,并从 JSON 格式的消息内容中筛选出 "x" 字段:

\n\n
\n SELECT payload.x as x FROM "t/a"\n
\n\n

规则引擎使用 $events/ 开头的虚拟主题(事件主题)处理 EMQ X 内置事件,内置事件提供更精细的消息控制和客户端动作处理能力,可用在 QoS 1 QoS 2 的消息抵达记录、设备上下线记录等业务中。

\n\n

1. 选择客户端连接事件,筛选 Username 为 \'emqx\' 的设备并获取连接信息:

\n
\n SELECT clientid, connected_at FROM "$events/client_connected" WHERE username = \'emqx\'\n
\n\n

规则引擎和 SQL 语句的详细教程参见 EMQ X 文档。

',condition_screening:"条件筛选",topic_condition:"主题条件",message_publish_topic:"消息发布主题",set_action:"响应动作",sql_required:"请输入 SQL",actions_required:"动作不能为空",rule_action_tips_title:"定义动作",action_tips_html:"\n

1. 重新发布消息至消息服务器

\n将消息重新发布到 broker 中,需要指定目标主题\n

2. 将消息转发至 Webhook

\n将消息转发至 HTTP Webhook",resource_title:"资源",resource_des:"描述",resource_id:"资源 ID",id_len_tip:"最长64位",id_char_tip:"仅支持数字、字母、下划线和冒号",type_required:"类型必选",resource_details:"资源详情",config_info:"配置信息",events_rule:"事件规则",create_rule:"事件规则",events_type:"事件类型",clientid_doc:"当前客户端 MQTT clientid",username_doc:"当前客户端 MQTT username",event_doc:"触发事件名称",id_doc:"MQTT message id",payload_doc:"消息内容, 如果是 JSON 格式将自动解码, 在 SQL 中使用 payload.x 获取对象信息",peerhost_doc:"客户端网络地址",qos_doc:"消息 QoS 0,1,2 中枚举",timestamp_doc:"当前毫秒级时间戳",topic_doc:"当前 MQTT 主题, SQL 中可以使用通配符进行筛选.\nSubscribe 与 Unsubscribe 请求中包含多个主题时, 这里只会获取到第一个, 如需获取全部请使用 topic_filters",node_doc:"触发事件的节点名称",message_delivered:"消息投递",message_acked:"消息应答",message_dropped:"消息丢弃",client_connected:"连接建立",client_disconnected:"连接断开",session_subscribed:"会话订阅",session_unsubscribed:"会话取消订阅",parse_confirm:"检测到不兼容的旧版 SQL 语法,是否自动转换为新版语法?",fallbackAction:"失败备选动作",fallbackActionCreate:"设置发生动作执行错误时将执行的动作(可选)",fallbackActionTip:"动作执行错误时将执行的操作"}}),ja:a()({},m,{rule:{viewStates:"ステータス",topic:"トピック",node:"ノード",all:"合計",connectSuccess:"接続に成功しました",speed_unit:"回/秒",match_unit:"回",match_rate:"ヒット率",success:"成功",failed:"失敗",params:"パラメータ",matched_line:"(一致/不一致)",speed_line:"(カレント/最大/直近5分間)",current:"カレント",max:"最大",last5m:"直近5分間",metrics:"基準",speed:"スピード(秒)",speed_max:"最大ヒットスピード",speed_last5m:"5分間の平均スピード",rule_matched:"ルール一致数",rule_nomatch:"ルール不一致数",speed_current:"ヒットスピード",speed_max_1:"最大ヒットスピード",speed_last5m_1:"5分間の平均スピード",rule_matched_1:"一致",rule_nomatch_1:"不一致",enabled:"利用可能",disabled:"利用不可",running_statue:"稼働状況",reconnect:"再接続",connect:"接続",stopped:"停止",running:"稼働中",no_test_output:"結果なし",test_output:"テスト出力",test:"テスト",input_test_data:"SQLテスト",input_test_data_tips:"SQLテスト用のカスタムシミュレーションデータ、テスト用のみ",is_required:"を入力してください",conf_test:"接続テスト",conf_test_success:"接続可能",conf_test_fail:"接続不可能",new_resource:"新規リソース",action_type:"アクションタイプ",event_info:"利用可能なフィールド",suggest_sql:"SQLサンプル",upgrade_tip:"アップグレードヒント",json_decode_upgrade:"カレントバージョンでは自動的にpayloadのJSONにデコード機能が廃棄されました。payloadのフィールドを選択して、json_decodeでデコードしてください。例として、",events:{message_acked:"メッセージの肯定応答",message_dropped:"メッセージドロップ",message_publish:"メッセージ送信",message_delivered:"メッセージ配信",client_unsubscribe:"クライアントアンサブスクリプション",client_subscribe:"サブスクリプション登録",client_disconnected:"接続切れ",client_connected:"接続済"},trigger_events:"トリガーイベント",id:"ID",exists:"重複キー",data_key:"キー",data_value:"値",rely_resource:"関連リソース",actions_tips:"ヒットルールメッセージの処理",conditional_tips:"SQLによってルール条件とデータ処理方法を定義する",conditional:"ルール条件",rule_engine:"ルールエンジン",message_rule:"ルール",create:"新規",rule_name:"ルール名",actions:"応答アクション",action:"アクション",resource:"リソース",oper:"オペレーション",view:"詳細",confirm:"確認",delete:"削除",rule_details:"ルール詳細",rule_desc:"ルール詳細",confirm_stop_delete:"停止して削除することを確認しますか?",delete_success:"削除が成功しました",action_exists:"アクションがすでに存在されました",cancel:"キャンセル",resource_mgmt:"リソース管理",name:"名前",resource_type:"リソースタイプ",description:"備考",create_success:"新規作成に成功しました",type:"タイプ",value:"値",edit:"編集",add:"追加",ruleEnabled:"有効になります",ruleDisabled:"無効になります",basic_info:"基本情報",rule_name_required:"ルール名を入力してください",rule_sql:"ルールSQL",rule_id:"ルールID",rule_descr_placeholder:"例:Webhookへ転送されたメッセージ",rule_sql_tips_title:"SQLによる条件付きフィルタリングとデータ処理:",sql_tips_html:'

EMQXは、メッセージが公開されてイベントがトリガーされると、ルールエンジンをトリガーします。トリガー条件を適応するルールは、自体のSQLを実行し、メッセージとイベントのコンテキスト情報をフィルター処理します。

\n

ルールエンジンは、応答アクションを利用して、特定のトピックのメッセージの処理結果をデータベースに格納し、HTTPサーバーに送信し、メッセージキューKafkaまたはRabbitMQに転送し、新しいトピックまたは別のBrokerクラスターに再発行できます。各ルールに対して、複数の応答アクションをデプロイ可能です。

\n\n

1. トピックt/#\'のメッセージを選択し、全てのフィールドを絞る:

\n\n
\n SELECT * FROM "t/#"\n
\n\n

2. トピック\'t/a\'のメッセージを選択し、JSON形式のメッセージからフィールド"x"を絞る:

\n\n
\n SELECT payload.x as x FROM "t/a"\n
\n\n

ルールエンジンは$events/で始まる仮トピック(イベントトピック)を使用して、EMQX内部のイベントを処理します,内部イベントはもっと細かいメッセージ制御およびクライアントアクション処理機能を提供し、QoS 1 QoS 2メッセージ到着レコード、デバイスのオンラインおよびオフラインレコードなどのサービスで使用できます。

\n\n

1. クライアント接続イベントを選択し、ユーザ名\'emqx\'の設備を接続して接続情報を取得する:

\n
\n SELECT clientid, connected_at FROM "$events/client_connected" WHERE username = \'emqx\'\n
\n\n

ルールエンジンとSQLの詳細説明について、EMQXのドキュメントを参考してください。

',condition_screening:"条件付きフィルタリング",topic_condition:"トピック条件",message_publish_topic:"メッセージ公開トピック",set_action:"応答アクション",sql_required:"SQLを入力してください",actions_required:"アクションを選択してください",rule_action_tips_title:"アクションを定義する",action_tips_html:"\n

1. メッセージをメッセージサーバに再公開

\nメッセージをbrokerに再公開、目標トピックが必要\n

2. メッセージをWebhookへ転送する

\nメッセージをHTTP Webhookへ転送する",resource_title:"リソース",resource_des:"リソース詳細",resource_id:"リソースID",id_len_tip:"最大64ビットまで",id_char_tip:"入力可能文字:半角英数字・「_(アンダースコア)」・「:(コロン)」のみ",type_required:"リソースタイプを選択してください",resource_details:"リソース詳細",config_info:"構成情報",events_rule:"イベントルール",create_rule:"新規ルール",events_type:"イベントタイプ",clientid_doc:"カレントMQTTクライアントID",username_doc:"カレントMQTTユーザ名",event_doc:"トリガーイベント名",id_doc:"MQTTメッセージid",payload_doc:"JSONフォーマットの場合、payloadが自動的にデコードされます。 SQL文中にpayload.xでオブジェクト情報を取得することができます",peerhost_doc:"クライアントアドレス",qos_doc:"QoS 0、1、2 のメッセージ中の列挙型",timestamp_doc:"タイムスタンプ(ミリ秒)",topic_doc:"カレントMQTTトピック、SQL中にワイルドカードを使用してフィルターすることができます。 \nサブスクライブとアンサブスクライブの中に複数のトピックが存在している場合、最初のトピックだけを受け取れます。全てのデータを取得したい場合、topic_filtersを使用してください",node_doc:"トリガ・イベントのノード名",message_delivered:"メッセージ配信",message_acked:"メッセージの肯定応答",message_dropped:"メッセージドロップ",client_connected:"接続済",client_disconnected:"未接続",session_subscribed:"セッションサブスクライブ",session_unsubscribed:"セッションアンサブスクライブ",parse_confirm:"互換性がないの古いバージョンのSQL文が見つかりました。新しいバージョンに変更しますか?",fallbackAction:"フォールバックアクション",fallbackActionCreate:"アクション実行エラーが発生したとき、エラー処理の動作を設定します(任意)",fallbackActionTip:"アクション実行エラーが発生したときの動作"}})}},LNTb:function(e,t){},NHnr:function(e,t,s){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=s("fZjL"),a=s.n(n),r=s("7+uW"),i=s("9JMe"),o=s("TXmL"),c=s("zL8q"),l=s.n(c),d=s("urW8"),u=s.n(d),p={render:function(){var e=this.$createElement,t=this._self._c||e;return t("div",{attrs:{id:"app"}},[t("router-view")],1)},staticRenderFns:[]};var m=s("VU/8")({name:"App"},p,!1,function(e){s("LNTb")},null,null).exports,_=s("cHtD"),b=s("olkN"),g=(s("7TWk"),s("HL/F")),h=s("mvHQ"),f=s.n(h),v={name:"json-input",components:{},inheritAttrs:!1,props:{value:[Array,Object,String]},model:{prop:"value",event:"input"},data:function(){return{objectPlaceholder:"JSON, e.g: \n"+f()({Authorization:"Basic YWRtaW46cHVibGlj"},null,2),sourceValue:""}},methods:{},created:function(){try{this.sourceValue=JSON.parse(this.value,null,2)}catch(e){this.sourceValue=""}},watch:{value:function(e){console.log(e)},sourceValue:function(e){var t=e;if(e){try{t=JSON.parse(e)}catch(s){t=e}this.$emit("input",t)}else this.$emit("input",void 0)}},computed:{}},S={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("el-input",{staticClass:"json-input",attrs:{type:"textarea",placeholder:e.$attrs.placeholder||e.objectPlaceholder,rows:5},model:{value:e.sourceValue,callback:function(t){e.sourceValue=t},expression:"sourceValue"}})},staticRenderFns:[]};var w=s("VU/8")(v,S,!1,function(e){s("+O6S")},null,null).exports,y=s("Dd8w"),T=s.n(y),k=s("d7EF"),C=s.n(k),A=s("W3Iv"),D=s.n(A),E={name:"data-table",components:{},props:{value:{required:!0},isRaw:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},option:{type:Object,default:function(){return{}}},allowedArray:{type:Boolean,default:!1}},model:{prop:"value",event:"input"},watch:{},data:function(){return{tableData:[{__new:!0,key:"",value:""}]}},methods:{initValue:function(e){var t=this;e?(this.tableData=[],D()(e).forEach(function(e){var s=C()(e,2),n=s[0],a=s[1];n&&(a&&Array.isArray(a)?a.forEach(function(e){t.tableData.push({key:n,value:e})}):t.tableData.push({key:n,value:a}))}),this.disabled||this.tableData.push({key:"",value:"",__new:!0})):this.tableData=[{key:"",value:"",__new:!0}]},handleInput:function(e){e.__new&&(this.$delete(e,"__new"),(e.key||e.value)&&this.tableData.push({key:"",value:"",__new:!0})),this.setObject()},setObject:function(){var e=this,t={},s={};this.tableData.forEach(function(n){e.$set(n,"__has_error",!1);var a=n.key,r=n.value,i=void 0===r?"":r,o=n.__new;if(a&&!o)if(!s[a]||e.allowedArray)s[a]?Array.isArray(t[a])?t[a].push(i):t[a]=[t[a],i]:t[a]=i,t[a]&&!e.allowedArray&&Array.isArray(t.key)&&(t[a]=t[a][0]),s[a]=!0;else{e.$set(n,"__has_error",!0);var c=e.tableData.find(function(e){return a===e.key});c&&e.$set(c,"__has_error",!0)}}),this.$emit("input",t)},handleOper:function(e,t,s){["edit"].includes(e)?this.$set(this.tableData[t],"__"+e,s):"remove"===e&&(this.tableData=this.tableData.filter(function(e,s){return s!==t})),this.setObject()}},created:function(){this.initValue(this.value)},computed:{_option:function(){return T()({keyLabel:this.$t("rule.data_key"),valueLabel:this.$t("rule.data_value")},this.option)}}},M={render:function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("el-table",{staticClass:"data-table",class:{disable:e.disabled,"el-table--public":e.isRaw},staticStyle:{"margin-top":"1px"},attrs:{border:"",data:e.tableData}},[s("el-table-column",{attrs:{prop:"key",label:e._option.keyLabel},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.row;return[s("span",{staticClass:"data-value"},[e._v(e._s(n.key))]),e._v(" "),s("el-input",{staticClass:"data-input",class:{"is-error":n.__has_error&&!n.__new},attrs:{size:"mini",placeholder:n.__new?"Key":""},on:{input:function(t){return e.handleInput(n)}},model:{value:n.key,callback:function(t){e.$set(n,"key",t)},expression:"row.key"}},[n.__has_error?s("template",{slot:"append"},[e._v("\n "+e._s(e.$t("rule.exists"))+"\n ")]):e._e()],2)]}}])}),e._v(" "),s("el-table-column",{attrs:{prop:"value","class-name":"value-column",label:e._option.valueLabel},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.row,a=t.$index;return[s("span",{staticClass:"data-value"},[e._v(e._s(n.value))]),e._v(" "),s("el-input",{staticClass:"data-input",attrs:{size:"mini",placeholder:n.__new?"Value":""},on:{input:function(t){return e.handleInput(n,!1)}},model:{value:n.value,callback:function(t){e.$set(n,"value",t)},expression:"row.value"}}),e._v(" "),e.disabled?e._e():s("i",{class:{"el-icon-close":!n.__new,"oper-icon":!0},on:{click:function(t){return e.handleOper("remove",a,!0)}}},[e._v("\n "+e._s(n.__new?" ":"")+"\n ")])]}}])})],1)},staticRenderFns:[]};var I=s("VU/8")(E,M,!1,function(e){s("hDVS")},null,null).exports,x=s("w7XY"),q=s("VOAv"),R=s("CqLJ"),P=s.n(R),N={dateFormat:function(e){return e?10===e.toString().length?P()(1e3*e,"yyyy-mm-dd HH:MM:ss"):P()(e,"yyyy-mm-dd HH:MM:ss"):""}};r.default.config.productionTip=!1,r.default.use(o.a),r.default.use(l.a),r.default.prototype.$ELEMENT={size:"medium"},r.default.use(function(e){e.prototype.$httpGet=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t._=Date.now(),x.a.get(e,{params:t})},e.component(w.name,w),e.component(I.name,I),e.prototype.$httpPost=x.a.post,e.prototype.$httpPut=x.a.put,e.prototype.$httpDelete=x.a.delete,e.prototype.$axios=x.a,e.prototype.$env=window.EMQX_DASHBOARD_CONFIG||{}}),a()(N).forEach(function(e){r.default.filter(e,N[e])});var L=new o.a({locale:window.localStorage.language||window.EMQX_DASHBOARD_CONFIG.lang||"en",messages:g.a});u.a.i18n(function(e,t){return L.t(e,t)}),r.default.prototype.$t=function(e,t){return L.t(e,t)},Object(q.a)(),Object(i.sync)(b.a,_.a),new r.default({el:"#app",router:_.a,store:b.a,i18n:L,components:{App:m},template:""})},UVIz:function(e,t){},VOAv:function(e,t,s){"use strict";function n(e){e=["dark-themes","light-themes"].includes(e)?e:"dark-themes",document.querySelector("html").setAttribute("class",e)}function a(){n(localStorage.getItem("themes")||"dark-themes")}s.d(t,"a",function(){return a}),s.d(t,"b",function(){return n})},cHtD:function(e,t,s){"use strict";var n=s("7+uW"),a=s("/ocq"),r=s("olkN"),i=s("hQrB");n.default.use(a.a);var o=[{path:"/login",name:"login",component:function(){return s.e(18).then(s.bind(null,"lmfZ"))},meta:{requiresAuth:!1}},{path:"/",component:function(){return s.e(7).then(s.bind(null,"lO7g"))},children:[{path:"",name:"overview",component:function(){return s.e(16).then(s.bind(null,"RjBg"))}},{path:"/clients",name:"clients",component:function(){return s.e(1).then(s.bind(null,"zXyA"))}},{path:"/clients/:id",name:"clientDetails",component:function(){return Promise.all([s.e(0),s.e(8)]).then(s.bind(null,"8AHC"))}},{path:"/topics",name:"topics",component:function(){return s.e(1).then(s.bind(null,"zXyA"))}},{path:"/subscriptions",name:"subscriptions",component:function(){return s.e(1).then(s.bind(null,"zXyA"))}},{path:"/rules",name:"rules",component:function(){return Promise.all([s.e(0),s.e(13)]).then(s.bind(null,"IvP6"))}},{path:"/rules/create",name:"ruleCreate",component:function(){return Promise.all([s.e(3),s.e(0)]).then(s.bind(null,"nFS+"))}},{path:"/rules/:id",name:"ruleDetails",component:function(){return Promise.all([s.e(0),s.e(14)]).then(s.bind(null,"JWuK"))}},{path:"/resources",name:"resources",component:function(){return Promise.all([s.e(0),s.e(15)]).then(s.bind(null,"xPbZ"))}},{path:"/topic_metrics",name:"topic_metrics",component:function(){return s.e(11).then(s.bind(null,"GQ4E"))}},{path:"/alarms",name:"alarms",component:function(){return Promise.all([s.e(0),s.e(22)]).then(s.bind(null,"OgCE"))}},{path:"/plugins",name:"plugins",component:function(){return Promise.all([s.e(5),s.e(0)]).then(s.bind(null,"yoyQ"))}},{path:"/plugins/:pluginName",name:"pluginsName",component:function(){return Promise.all([s.e(2),s.e(0)]).then(s.bind(null,"zCPI"))}},{path:"/modules",name:"modules",component:function(){return s.e(6).then(s.bind(null,"fnGs"))}},{path:"/listeners",name:"listeners",component:function(){return s.e(19).then(s.bind(null,"uuOo"))}},{path:"/websocket",name:"websocket",component:function(){return Promise.all([s.e(4),s.e(0)]).then(s.bind(null,"EzHP"))}},{path:"/http_api",name:"http_api",component:function(){return s.e(9).then(s.bind(null,"qB/b"))}},{path:"/applications",name:"applications",component:function(){return s.e(21).then(s.bind(null,"Tk0c"))}},{path:"/users",name:"users",component:function(){return s.e(10).then(s.bind(null,"QSR2"))}},{path:"/settings",name:"settings",component:function(){return s.e(12).then(s.bind(null,"VKKr"))}},{path:"/help",name:"help",component:function(){return s.e(20).then(s.bind(null,"LbE0"))}}]},{path:"*",meta:{requiresAuth:!1},component:function(){return s.e(17).then(s.bind(null,"wkqA"))}}],c=new a.a({routes:o});c.beforeEach(function(e,t,s){var n=e.meta.requiresAuth;void 0===n||n?r.a.state.user.password?(i.a.indexOf(e.name)>-1&&r.a.dispatch("CANCEL_FEAT_ON_LEFTBAR",e.name),document.body.scrollTop=0,document.documentElement.scrollTop=0,s()):s({path:"/login",query:{redirect:e.fullPath}}):s()}),t.a=c},hDVS:function(e,t){},hQrB:function(e,t,s){"use strict";t.a=["alarms"]},olkN:function(e,t,s){"use strict";var n,a,r=s("bOdI"),i=s.n(r),o=s("mvHQ"),c=s.n(o),l=s("7+uW"),d=s("NYxO"),u=s("7YgM"),p=s.n(u),m=s("hQrB");function _(e){try{return JSON.parse(e)}catch(e){return null}}l.default.use(d.a);var b={loading:!1,user:_(sessionStorage.getItem("user"))||_(localStorage.getItem("user"))||{},nodeName:"",showFeatOnLeftbar:function(){var e=_(localStorage.getItem("showFeatOnLeftbar"));function t(){var e={};m.a.forEach(function(t){e[t]=!0});var t={version:p.a.version,data:e};return localStorage.setItem("showFeatOnLeftbar",c()(t)),t}return e?e.version!==p.a.version?(localStorage.removeItem("showFeatOnLeftbar"),t()):e:t()}()},g=(n={},i()(n,"USER_LOGIN",function(e,t){var s=e.commit;if(t.isLogOut)return sessionStorage.removeItem("user"),localStorage.removeItem("user"),void s("USER_LOGIN",t);t.remember?localStorage.setItem("user",c()(t.user)):sessionStorage.setItem("user",c()(t.user)),s("USER_LOGIN",t)}),i()(n,"CURRENT_NODE",function(e,t){(0,e.commit)("CURRENT_NODE",t)}),i()(n,"LOADING",function(e){(0,e.commit)("LOADING",arguments.length>1&&void 0!==arguments[1]&&arguments[1])}),i()(n,"CANCEL_FEAT_ON_LEFTBAR",function(e,t){(0,e.commit)("CANCEL_FEAT_ON_LEFTBAR",t)}),n),h=(a={},i()(a,"USER_LOGIN",function(e,t){t.isLogOut?l.default.set(e,"user",{}):l.default.set(e,"user",t.user)}),i()(a,"CURRENT_NODE",function(e,t){l.default.set(e,"nodeName",t)}),i()(a,"LOADING",function(e,t){e.loading=t}),i()(a,"CANCEL_FEAT_ON_LEFTBAR",function(e,t){var s=e.showFeatOnLeftbar;s.data[t]=!1,l.default.set(e,"showFeatOnLeftbar",s),localStorage.setItem("showFeatOnLeftbar",c()(s))}),a);t.a=new d.a.Store({strict:!1,state:b,actions:g,mutations:h})},w7XY:function(e,t,s){"use strict";var n=s("pFYg"),a=s.n(n),r=s("//Fk"),i=s.n(r),o=s("woOf"),c=s.n(o),l=s("mtWM"),d=s.n(l),u=s("Y81h"),p=s.n(u),m=s("UVIz"),_=(s.n(m),s("zL8q")),b=(s.n(_),s("cHtD")),g=s("olkN"),h=s("HL/F"),f=["zh","en"].includes(localStorage.language)?localStorage.language:window.EMQX_DASHBOARD_CONFIG.lang||"en",v=(h.a[f]||h.a.en).httpCode;p.a.configure({showSpinner:!1}),c()(d.a.defaults,{headers:{"Content-Type":"application/json","Cache-Control":"no-cache"},baseURL:"/api/v4",timeout:1e4});var S=0;function w(e){console.error(e),p.a.done(),clearTimeout(S),g.a.dispatch("LOADING",!1);var t=e.response&&e.response.status;return e.response&&e.response.data.message&&(e.message=e.response.data.message),401===t?(g.a.dispatch("USER_LOGIN",{isLogOut:!0}),b.a.push({path:"/login",query:{to:b.a.fullPath}})):404===t?e.message="URL Not Found":function(e){"module_not_loaded"!==e.message&&_.Message.error(e.message)}(e),i.a.reject(e.message)}d.a.interceptors.request.use(function(e){return g.a.state.user.username?e.auth={username:g.a.state.user.username,password:g.a.state.user.password}:b.a.push({path:"/login",query:{to:b.a.fullPath}}),p.a.start(),S=setTimeout(function(){g.a.dispatch("LOADING",!0)},100),e},function(e){console.warn("Request Error: ",e),g.a.dispatch("LOADING",!1)}),d.a.interceptors.response.use(function(e){var t={},s="";if("object"===a()(e.data)){var n=e.status,r=e.data,i=r.code,o=r.meta,c=r.message,l=e.data.data;0!==i&&(s=v[i]||c),o&&(l={items:l,meta:o}),t={data:l,status:n}}if(p.a.done(),clearTimeout(S),S=0,g.a.dispatch("LOADING",!1),s){var d=new Error(s);throw w(d),d}return t},w),t.a=d.a}},[0]);