diff --git a/apps/emqx/i18n/emqx_limiter_i18n.conf b/apps/emqx/i18n/emqx_limiter_i18n.conf index ad7ae11aa..ccbf77136 100644 --- a/apps/emqx/i18n/emqx_limiter_i18n.conf +++ b/apps/emqx/i18n/emqx_limiter_i18n.conf @@ -113,7 +113,7 @@ the check/consume will succeed, but it will be forced to wait for a short period burst { desc { - en: """The burst, This value is based on rate.
+ en: """The burst, This value is based on rate.
This value + rate = the maximum limit that can be achieved when limiter burst.""" zh: """突发速率。 突发速率允许短时间内速率超过设置的速率值,突发速率 + 速率 = 当前桶能达到的最大速率值""" diff --git a/apps/emqx/i18n/emqx_schema_i18n.conf b/apps/emqx/i18n/emqx_schema_i18n.conf index 1112fef09..ae82da5eb 100644 --- a/apps/emqx/i18n/emqx_schema_i18n.conf +++ b/apps/emqx/i18n/emqx_schema_i18n.conf @@ -404,7 +404,7 @@ emqx_schema { alarm_actions { desc { - en: "The actions triggered when the alarm is activated.
\n" + en: "The actions triggered when the alarm is activated.
\n" "Currently, the following actions are supported: log and " "publish.\n" "log is to write the alarm to log (console or file).\n" @@ -412,7 +412,7 @@ emqx_schema { "the system topics:\n" "$SYS/brokers/emqx@xx.xx.xx.x/alarms/activate and\n" "$SYS/brokers/emqx@xx.xx.xx.x/alarms/deactivate" - zh: "警报激活时触发的动作。
\n" + zh: "警报激活时触发的动作。
\n" "目前,支持以下操作:log 和 " "publish.\n" "log 将告警写入日志 (控制台或者文件).\n" @@ -428,7 +428,7 @@ emqx_schema { alarm_size_limit { desc { - en: "The maximum total number of deactivated alarms to keep as history.
\n" + en: "The maximum total number of deactivated alarms to keep as history.
\n" "When this limit is exceeded, the oldest deactivated alarms are " "deleted to cap the total number.\n" zh: "要保留为历史记录的已停用报警的最大总数。当超过此限制时,将删除最旧的停用报警,以限制总数。" @@ -1088,11 +1088,11 @@ Compression level. fields_deflate_opts_mem_level { desc { en: """ -Specifies the size of the compression state.
+Specifies the size of the compression state.
Lower values decrease memory usage per connection. """ zh: """ -指定压缩状态的大小
+指定压缩状态的大小
较低的值会减少每个连接的内存使用。 """ } @@ -1191,19 +1191,19 @@ Enable TLS. common_ssl_opts_schema_cacertfile { desc { en: """ -Trusted PEM format CA certificates bundle file.
+Trusted PEM format CA certificates bundle file.
The certificates in this file are used to verify the TLS peer's certificates. Append new certificates to the file if new CAs are to be trusted. There is no need to restart EMQX to have the updated file loaded, because -the system regularly checks if file has been updated (and reload).
+the system regularly checks if file has been updated (and reload).
NOTE: invalidating (deleting) a certificate from the file will not affect already established connections. """ zh: """ -受信任的PEM格式CA证书捆绑文件
+受信任的PEM格式CA证书捆绑文件
此文件中的证书用于验证TLS对等方的证书。 如果要信任新CA,请将新证书附加到文件中。 -无需重启EMQX即可加载更新的文件,因为系统会定期检查文件是否已更新(并重新加载)
+无需重启EMQX即可加载更新的文件,因为系统会定期检查文件是否已更新(并重新加载)
注意:从文件中失效(删除)证书不会影响已建立的连接。 """ } @@ -1216,7 +1216,7 @@ already established connections. common_ssl_opts_schema_certfile { desc { en: """ -PEM format certificates chain file.
+PEM format certificates chain file.
The certificates in this file should be in reversed order of the certificate issue chain. That is, the host's certificate should be placed in the beginning of the file, followed by the immediate issuer certificate and so on. @@ -1224,7 +1224,7 @@ Although the root CA certificate is optional, it should be placed at the end of the file if it is to be added. """ zh: """ -PEM格式证书链文件
+PEM格式证书链文件
此文件中的证书应与证书颁发链的顺序相反。也就是说,主机的证书应该放在文件的开头,然后是直接颁发者证书,依此类推。 虽然根CA证书是可选的,但它应该放在 如果要添加文件,请将其删除。 @@ -1316,14 +1316,14 @@ Only used if the private key file is password-protected. common_ssl_opts_schema_versions { desc { en: """ -All TLS/DTLS versions to be supported.
-NOTE: PSK ciphers are suppressed by 'tlsv1.3' version config.
+All TLS/DTLS versions to be supported.
+NOTE: PSK ciphers are suppressed by 'tlsv1.3' version config.
In case PSK cipher suites are intended, make sure to configured ['tlsv1.2', 'tlsv1.1'] here. """ zh: """ -支持所有TLS/DTLS版本
-注:PSK密码被“tlsv1”抑制。3'版本配置
+支持所有TLS/DTLS版本
+注:PSK密码被“tlsv1”抑制。3'版本配置
如果打算使用PSK密码套件,请确保这里已配置 ['tlsv1.2','tlsv1.1']。 """ @@ -1341,7 +1341,7 @@ This config holds TLS cipher suite names separated by comma, or as an array of strings. e.g. "TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256" or ["TLS_AES_256_GCM_SHA384","TLS_AES_128_GCM_SHA256"]. -
+
Ciphers (and their ordering) define the way in which the client and server encrypts information over the network connection. Selecting a good cipher suite is critical for the @@ -1349,47 +1349,47 @@ application's data security, confidentiality and performance. The names should be in OpenSSL string format (not RFC format). All default values and examples provided by EMQX config -documentation are all in OpenSSL format.
+documentation are all in OpenSSL format.
NOTE: Certain cipher suites are only compatible with specific TLS versions ('tlsv1.1', 'tlsv1.2' or 'tlsv1.3') incompatible cipher suites will be silently dropped. For instance, if only 'tlsv1.3' is given in the versions, configuring cipher suites for other versions will have no effect. -
+
-NOTE: PSK ciphers are suppressed by 'tlsv1.3' version config
-If PSK cipher suites are intended, 'tlsv1.3' should be disabled from versions.
+NOTE: PSK ciphers are suppressed by 'tlsv1.3' version config
+If PSK cipher suites are intended, 'tlsv1.3' should be disabled from versions.
PSK cipher suites: "RSA-PSK-AES256-GCM-SHA384,RSA-PSK-AES256-CBC-SHA384, RSA-PSK-AES128-GCM-SHA256,RSA-PSK-AES128-CBC-SHA256, RSA-PSK-AES256-CBC-SHA,RSA-PSK-AES128-CBC-SHA, -RSA-PSK-DES-CBC3-SHA,RSA-PSK-RC4-SHA"
+RSA-PSK-DES-CBC3-SHA,RSA-PSK-RC4-SHA"
""" zh: """ 此配置保存由逗号分隔的 TLS 密码套件名称,或作为字符串数组。例如 “TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256”[“TLS_AES_256_GCM_SHA384”、“TLS_AES_128_GCM_SHA256”]。 -
+
密码(及其顺序)定义了客户端和服务器通过网络连接加密信息的方式。 选择一个好的密码套件对于应用程序的数据安全性、机密性和性能至关重要。 名称应为 OpenSSL 字符串格式(而不是 RFC 格式)。 -EMQX 配置文档提供的所有默认值和示例都是 OpenSSL 格式
+EMQX 配置文档提供的所有默认值和示例都是 OpenSSL 格式
注意:某些密码套件仅与特定的 TLS 版本兼容('tlsv1.1'、'tlsv1.2'或'tlsv1.3')。 不兼容的密码套件将被自动删除。 例如,如果只有“tlsv1.3”。在版本中给出,为其他版本配置密码套件将无效。 -
-注:PSK密码被“tlsv1.3”抑制。版本配置
+
+注:PSK密码被“tlsv1.3”抑制。版本配置
如果打算使用PSK密码套件,“tlsv1.3”。应在版本中禁用。 -
+
PSK密码套件: "RSA-PSK-AES256-GCM-SHA384,RSA-PSK-AES256-CBC-SHA384, RSA-PSK-AES128-GCM-SHA256,RSA-PSK-AES128-CBC-SHA256, RSA-PSK-AES256-CBC-SHA,RSA-PSK-AES128-CBC-SHA, -RSA-PSK-DES-CBC3-SHA,RSA-PSK-RC4-SHA"
+RSA-PSK-DES-CBC3-SHA,RSA-PSK-RC4-SHA"
""" } label: { @@ -1438,11 +1438,11 @@ server_ssl_opts_schema_dhfile { Path to a file containing PEM-encoded Diffie-Hellman parameters to be used by the server if a cipher suite using Diffie-Hellman key exchange is negotiated. If not specified, default parameters -are used.
+are used.
NOTE: The dhfile option is not supported by TLS 1.3. """ zh: """ -如果协商使用Diffie-Hellman密钥交换的密码套件,则服务器将使用包含PEM编码的Diffie-Hellman参数的文件的路径。如果未指定,则使用默认参数
+如果协商使用Diffie-Hellman密钥交换的密码套件,则服务器将使用包含PEM编码的Diffie-Hellman参数的文件的路径。如果未指定,则使用默认参数
注意:TLS 1.3不支持dhfile选项。 """ @@ -1707,8 +1707,8 @@ When publishing or subscribing, prefix all topics with a mountpoint string. `some_tenant/t`. Similarly, if another client B (connected to the same listener as the client A) sends a message to topic `t`, the message is routed to all the clients subscribed `some_tenant/t`, so client A will receive the - message, with topic name `t`.
- Set to `""` to disable the feature.
+ message, with topic name `t`.
+ Set to `""` to disable the feature.
Variables in mountpoint string: - ${clientid}: clientid @@ -1719,9 +1719,10 @@ When publishing or subscribing, prefix all topics with a mountpoint string. 将消息传递给订阅者时,将从主题名称中删除带前缀的字符串。挂载点是一种用户可以用来实现不同侦听器之间消息路由隔离的方法。 -例如,如果客户机a使用`侦听器订阅` t'。tcp<名称>。mountpoint`设置为'some_tenant',那么客户端实际上订阅了主题'some_tenant/t'。类似地,如果另一个客户端B(与客户端A连接到同一个侦听器)向主题“t”发送消息,该消息将路由到所有订阅了“some_租户/t”的客户端,因此客户端A将接收主题名为“t”的消息
+例如,如果客户机a使用`侦听器订阅` t'。tcp<名称>。mountpoint`设置为'some_tenant',那么客户端实际上订阅了主题'some_tenant/t'。
+类似地,如果另一个客户端B(与客户端A连接到同一个侦听器)向主题“t”发送消息,该消息将路由到所有订阅了“some_租户/t”的客户端,因此客户端A将接收主题名为“t”的消息
-设置为“”“”以禁用该功能
+设置为“”“”以禁用该功能
mountpoint 字符串中的变量: - ${clientid}: clientid @@ -1767,7 +1768,7 @@ Type of the rate limit. mqtt_listener_access_rules { desc { en: """ -The access control rules for this listener.
See: https://github.com/emqtt/esockd#allowdeny +The access control rules for this listener.
See: https://github.com/emqtt/esockd#allowdeny """ zh: """此监听器的访问控制规则。""" } @@ -1780,11 +1781,11 @@ The access control rules for this listener.
See: https://github.com/emqtt/es mqtt_listener_proxy_protocol { desc { en: """ -Enable the Proxy Protocol V1/2 if the EMQX cluster is deployed behind HAProxy or Nginx.
+Enable the Proxy Protocol V1/2 if the EMQX cluster is deployed behind HAProxy or Nginx.
See: https://www.haproxy.com/blog/haproxy/proxy-protocol/ """ zh: """ -如果EMQX集群部署在 HAProxy 或 Nginx 之后,请启用代理协议 V1/2
+如果EMQX集群部署在 HAProxy 或 Nginx 之后,请启用代理协议 V1/2
详情见: https://www.haproxy.com/blog/haproxy/proxy-protocol/ """ } @@ -1814,13 +1815,13 @@ authentication_0 { en: """ Per-listener authentication override. Authentication can be one single authenticator instance or a chain of authenticators as an array. -When authenticating a login (username, client ID, etc.) the authenticators are checked in the configured order.
+When authenticating a login (username, client ID, etc.) the authenticators are checked in the configured order.
""" zh: """ 每侦听器身份验证覆盖。 身份验证可以是单个身份验证程序实例,也可以是一个数组形式的身份验证程序链。 -验证登录名(用户名、客户端ID等)时,将按配置的顺序检查验证器
+验证登录名(用户名、客户端ID等)时,将按配置的顺序检查验证器
""" } label: { @@ -1879,25 +1880,26 @@ The rate is counted by bytes of packets per second. client_ssl_opts_schema_server_name_indication { desc { en: """ -Specify the host name to be used in TLS Server Name Indication extension.
+Specify the host name to be used in TLS Server Name Indication extension.
For instance, when connecting to "server.example.net", the genuine server which accepts the connection and performs TLS handshake may differ from the host the TLS client initially connects to, e.g. when connecting to an IP address -or when the host has multiple resolvable DNS records
+or when the host has multiple resolvable DNS records
If not specified, it will default to the host name string which is used -to establish the connection, unless it is IP addressed used.
+to establish the connection, unless it is IP addressed used.
The host name is then also used in the host name verification of the peer -certificate.
The special value 'disable' prevents the Server Name +certificate.
The special value 'disable' prevents the Server Name Indication extension from being sent and disables the hostname verification check. """ zh: """ -指定要在 TLS 服务器名称指示扩展中使用的主机名
-例如,当连接到“server.example.net”时,接受连接并执行TLS握手的真正服务器可能与TLS客户端最初连接到的主机不同,例如,当连接到IP地址时,或者当主机具有多个可解析的DNS记录时
+指定要在 TLS 服务器名称指示扩展中使用的主机名
+例如,当连接到“server.example.net”时,接受连接并执行TLS握手的真正服务器可能与TLS客户端最初连接到的主机不同, +例如,当连接到IP地址时,或者当主机具有多个可解析的DNS记录时
如果未指定,它将默认为使用的主机名字符串 -建立连接,除非使用IP地址
+建立连接,除非使用IP地址
然后,主机名也用于对等机的主机名验证 -证书
特殊值“disable”阻止发送服务器名称指示扩展,并禁用主机名验证检查。 +证书
特殊值“disable”阻止发送服务器名称指示扩展,并禁用主机名验证检查。 """ } label: { @@ -1909,11 +1911,11 @@ verification check. fields_tcp_opts_active_n { desc { en: """ -Specify the {active, N} option for this Socket.
+Specify the {active, N} option for this Socket.
See: https://erlang.org/doc/man/inet.html#setopts-2 """ zh: """ -为此套接字指定{active,N}选项
+为此套接字指定{active,N}选项
See: https://erlang.org/doc/man/inet.html#setopts-2 """ } @@ -2063,18 +2065,18 @@ The SO_REUSEADDR flag for the connections. fields_trace_payload_encode { desc { en: """ -Determine the format of the payload format in the trace file.
+Determine the format of the payload format in the trace file.
`text`: Text-based protocol or plain text protocol. - It is recommended when payload is JSON encoded.
-`hex`: Binary hexadecimal encode. It is recommended when payload is a custom binary protocol.
+ It is recommended when payload is JSON encoded.
+`hex`: Binary hexadecimal encode. It is recommended when payload is a custom binary protocol.
`hidden`: payload is obfuscated as `******` """ zh: """ -确定跟踪文件中有效负载格式的格式
+确定跟踪文件中有效负载格式的格式
`text`:基于文本的协议或纯文本协议。 -建议在有效负载为JSON编码时使用
-`hex`:二进制十六进制编码。当有效负载是自定义二进制协议时,建议使用此选项
+建议在有效负载为JSON编码时使用
+`hex`:二进制十六进制编码。当有效负载是自定义二进制协议时,建议使用此选项
`hidden`:有效负载被模糊化为 `******` """ } @@ -2119,11 +2121,11 @@ WebSocket消息是否允许包含多个 MQTT 数据包。 fields_ws_opts_compress { desc { en: """ -If true, compress WebSocket messages using zlib.
+If true, compress WebSocket messages using zlib.
The configuration items under deflate_opts belong to the compression-related parameter configuration. """ zh: """ -如果 true,则使用zlib 压缩 WebSocket 消息
+如果 true,则使用zlib 压缩 WebSocket 消息
deflate_opts 下的配置项属于压缩相关参数配置。 """ } @@ -2169,11 +2171,11 @@ fields_ws_opts_fail_if_no_subprotocol { en: """ If true, the server will return an error when the client does not carry the Sec-WebSocket-Protocol field. -
Note: WeChat applet needs to disable this verification. +
Note: WeChat applet needs to disable this verification. """ zh: """ 如果true,当客户端未携带Sec WebSocket Protocol字段时,服务器将返回一个错误。 -
注意:微信小程序需要禁用此验证。 +
注意:微信小程序需要禁用此验证。 """ } label: { @@ -2234,7 +2236,7 @@ If false and check_origin_enable is true, fields_ws_opts_check_origins { desc { en: """ -List of allowed origins.
See check_origin_enable. +List of allowed origins.
See check_origin_enable. """ zh: """ 允许的 origins 列表 diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 7e72f52df..f317117c9 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -128,23 +128,23 @@ roots(high) -> {?EMQX_AUTHENTICATION_CONFIG_ROOT_NAME, authentication( "Default authentication configs for all MQTT listeners.\n" - "
\n" + "
\n" "For per-listener overrides see authentication\n" "in listener configs\n" - "
\n" - "
\n" + "
\n" + "
\n" "EMQX can be configured with:\n" - "
\n" + "
\n" "\n" - "
\n" + "
\n" "When a chain is configured, the login credentials are checked against the backends\n" "per the configured order, until an 'allow' or 'deny' decision can be made.\n" - "
\n" + "
\n" "If there is no decision after a full chain exhaustion, the login is rejected.\n" )}, %% NOTE: authorization schema here is only to keep emqx app prue @@ -1587,7 +1587,7 @@ desc("stats") -> desc("authorization") -> "Settings for client authorization."; desc("mqtt") -> - "Global MQTT configuration.
\n" + "Global MQTT configuration.
\n" "The configs here work as default values which can be overridden\n" "in zone configs"; desc("cache") -> @@ -1959,7 +1959,7 @@ ciphers_schema(Default) -> "or as an array of strings. e.g.\n" "\"TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256\" or\n" "[\"TLS_AES_256_GCM_SHA384\",\"TLS_AES_128_GCM_SHA256\"].\n" - "
\n" + "
\n" "Ciphers (and their ordering) define the way in which the\n" "client and server encrypts information over the network connection.\n" "Selecting a good cipher suite is critical for the\n" @@ -1967,23 +1967,23 @@ ciphers_schema(Default) -> "\n" "The names should be in OpenSSL string format (not RFC format).\n" "All default values and examples provided by EMQX config\n" - "documentation are all in OpenSSL format.
\n" + "documentation are all in OpenSSL format.
\n" "\n" "NOTE: Certain cipher suites are only compatible with\n" "specific TLS versions ('tlsv1.1', 'tlsv1.2' or 'tlsv1.3')\n" "incompatible cipher suites will be silently dropped.\n" "For instance, if only 'tlsv1.3' is given in the versions,\n" "configuring cipher suites for other versions will have no effect.\n" - "
\n" + "
\n" "\n" - "NOTE: PSK ciphers are suppressed by 'tlsv1.3' version config
\n" - "If PSK cipher suites are intended, 'tlsv1.3' should be disabled from versions.
\n" + "NOTE: PSK ciphers are suppressed by 'tlsv1.3' version config
\n" + "If PSK cipher suites are intended, 'tlsv1.3' should be disabled from versions.
\n" "PSK cipher suites: \"RSA-PSK-AES256-GCM-SHA384,RSA-PSK-AES256-CBC-SHA384,\n" "RSA-PSK-AES128-GCM-SHA256,RSA-PSK-AES128-CBC-SHA256,\n" "RSA-PSK-AES256-CBC-SHA,RSA-PSK-AES128-CBC-SHA,\n" - "RSA-PSK-DES-CBC3-SHA,RSA-PSK-RC4-SHA\"
\n" ++ + "RSA-PSK-DES-CBC3-SHA,RSA-PSK-RC4-SHA\"
\n" ++ case Default of - quic -> "NOTE: QUIC listener supports only 'tlsv1.3' ciphers
"; + quic -> "NOTE: QUIC listener supports only 'tlsv1.3' ciphers
"; _ -> "" end } @@ -2036,11 +2036,11 @@ ref(Module, Field) -> hoconsc:ref(Module, Field). mk_duration(Desc, OverrideMeta) -> DefaultMeta = #{ desc => Desc ++ - " Time interval is a string that contains a number followed by time unit:
\n" + " Time interval is a string that contains a number followed by time unit:
\n" "- `ms` for milliseconds,\n" "- `s` for seconds,\n" "- `m` for minutes,\n" - "- `h` for hours;\n
" + "- `h` for hours;\n
" "or combination of whereof: `1h5m0s`" }, hoconsc:mk(typerefl:alias("string", duration()), maps:merge(DefaultMeta, OverrideMeta)). @@ -2225,7 +2225,7 @@ authentication(Desc) -> "\nAuthentication can be one single authenticator instance or a chain of " "authenticators as an array.\n" "When authenticating a login (username, client ID, etc.) " - "the authenticators are checked in the configured order.
\n" + "the authenticators are checked in the configured order.
\n" ]) }. diff --git a/apps/emqx/test/emqx_authentication_SUITE.erl b/apps/emqx/test/emqx_authentication_SUITE.erl index 616665def..63aafb124 100644 --- a/apps/emqx/test/emqx_authentication_SUITE.erl +++ b/apps/emqx/test/emqx_authentication_SUITE.erl @@ -52,14 +52,14 @@ roots() -> fields(type1) -> [ - {mechanism, {enum, ['password_based']}}, - {backend, {enum, ['built_in_database']}}, + {mechanism, {enum, [password_based]}}, + {backend, {enum, [built_in_database]}}, {enable, fun enable/1} ]; fields(type2) -> [ - {mechanism, {enum, ['password_based']}}, - {backend, {enum, ['mysql']}}, + {mechanism, {enum, [password_based]}}, + {backend, {enum, [mysql]}}, {enable, fun enable/1} ]. @@ -131,15 +131,15 @@ t_chain(Config) when is_list(Config) -> t_authenticator({'init', Config}) -> [ - {"auth1", {'password_based', 'built_in_database'}}, - {"auth2", {'password_based', mysql}} + {"auth1", {password_based, built_in_database}}, + {"auth2", {password_based, mysql}} | Config ]; t_authenticator(Config) when is_list(Config) -> ChainName = 'test', AuthenticatorConfig1 = #{ - mechanism => 'password_based', - backend => 'built_in_database', + mechanism => password_based, + backend => built_in_database, enable => true }, @@ -231,7 +231,7 @@ t_authenticator({'end', Config}) -> t_authenticate({init, Config}) -> [ {listener_id, 'tcp:default'}, - {authn_type, {'password_based', 'built_in_database'}} + {authn_type, {password_based, built_in_database}} | Config ]; t_authenticate(Config) when is_list(Config) -> @@ -249,8 +249,8 @@ t_authenticate(Config) when is_list(Config) -> register_provider(AuthNType, ?MODULE), AuthenticatorConfig = #{ - mechanism => 'password_based', - backend => 'built_in_database', + mechanism => password_based, + backend => built_in_database, enable => true }, ?AUTHN:create_chain(ListenerID), @@ -272,8 +272,8 @@ t_authenticate({'end', Config}) -> t_update_config({init, Config}) -> Global = 'mqtt:global', - AuthNType1 = {'password_based', 'built_in_database'}, - AuthNType2 = {'password_based', mysql}, + AuthNType1 = {password_based, built_in_database}, + AuthNType2 = {password_based, mysql}, [ {global, Global}, {"auth1", AuthNType1}, diff --git a/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl b/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl index af90f96e5..dd9fed522 100644 --- a/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl +++ b/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl @@ -100,8 +100,8 @@ roots() -> [?CONF_NS]. fields(?CONF_NS) -> [ - {mechanism, emqx_authn_schema:mechanism('scram')}, - {backend, emqx_authn_schema:backend('built_in_database')}, + {mechanism, emqx_authn_schema:mechanism(scram)}, + {backend, emqx_authn_schema:backend(built_in_database)}, {algorithm, fun algorithm/1}, {iteration_count, fun iteration_count/1} ] ++ emqx_authn_schema:common_fields(). diff --git a/apps/emqx_authz/i18n/emqx_authz_schema_i18n.conf b/apps/emqx_authz/i18n/emqx_authz_schema_i18n.conf index 7860dd7f0..d0aa7a8ca 100644 --- a/apps/emqx_authz/i18n/emqx_authz_schema_i18n.conf +++ b/apps/emqx_authz/i18n/emqx_authz_schema_i18n.conf @@ -2,37 +2,37 @@ emqx_authz_schema { sources { desc { en: """ -Authorization data sources.
+Authorization data sources.
An array of authorization (ACL) data providers. It is designed as an array, not a hash-map, so the sources can be -ordered to form a chain of access controls.
+ordered to form a chain of access controls.
When authorizing a 'publish' or 'subscribe' action, the configured sources are checked in order. When checking an ACL source, in case the client (identified by username or client ID) is not found, it moves on to the next source. And it stops immediately -once an 'allow' or 'deny' decision is returned.
+once an 'allow' or 'deny' decision is returned.
If the client is not found in any of the sources, -the default action configured in 'authorization.no_match' is applied.
+the default action configured in 'authorization.no_match' is applied.
NOTE: The source elements are identified by their 'type'. It is NOT allowed to configure two or more sources of the same type. """ zh: """ -鉴权数据源.
+鉴权数据源.
鉴权(ACL)数据源的列表. 它被设计为一个数组,而不是一个散列映射, -所以可以作为链式访问控制.
+所以可以作为链式访问控制.
当授权一个 'publish' 或 'subscribe' 行为时, 该配置列表中的所有数据源将按顺序进行检查。 如果在某个客户端未找到时(使用 ClientID 或 Username), -将会移动到下一个数据源. 直至得到 'allow' 或 'deny' 的结果.
+将会移动到下一个数据源. 直至得到 'allow' 或 'deny' 的结果.
如果在任何数据源中都未找到对应的客户端信息, -配置的默认行为 ('authorization.no_match') 将生效.
+配置的默认行为 ('authorization.no_match') 将生效.
注意: 数据源使用 'type' 进行标识. @@ -94,7 +94,7 @@ It is NOT allowed to configure two or more sources of the same type. path { desc { en: """ -Path to the file which contains the ACL rules.
+Path to the file which contains the ACL rules.
If the file provisioned before starting EMQX node, it can be placed anywhere as long as EMQX has read access to it. diff --git a/apps/emqx_authz/src/emqx_authz.erl b/apps/emqx_authz/src/emqx_authz.erl index 9c0923b5f..53083f9b3 100644 --- a/apps/emqx_authz/src/emqx_authz.erl +++ b/apps/emqx_authz/src/emqx_authz.erl @@ -363,7 +363,7 @@ find_action_in_hooks() -> [Action] = [Action || {callback, {?MODULE, authorize, _} = Action, _, _} <- Callbacks], Action. -authz_module('built_in_database') -> +authz_module(built_in_database) -> emqx_authz_mnesia; authz_module(Type) -> list_to_existing_atom("emqx_authz_" ++ atom_to_list(Type)). @@ -382,8 +382,8 @@ type(redis) -> redis; type(<<"redis">>) -> redis; type(postgresql) -> postgresql; type(<<"postgresql">>) -> postgresql; -type('built_in_database') -> 'built_in_database'; -type(<<"built_in_database">>) -> 'built_in_database'; +type(built_in_database) -> built_in_database; +type(<<"built_in_database">>) -> built_in_database; %% should never happen if the input is type-checked by hocon schema type(Unknown) -> throw({unknown_authz_source_type, Unknown}). diff --git a/apps/emqx_bridge/i18n/emqx_bridge_http_schema.conf b/apps/emqx_bridge/i18n/emqx_bridge_http_schema.conf index 986d3f6fe..7e70eda5c 100644 --- a/apps/emqx_bridge/i18n/emqx_bridge_http_schema.conf +++ b/apps/emqx_bridge/i18n/emqx_bridge_http_schema.conf @@ -25,16 +25,16 @@ emqx_bridge_http_schema { config_url { desc { en: """ -The URL of the HTTP Bridge.
+The URL of the HTTP Bridge.
Template with variables is allowed in the path, but variables cannot be used in the scheme, host, -or port part.
+or port part.
For example, http://localhost:9901/${topic} is allowed, but http://${host}:9901/message or http://localhost:${port}/message is not allowed. """ zh: """ -HTTP Bridge 的 URL。
-路径中允许使用带变量的模板,但是 host, port 不允许使用变量模板。
+HTTP Bridge 的 URL。
+路径中允许使用带变量的模板,但是 host, port 不允许使用变量模板。
例如, http://localhost:9901/${topic} 是允许的, 但是 http://${host}:9901/message http://localhost:${port}/message @@ -51,13 +51,13 @@ HTTP Bridge 的 URL。
desc { en: """ The MQTT topic filter to be forwarded to the HTTP server. All MQTT 'PUBLISH' messages with the topic -matching the local_topic will be forwarded.
+matching the local_topic will be forwarded.
NOTE: if this bridge is used as the output of a rule (EMQX rule engine), and also local_topic is configured, then both the data got from the rule and the MQTT messages that match local_topic will be forwarded. """ zh: """ -发送到 'local_topic' 的消息都会转发到 HTTP 服务器。
+发送到 'local_topic' 的消息都会转发到 HTTP 服务器。
注意:如果这个 Bridge 被用作规则(EMQX 规则引擎)的输出,同时也配置了 'local_topic' ,那么这两部分的消息都会被转发到 HTTP 服务器。 """ } @@ -70,12 +70,12 @@ will be forwarded. config_method { desc { en: """ -The method of the HTTP request. All the available methods are: post, put, get, delete.
-Template with variables is allowed.
+The method of the HTTP request. All the available methods are: post, put, get, delete.
+Template with variables is allowed.
""" zh: """ -HTTP 请求的方法。 所有可用的方法包括:post、put、get、delete。
-允许使用带有变量的模板。
""" +HTTP 请求的方法。 所有可用的方法包括:post、put、get、delete。
+允许使用带有变量的模板。
""" } label: { en: "HTTP Method" @@ -86,11 +86,11 @@ HTTP 请求的方法。 所有可用的方法包括:post、put、get、delete config_headers { desc { en: """ -The headers of the HTTP request.
+The headers of the HTTP request.
Template with variables is allowed. """ zh: """ -HTTP 请求的标头。
+HTTP 请求的标头。
允许使用带有变量的模板。 """ } @@ -103,11 +103,11 @@ HTTP 请求的标头。
config_body { desc { en: """ -The body of the HTTP request.
+The body of the HTTP request.
Template with variables is allowed. """ zh: """ -HTTP 请求的正文。
+HTTP 请求的正文。
允许使用带有变量的模板。""" } label: { diff --git a/apps/emqx_bridge/i18n/emqx_bridge_schema.conf b/apps/emqx_bridge/i18n/emqx_bridge_schema.conf index 74a550338..1c2e55ca0 100644 --- a/apps/emqx_bridge/i18n/emqx_bridge_schema.conf +++ b/apps/emqx_bridge/i18n/emqx_bridge_schema.conf @@ -15,12 +15,12 @@ emqx_bridge_schema { desc { en: """ The connector ID to be used for this bridge. Connector IDs must be of format: -{type}:{name}.
+{type}:{name}.
In config files, you can find the corresponding config entry for a connector by such path: -'connectors.{type}.{name}'.
+'connectors.{type}.{name}'.
""" - zh: """Bridge 使用的 Connector 的 ID。Connector ID 的格式必须为:{type}:{name}.
-在配置文件中,您可以通过以下路径找到 Connector 的相应配置条目:'connector.{type}.{name}'。
""" + zh: """Bridge 使用的 Connector 的 ID。Connector ID 的格式必须为:{type}:{name}.
+在配置文件中,您可以通过以下路径找到 Connector 的相应配置条目:'connector.{type}.{name}'。
""" } label: { en: "Connector ID" diff --git a/apps/emqx_bridge/src/emqx_bridge_schema.erl b/apps/emqx_bridge/src/emqx_bridge_schema.erl index 763f45109..fd5d68aa1 100644 --- a/apps/emqx_bridge/src/emqx_bridge_schema.erl +++ b/apps/emqx_bridge/src/emqx_bridge_schema.erl @@ -68,7 +68,7 @@ direction_field(Dir, Desc) -> {direction, mk(Dir, #{ required => true , default => egress - , desc => "The direction of the bridge. Can be one of 'ingress' or 'egress'.
" + , desc => "The direction of the bridge. Can be one of 'ingress' or 'egress'.
" ++ Desc })}. diff --git a/apps/emqx_conf/etc/emqx_conf.md b/apps/emqx_conf/etc/emqx_conf.md index 90ad6f0c0..e79e79862 100644 --- a/apps/emqx_conf/etc/emqx_conf.md +++ b/apps/emqx_conf/etc/emqx_conf.md @@ -7,7 +7,7 @@ and a superset of JSON. EMQX configuration consists of 3 layers. From bottom up: -1. Immutable base: `emqx.conf` + `EMQX_` prefixed environment variables.
+1. Immutable base: `emqx.conf` + `EMQX_` prefixed environment variables.
Changes in this layer require a full node restart to take effect. 1. Cluster overrides: `$EMQX_NODE__DATA_DIR/configs/cluster-override.conf` 1. Local node overrides: `$EMQX_NODE__DATA_DIR/configs/local-override.conf` diff --git a/apps/emqx_conf/i18n/emqx_conf_schema.conf b/apps/emqx_conf/i18n/emqx_conf_schema.conf index 282191ece..92f275fde 100644 --- a/apps/emqx_conf/i18n/emqx_conf_schema.conf +++ b/apps/emqx_conf/i18n/emqx_conf_schema.conf @@ -15,12 +15,12 @@ emqx_conf_schema { desc { en: """Service discovery method for the cluster nodes.""" zh: """集群节点发现方式。可选值为: -- manual: 手动加入集群<\br> -- static: 配置静态节点。配置几个固定的节点,新节点通过连接固定节点中的某一个来加入集群。<\br> -- mcast: 使用 UDP 多播的方式发现节点。<\br> -- dns: 使用 DNS A 记录的方式发现节点。<\br> -- etcd: 使用 etcd 发现节点。<\br> -- k8s: 使用 Kubernetes 发现节点。<\br> +- manual: 手动加入集群
+- static: 配置静态节点。配置几个固定的节点,新节点通过连接固定节点中的某一个来加入集群。
+- mcast: 使用 UDP 多播的方式发现节点。
+- dns: 使用 DNS A 记录的方式发现节点。
+- etcd: 使用 etcd 发现节点。
+- k8s: 使用 Kubernetes 发现节点。
""" } label { @@ -55,9 +55,9 @@ emqx_conf_schema { desc { en: """The Erlang distribution protocol for the cluster.""" zh: """分布式 Erlang 集群协议类型。可选值为: -- inet_tcp: 使用 IPv4 <\br> -- inet6_tcp 使用 IPv6 <\br> -- inet_tls: 使用 TLS,需要与 node.ssl_dist_optfile 配置一起使用。<\br> +- inet_tcp: 使用 IPv4
+- inet6_tcp 使用 IPv6
+- inet_tls: 使用 TLS,需要与 node.ssl_dist_optfile 配置一起使用。
""" } label { @@ -96,7 +96,7 @@ emqx_conf_schema { cluster_mcast_ports { desc { - en: """List of UDP ports used for service discovery.
+ en: """List of UDP ports used for service discovery.
Note: probe messages are broadcast to all the specified ports. """ zh: """指定多播端口。如有多个端口使用逗号 , 分隔。 @@ -231,7 +231,7 @@ Note: probe messages are broadcast to all the specified ports. desc { en: """Key prefix used for EMQX service discovery.""" zh: """指定 etcd 路径的前缀。每个节点在 etcd 中都会创建一个路径: -v2/keys/// <\br> +v2/keys///
当 cluster.discovery_strategy 为 etcd 时,此配置项才有效。 """ } @@ -300,10 +300,10 @@ It is refreshed automatically, as long as the node is alive. en: """Address type used for connecting to the discovered nodes.""" zh: """当使用 k8s 方式集群时,address_type 用来从 Kubernetes 接口的应答里获取什么形式的 Host 列表。 指定 cluster.k8s.address_type 为 ip,则将从 Kubernetes 接口中获取 emqx 服务的 IP 地址列表: -- 172.16.122.31 <\br> -- 172.16.122.32 <\br> -- 172.16.122.33 <\br> -然后与 cluster.k8s.app_name 配置指定的 app name 拼接,得到 emqx 节点列表: <\br> +- 172.16.122.31
+- 172.16.122.32
+- 172.16.122.33
+然后与 cluster.k8s.app_name 配置指定的 app name 拼接,得到 emqx 节点列表:
- emqx@172.16.122.31 - emqx@172.16.122.32 - emqx@172.16.122.33 @@ -318,10 +318,10 @@ It is refreshed automatically, as long as the node is alive. cluster_k8s_app_name { desc { en: """This parameter should be set to the part of the node.name -before the '@'.
+before the '@'.
For example, if the node.name is emqx@127.0.0.1, then this parameter should be set to emqx.""" - zh: """app_name 用来跟获取的 Host 列表拼接,得到节点列表。<\br> + zh: """app_name 用来跟获取的 Host 列表拼接,得到节点列表。
当 cluster.discovery_strategy 为 k8s 时,此配置项才有效。 """ } @@ -346,7 +346,7 @@ should be set to emqx.""" cluster_k8s_suffix { desc { - en: """Node name suffix.
+ en: """Node name suffix.
Note: this parameter is only relevant when address_type is dns or hostname.""" zh: """当使用 k8s 方式并且 cluster.k8s.address_type 指定为 dns 类型时,可设置 emqx 节点名的后缀。 @@ -390,26 +390,26 @@ belong to different clusters from accidentally connecting to each other.""" node_data_dir { desc { en: """ -Path to the persistent data directory.<\br> -Possible auto-created subdirectories are:<\br> -- `mnesia/`: EMQX's built-in database directory.<\br> -For example, `mnesia/emqx@127.0.0.1`.<\br> -There should be only one such subdirectory.<\br> -Meaning, in case the node is to be renamed (to e.g. `emqx@10.0.1.1`),<\br> -the old dir should be deleted first.<\br> -- `configs`: Generated configs at boot time, and cluster/local override configs.<\br> -- `patches`: Hot-patch beam files are to be placed here.<\br> -- `trace`: Trace log files.<\br> +Path to the persistent data directory.
+Possible auto-created subdirectories are:
+- `mnesia/`: EMQX's built-in database directory.
+For example, `mnesia/emqx@127.0.0.1`.
+There should be only one such subdirectory.
+Meaning, in case the node is to be renamed (to e.g. `emqx@10.0.1.1`),
+the old dir should be deleted first.
+- `configs`: Generated configs at boot time, and cluster/local override configs.
+- `patches`: Hot-patch beam files are to be placed here.
+- `trace`: Trace log files.
**NOTE**: One data dir cannot be shared by two or more EMQX nodes. """ zh: """ -节点数据存放目录,可能会自动创建的子目录如下:<\br> -- `mnesia/`。EMQX的内置数据库目录。例如,`mnesia/emqx@127.0.0.1`。<\br> -如果节点要被重新命名(例如,`emqx@10.0.1.1`)。旧目录应该首先被删除。<\br> -- `configs`。在启动时生成的配置,以及集群/本地覆盖的配置。<\br> -- `patches`: 热补丁文件将被放在这里。<\br> -- `trace`: 日志跟踪文件。<\br> +节点数据存放目录,可能会自动创建的子目录如下:
+- `mnesia/`。EMQX的内置数据库目录。例如,`mnesia/emqx@127.0.0.1`。
+如果节点要被重新命名(例如,`emqx@10.0.1.1`)。旧目录应该首先被删除。
+- `configs`。在启动时生成的配置,以及集群/本地覆盖的配置。
+- `patches`: 热补丁文件将被放在这里。
+- `trace`: 日志跟踪文件。
**注意**: 一个数据dir不能被两个或更多的EMQX节点同时使用。 """ @@ -530,9 +530,9 @@ significant: later configuration files override the previous ones. db_backend { desc { en: """ -Select the backend for the embedded database.
+Select the backend for the embedded database.
rlog is the default backend, -that is suitable for very large clusters.
+that is suitable for very large clusters.
mnesia is a backend that offers decent performance in small clusters. """ zh: """ rlog是默认的数据库,他适用于大规模的集群。 @@ -548,20 +548,20 @@ mnesia是备选数据库,在小集群中提供了很好的性能。 db_role { desc { en: """ -Select a node role.
+Select a node role.
core nodes provide durability of the data, and take care of writes. -It is recommended to place core nodes in different racks or different availability zones.
+It is recommended to place core nodes in different racks or different availability zones.
replicant nodes are ephemeral worker nodes. Removing them from the cluster -doesn't affect database redundancy
-It is recommended to have more replicant nodes than core nodes.
+doesn't affect database redundancy
+It is recommended to have more replicant nodes than core nodes.
Note: this parameter only takes effect when the backend is set to rlog. """ zh: """ -选择节点的角色。
-core 节点提供数据的持久性,并负责写入。建议将核心节点放置在不同的机架或不同的可用区。
-repliant 节点是临时工作节点。 从集群中删除它们,不影响数据库冗余
-建议复制节点多于核心节点。
+选择节点的角色。
+core 节点提供数据的持久性,并负责写入。建议将核心节点放置在不同的机架或不同的可用区。
+repliant 节点是临时工作节点。 从集群中删除它们,不影响数据库冗余
+建议复制节点多于核心节点。
注意:该参数仅在设置backend时生效到 rlog。 """ } @@ -574,17 +574,17 @@ to rlog. db_core_nodes { desc { en: """ -List of core nodes that the replicant will connect to.
+List of core nodes that the replicant will connect to.
Note: this parameter only takes effect when the backend is set -to rlog and the role is set to replicant.
-This value needs to be defined for manual or static cluster discovery mechanisms.
+to rlog and the role is set to replicant.
+This value needs to be defined for manual or static cluster discovery mechanisms.
If an automatic cluster discovery mechanism is being used (such as etcd), there is no need to set this value. """ - zh: """当前节点连接的核心节点列表。
+ zh: """当前节点连接的核心节点列表。
注意:该参数仅在设置backend时生效到 rlog -并且设置rolereplicant时生效。
-该值需要在手动或静态集群发现机制下设置。
+并且设置rolereplicant时生效。
+该值需要在手动或静态集群发现机制下设置。
如果使用了自动集群发现机制(如etcd),则不需要设置该值。 """ } @@ -621,15 +621,15 @@ transaction log entry. db_default_shard_transport { desc { - en: """Defines the default transport for pushing transaction logs.
+ en: """Defines the default transport for pushing transaction logs.
This may be overridden on a per-shard basis in db.shard_transports. gen_rpc uses the gen_rpc library, -distr uses the Erlang distribution.
""" +distr uses the Erlang distribution.
""" zh: """ -定义用于推送事务日志的默认传输。
+定义用于推送事务日志的默认传输。
这可以在 db.shard_transports 中基于每个分片被覆盖。 gen_rpc 使用 gen_rpc 库, -distr 使用 Erlang 发行版。
+distr 使用 Erlang 发行版。
""" } label { @@ -640,14 +640,14 @@ This may be overridden on a per-shard basis in db.shard_transports. db_shard_transports { desc { - en: """Allows to tune the transport method used for transaction log replication, on a per-shard basis.
+ en: """Allows to tune the transport method used for transaction log replication, on a per-shard basis.
gen_rpc uses the gen_rpc library, -distr uses the Erlang distribution.
If not specified, +distr uses the Erlang distribution.
If not specified, the default is to use the value set in db.default_shard_transport.""" zh: """ -把事务日志复制到每个分片时的传输方法。
+把事务日志复制到每个分片时的传输方法。
gen_rpc 使用 gen_rpc 库, -distr 使用 Erlang 发行版。
如果未指定, +distr 使用 Erlang 发行版。
如果未指定, 默认是使用 db.default_shard_transport 中设置的值。 """ } @@ -728,12 +728,12 @@ Ensure that the number of completed transactions is less than the max_hist rpc_port_discovery { desc { - en: """manual: discover ports by tcp_server_port.
+ en: """manual: discover ports by tcp_server_port.
stateless: discover ports in a stateless manner, using the following algorithm. If node name is emqxN@127.0.0.1, where the N is an integer, then the listening port will be 5370 + N.""" zh: """manual: 通过 tcp_server_port 来发现端口。 -
stateless: 使用无状态的方式来发现端口,使用如下算法。如果节点名称是 +
stateless: 使用无状态的方式来发现端口,使用如下算法。如果节点名称是 emqxN@127.0.0.1, N 是一个数字,那么监听端口就是 5370 + N。 """ } @@ -745,9 +745,9 @@ emqxN@127.0.0.1
, N 是一个数字,那么监听端口就是 5370 + N。 rpc_tcp_server_port { desc { - en: """Listening port used by RPC local service.
+ en: """Listening port used by RPC local service.
Note that this config only takes effect when rpc.port_discovery is set to manual.""" - zh: """RPC 本地服务使用的 TCP 端口。
+ zh: """RPC 本地服务使用的 TCP 端口。
只有当 rpc.port_discovery 设置为 manual 时,此配置才会生效。 """ } @@ -759,10 +759,10 @@ Note that this config only takes effect when rpc.port_discovery is set to manual rpc_ssl_server_port { desc { - en: """Listening port used by RPC local service.
+ en: """Listening port used by RPC local service.
Note that this config only takes effect when rpc.port_discovery is set to manual and driver is set to ssl.""" - zh: """RPC 本地服务使用的监听SSL端口。
+ zh: """RPC 本地服务使用的监听SSL端口。
只有当 rpc.port_discovery 设置为 manual 且 dirver 设置为 ssl, 此配置才会生效。 """ @@ -812,9 +812,9 @@ Note that this config only takes effect when rpc.driver is set to < rpc_keyfile { desc { - en: """Path to the private key file for the rpc.certfile.
+ en: """Path to the private key file for the rpc.certfile.
Note: contents of this file are secret, so it's necessary to set permissions to 600.""" - zh: """rpc.certfile 的私钥文件的路径。
+ zh: """rpc.certfile 的私钥文件的路径。
注意:此文件内容是私钥,所以需要设置权限为 600。 """ } @@ -826,9 +826,9 @@ Note: contents of this file are secret, so it's necessary to set permissions to rpc_cacertfile { desc { - en: """Path to certification authority TLS certificate file used to validate rpc.certfile.
+ en: """Path to certification authority TLS certificate file used to validate rpc.certfile.
Note: certificates of all nodes in the cluster must be signed by the same CA.""" - zh: """验证 rpc.certfile 的 CA 证书文件的路径。
+ zh: """验证 rpc.certfile 的 CA 证书文件的路径。
注意:集群中所有节点的证书必须使用同一个 CA 签发。 """ } @@ -1039,8 +1039,8 @@ until the RPC connection is considered lost.""" console_handler_drop_mode_qlen { desc { - en: """When the number of buffered log events is larger than this value, the new log events are dropped.
When drop mode is activated or deactivated, a message is printed in the logs.""" - zh: """当缓冲的日志事件数大于此值时,新的日志事件将被丢弃。
启用或停用丢弃模式时,会在日志中打印一条消息。""" + en: """When the number of buffered log events is larger than this value, the new log events are dropped.
When drop mode is activated or deactivated, a message is printed in the logs.""" + zh: """当缓冲的日志事件数大于此值时,新的日志事件将被丢弃。
启用或停用丢弃模式时,会在日志中打印一条消息。""" } label { en: "Drop Mode Max Log Events" @@ -1186,8 +1186,8 @@ until the RPC connection is considered lost.""" log_file_handler_drop_mode_qlen { desc { - en: """When the number of buffered log events is larger than this value, the new log events are dropped.
When drop mode is activated or deactivated, a message is printed in the logs.""" - zh: """当缓冲的日志事件数大于此值时,新的日志事件将被丢弃。
启用或停用丢弃模式时,会在日志中打印一条消息。""" + en: """When the number of buffered log events is larger than this value, the new log events are dropped.
When drop mode is activated or deactivated, a message is printed in the logs.""" + zh: """当缓冲的日志事件数大于此值时,新的日志事件将被丢弃。
启用或停用丢弃模式时,会在日志中打印一条消息。""" } label { en: "Drop Mode Max Log Events" @@ -1334,17 +1334,17 @@ until the RPC connection is considered lost.""" authorization { desc { en: """ -Authorization a.k.a. ACL.
-In EMQX, MQTT client access control is extremely flexible.
+Authorization a.k.a. ACL.
+In EMQX, MQTT client access control is extremely flexible.
An out-of-the-box set of authorization data sources are supported. -For example,
-'file' source is to support concise and yet generic ACL rules in a file;
+For example,
+'file' source is to support concise and yet generic ACL rules in a file;
'built_in_database' source can be used to store per-client customizable rule sets, -natively in the EMQX node;
-'http' source to make EMQX call an external HTTP API to make the decision;
-'PostgreSQL' etc. to look up clients or rules from external databases;
+natively in the EMQX node;
+'http' source to make EMQX call an external HTTP API to make the decision;
+'PostgreSQL' etc. to look up clients or rules from external databases;
""" - zh: """ 授权(ACL)。EMQX 支持完整的客户端访问控制(ACL)。
""" + zh: """ 授权(ACL)。EMQX 支持完整的客户端访问控制(ACL)。
""" } label { en: "Authorization" @@ -1354,9 +1354,9 @@ natively in the EMQX node;
desc_cluster { desc { - en: """EMQX nodes can form a cluster to scale up the total capacity.
+ en: """EMQX nodes can form a cluster to scale up the total capacity.
Here holds the configs to instruct how individual nodes can discover each other.""" - zh: """EMQX 节点可以组成一个集群,以提高总容量。
这里指定了节点之间如何连接。""" + zh: """EMQX 节点可以组成一个集群,以提高总容量。
这里指定了节点之间如何连接。""" } label { en: "Cluster" @@ -1455,11 +1455,11 @@ The new node joins the cluster by connecting to one of the bootstrap nodes.""" desc_rpc { desc { - en: """EMQX uses a library called gen_rpc for inter-broker communication.
+ en: """EMQX uses a library called gen_rpc for inter-broker communication.
Most of the time the default config should work, but in case you need to do performance fine-tuning or experiment a bit, this is where to look.""" - zh: """EMQX 使用 gen_rpc 库来实现跨节点通信。
+ zh: """EMQX 使用 gen_rpc 库来实现跨节点通信。
大多数情况下,默认的配置应该可以工作,但如果你需要做一些性能优化或者实验,可以尝试调整这些参数。""" } label { @@ -1504,8 +1504,15 @@ Each sink is represented by a _log handler_, which can be configured independent desc_log_rotation { desc { - en: """By default, the logs are stored in `./log` directory (for installation from zip file) or in `/var/log/emqx` (for binary installation).
This section of the configuration controls the number of files kept for each log handler.""" - zh: """默认情况下,日志存储在 `./log` 目录(用于从 zip 文件安装)或 `/var/log/emqx`(用于二进制安装)。
这部分配置,控制每个日志处理进程保留的文件数量。""" + en: """ +By default, the logs are stored in `./log` directory (for installation from zip file) or in `/var/log/emqx` (for binary installation).
+This section of the configuration controls the number of files kept for each log handler. +""" + zh: +""" +默认情况下,日志存储在 `./log` 目录(用于从 zip 文件安装)或 `/var/log/emqx`(用于二进制安装)。
+这部分配置,控制每个日志处理进程保留的文件数量。 +""" } label { en: "Log Rotation" @@ -1515,8 +1522,14 @@ Each sink is represented by a _log handler_, which can be configured independent desc_log_overload_kill { desc { - en: """Log overload kill features an overload protection that activates when the log handlers use too much memory or have too many buffered log messages.
When the overload is detected, the log handler is terminated and restarted after a cooldown period.""" - zh: """日志过载终止,具有过载保护功能。当日志处理进程使用过多内存,或者缓存的日志消息过多时该功能被激活。
检测到过载时,日志处理进程将终止,并在冷却期后重新启动。""" + en: """ +Log overload kill features an overload protection that activates when the log handlers use too much memory or have too many buffered log messages.
+When the overload is detected, the log handler is terminated and restarted after a cooldown period. +""" + zh: """ +日志过载终止,具有过载保护功能。当日志处理进程使用过多内存,或者缓存的日志消息过多时该功能被激活。
+检测到过载时,日志处理进程将终止,并在冷却期后重新启动。 +""" } label { en: "Log Overload Kill" diff --git a/apps/emqx_connector/i18n/emqx_connector_api.conf b/apps/emqx_connector/i18n/emqx_connector_api.conf index f549af6cf..b79be15fc 100644 --- a/apps/emqx_connector/i18n/emqx_connector_api.conf +++ b/apps/emqx_connector/i18n/emqx_connector_api.conf @@ -14,11 +14,11 @@ emqx_connector_api { conn_test_post { desc { en: """ -Test creating a new connector by given ID
+Test creating a new connector by given ID
The ID must be of format '{type}:{name}' """ zh: """ -通过给定的 ID 测试创建一个新的连接器
+通过给定的 ID 测试创建一个新的连接器
ID 的格式必须为“{type}:{name}” """ } diff --git a/apps/emqx_connector/i18n/emqx_connector_http.conf b/apps/emqx_connector/i18n/emqx_connector_http.conf index 7b06cda3a..1f4435dae 100644 --- a/apps/emqx_connector/i18n/emqx_connector_http.conf +++ b/apps/emqx_connector/i18n/emqx_connector_http.conf @@ -2,14 +2,14 @@ emqx_connector_http { base_url { desc { en: """ -The base URL is the URL includes only the scheme, host and port.
+The base URL is the URL includes only the scheme, host and port.
When send an HTTP request, the real URL to be used is the concatenation of the base URL and the -path parameter (passed by the emqx_resource:query/2,3 or provided by the request parameter).
+path parameter (passed by the emqx_resource:query/2,3 or provided by the request parameter).
For example: `http://localhost:9901/` """ zh: """ -base URL 只包含host和port。
-发送HTTP请求时,真实的URL是由base URL 和 path parameter连接而成(通过emqx_resource:query/2,3传递,或者通过请求参数提供)。
+base URL 只包含host和port。
+发送HTTP请求时,真实的URL是由base URL 和 path parameter连接而成(通过emqx_resource:query/2,3传递,或者通过请求参数提供)。
示例:`http://localhost:9901/` """ } diff --git a/apps/emqx_connector/i18n/emqx_connector_mongo.conf b/apps/emqx_connector/i18n/emqx_connector_mongo.conf index 158a547be..e290a8107 100644 --- a/apps/emqx_connector/i18n/emqx_connector_mongo.conf +++ b/apps/emqx_connector/i18n/emqx_connector_mongo.conf @@ -47,13 +47,13 @@ emqx_connector_mongo { server { desc { en: """ -The IPv4 or IPv6 address or the hostname to connect to.
-A host entry has the following form: `Host[:Port]`.
+The IPv4 or IPv6 address or the hostname to connect to.
+A host entry has the following form: `Host[:Port]`.
The MongoDB default port 27017 is used if `[:Port]` is not specified. """ zh: """ -将要连接的 IPv4 或 IPv6 地址,或者主机名。
-主机名具有以下形式:`Host[:Port]`。
+将要连接的 IPv4 或 IPv6 地址,或者主机名。
+主机名具有以下形式:`Host[:Port]`。
如果未指定 `[:Port]`,则使用 MongoDB 默认端口 27017。 """ } @@ -66,15 +66,15 @@ The MongoDB default port 27017 is used if `[:Port]` is not specified. servers { desc { en: """ -A Node list for Cluster to connect to. The nodes should be separated with commas, such as: `Node[,Node].
` -For each Node should be: The IPv4 or IPv6 address or the hostname to connect to.
-A host entry has the following form: `Host[:Port]`.
+A Node list for Cluster to connect to. The nodes should be separated with commas, such as: `Node[,Node].` +For each Node should be: The IPv4 or IPv6 address or the hostname to connect to. +A host entry has the following form: `Host[:Port]`. The MongoDB default port 27017 is used if `[:Port]` is not specified. """ zh: """ -集群将要连接的节点列表。 节点之间用逗号分隔,如:`Node[,Node].
` -每个节点的配置为:将要连接的 IPv4 或 IPv6 地址或主机名。
-主机名具有以下形式:`Host[:Port]`。
+集群将要连接的节点列表。 节点之间用逗号分隔,如:`Node[,Node].` +每个节点的配置为:将要连接的 IPv4 或 IPv6 地址或主机名。 +主机名具有以下形式:`Host[:Port]`。 如果未指定 `[:Port]`,则使用 MongoDB 默认端口 27017。 """ } diff --git a/apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf b/apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf index ee6178845..395967dec 100644 --- a/apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf +++ b/apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf @@ -2,26 +2,26 @@ emqx_connector_mqtt_schema { mode { desc { en: """ -The mode of the MQTT Bridge. Can be one of 'cluster_singleton' or 'cluster_shareload'
+The mode of the MQTT Bridge. Can be one of 'cluster_singleton' or 'cluster_shareload'
-- cluster_singleton: create a unique MQTT connection within the emqx cluster.
+- cluster_singleton: create a unique MQTT connection within the emqx cluster.
In 'cluster_singleton' node, all messages toward the remote broker go through the same -MQTT connection.
-- cluster_shareload: create an MQTT connection on each node in the emqx cluster.
+MQTT connection.
+- cluster_shareload: create an MQTT connection on each node in the emqx cluster.
In 'cluster_shareload' mode, the incoming load from the remote broker is shared by -using shared subscription.
+using shared subscription.
Note that the 'clientid' is suffixed by the node name, this is to avoid clientid conflicts between different nodes. And we can only use shared subscription topic filters for 'remote_topic' of ingress connections. """ zh: """ -MQTT 桥的模式。 可用的类型有“cluster_singleton”,“cluster_shareload”。
+MQTT 桥的模式。 可用的类型有“cluster_singleton”,“cluster_shareload”。
-- cluster_singleton:在 emqx 集群内创建唯一的 MQTT 连接。
-在“cluster_singleton”节点中,所有发往远程代理的消息都通过相同的MQTT 连接。
+- cluster_singleton:在 emqx 集群内创建唯一的 MQTT 连接。
+在“cluster_singleton”节点中,所有发往远程代理的消息都通过相同的MQTT 连接。
-- cluster_shareload:在 emqx 集群的每个节点上创建一个 MQTT 连接。
-在“cluster_shareload”模式下,来自远程代理的传入负载通过共享订阅的方式接收。
+- cluster_shareload:在 emqx 集群的每个节点上创建一个 MQTT 连接。
+在“cluster_shareload”模式下,来自远程代理的传入负载通过共享订阅的方式接收。
请注意,“clientid”以节点名称为后缀,这是为了避免不同节点之间的clientid冲突。 而且对于入口连接的“remote_topic”,我们只能使用共享订阅主题过滤器。 """ @@ -123,11 +123,11 @@ MQTT 桥的模式。 可用的类型有“cluster_singleton”,“cluster_shar ingress_local_topic { desc { en: """ -Send messages to which topic of the local broker.
+Send messages to which topic of the local broker.
Template with variables is allowed. """ zh: """ -向本地broker的哪个topic发送消息。
+向本地broker的哪个topic发送消息。
允许使用带有变量的模板。 """ } @@ -140,11 +140,11 @@ Template with variables is allowed. ingress_local_qos { desc { en: """ -The QoS of the MQTT message to be sent.
+The QoS of the MQTT message to be sent.
Template with variables is allowed. """ zh: """ -待发送 MQTT 消息的 QoS。
+待发送 MQTT 消息的 QoS。
允许使用带有变量的模板。 """ } @@ -179,11 +179,11 @@ Template with variables is allowed. egress_remote_topic { desc { en: """ -Forward to which topic of the remote broker.
+Forward to which topic of the remote broker.
Template with variables is allowed. """ zh: """ -转发到远程broker的哪个topic。
+转发到远程broker的哪个topic。
允许使用带有变量的模板。 """ } @@ -196,11 +196,11 @@ Template with variables is allowed. egress_remote_qos { desc { en: """ -The QoS of the MQTT message to be sent.
+The QoS of the MQTT message to be sent.
Template with variables is allowed. """ zh: """ -待发送 MQTT 消息的 QoS。
+待发送 MQTT 消息的 QoS。
允许使用带有变量的模板。 """ } @@ -213,11 +213,11 @@ Template with variables is allowed. dir { desc { en: """ -The dir where the replayq file saved.
+The dir where the replayq file saved.
Set to 'false' disables the replayq feature. """ zh: """ -replayq 文件保存的目录。
+replayq 文件保存的目录。
设置为 'false' 会禁用 replayq 功能。 """ } @@ -230,12 +230,12 @@ replayq 文件保存的目录。
seg_bytes { desc { en: """ -The size in bytes of a single segment.
+The size in bytes of a single segment.
A segment is mapping to a file in the replayq dir. If the current segment is full, a new segment (file) will be opened to write. """ zh: """ -单个段的大小(以字节为单位)。
+单个段的大小(以字节为单位)。
一个段映射到 replayq 目录中的一个文件。 如果当前段已满,则新段(文件)将被打开写入。 """ } @@ -248,12 +248,12 @@ A segment is mapping to a file in the replayq dir. If the current segment is ful offload { desc { en: """ -In offload mode, the disk queue is only used to offload queue tail segments.
+In offload mode, the disk queue is only used to offload queue tail segments.
The messages are cached in the memory first, then it writes to the replayq files after the size of the memory cache reaches 'seg_bytes'. """ zh: """ -在Offload模式下,磁盘队列仅用于卸载队列尾段。
+在Offload模式下,磁盘队列仅用于卸载队列尾段。
消息首先缓存在内存中,然后写入replayq文件。内存缓大小为“seg_bytes” 指定的值。 """ } @@ -266,11 +266,11 @@ the memory cache reaches 'seg_bytes'. retain { desc { en: """ -The 'retain' flag of the MQTT message to be sent.
+The 'retain' flag of the MQTT message to be sent.
Template with variables is allowed. """ zh: """ -要发送的 MQTT 消息的“保留”标志。
+要发送的 MQTT 消息的“保留”标志。
允许使用带有变量的模板。 """ } @@ -283,11 +283,11 @@ Template with variables is allowed. payload { desc { en: """ -The payload of the MQTT message to be sent.
+The payload of the MQTT message to be sent.
Template with variables is allowed. """ zh: """ -要发送的 MQTT 消息的负载。
+要发送的 MQTT 消息的负载。
允许使用带有变量的模板。 """ } @@ -311,13 +311,13 @@ Template with variables is allowed. desc_ingress { desc { en: """ -The ingress config defines how this bridge receive messages from the remote MQTT broker, and then send them to the local broker.
-Template with variables is allowed in 'local_topic', 'remote_qos', 'qos', 'retain', 'payload'.
+The ingress config defines how this bridge receive messages from the remote MQTT broker, and then send them to the local broker.
+Template with variables is allowed in 'local_topic', 'remote_qos', 'qos', 'retain', 'payload'.
NOTE: if this bridge is used as the input of a rule (emqx rule engine), and also local_topic is configured, then messages got from the remote broker will be sent to both the 'local_topic' and the rule. """ zh: """ -Ingress 模式定义了这个 bridge 如何从远程 MQTT broker 接收消息,然后将它们发送到本地 broker 。
-允许带有的模板变量: 'local_topic'、'remote_qos'、'qos'、'retain'、'payload' 。
+Ingress 模式定义了这个 bridge 如何从远程 MQTT broker 接收消息,然后将它们发送到本地 broker 。
+允许带有的模板变量: 'local_topic'、'remote_qos'、'qos'、'retain'、'payload' 。
注意:如果这个 bridge 被用作规则的输入(emqx 规则引擎),并且还配置了 local_topic,那么从远程 broker 获取的消息将同时被发送到 'local_topic' 和规则引擎。 """ } @@ -330,13 +330,13 @@ Ingress 模式定义了这个 bridge 如何从远程 MQTT broker 接收消息, desc_egress { desc { en: """ -The egress config defines how this bridge forwards messages from the local broker to the remote broker.
-Template with variables is allowed in 'remote_topic', 'qos', 'retain', 'payload'.
+The egress config defines how this bridge forwards messages from the local broker to the remote broker.
+Template with variables is allowed in 'remote_topic', 'qos', 'retain', 'payload'.
NOTE: if this bridge is used as the output of a rule (emqx rule engine), and also local_topic is configured, then both the data got from the rule and the MQTT messages that matches local_topic will be forwarded. """ zh: """ -Egress 模式定义了 bridge 如何将消息从本地 broker 转发到远程 broker。
-允许带有的模板变量: 'remote_topic'、'qos'、'retain'、'payload' 。
+Egress 模式定义了 bridge 如何将消息从本地 broker 转发到远程 broker。
+允许带有的模板变量: 'remote_topic'、'qos'、'retain'、'payload' 。
注意:如果这个 bridge 作为规则(emqx 规则引擎)的输出,并且还配置了 local_topic,那么从规则引擎中获取的数据和匹配 local_topic 的 MQTT 消息都会被转发到远程 broker 。 """ } diff --git a/apps/emqx_connector/i18n/emqx_connector_mysql.conf b/apps/emqx_connector/i18n/emqx_connector_mysql.conf index 499caae12..4a5d99254 100644 --- a/apps/emqx_connector/i18n/emqx_connector_mysql.conf +++ b/apps/emqx_connector/i18n/emqx_connector_mysql.conf @@ -3,13 +3,13 @@ emqx_connector_mysql { server { desc { en: """ -The IPv4 or IPv6 address or the hostname to connect to.
-A host entry has the following form: `Host[:Port]`.
+The IPv4 or IPv6 address or the hostname to connect to.
+A host entry has the following form: `Host[:Port]`.
The MySQL default port 3306 is used if `[:Port]` is not specified. """ zh: """ -将要连接的 IPv4 或 IPv6 地址,或者主机名。
-主机名具有以下形式:`Host[:Port]`。
+将要连接的 IPv4 或 IPv6 地址,或者主机名。
+主机名具有以下形式:`Host[:Port]`。
如果未指定 `[:Port]`,则使用 MySQL 默认端口 3306。 """ } diff --git a/apps/emqx_connector/i18n/emqx_connector_pgsql.conf b/apps/emqx_connector/i18n/emqx_connector_pgsql.conf index 6aa792070..9731b3e18 100644 --- a/apps/emqx_connector/i18n/emqx_connector_pgsql.conf +++ b/apps/emqx_connector/i18n/emqx_connector_pgsql.conf @@ -3,13 +3,13 @@ emqx_connector_pgsql { server { desc { en: """ -The IPv4 or IPv6 address or the hostname to connect to.
-A host entry has the following form: `Host[:Port]`.
+The IPv4 or IPv6 address or the hostname to connect to.
+A host entry has the following form: `Host[:Port]`.
The PostgreSQL default port 5432 is used if `[:Port]` is not specified. """ zh: """ -将要连接的 IPv4 或 IPv6 地址,或者主机名。
-主机名具有以下形式:`Host[:Port]`。
+将要连接的 IPv4 或 IPv6 地址,或者主机名。
+主机名具有以下形式:`Host[:Port]`。
如果未指定 `[:Port]`,则使用 PostgreSQL 默认端口 5432。 """ } diff --git a/apps/emqx_connector/i18n/emqx_connector_redis.conf b/apps/emqx_connector/i18n/emqx_connector_redis.conf index baba431e2..0e27ee9c6 100644 --- a/apps/emqx_connector/i18n/emqx_connector_redis.conf +++ b/apps/emqx_connector/i18n/emqx_connector_redis.conf @@ -47,13 +47,13 @@ emqx_connector_redis { server { desc { en: """ -The IPv4 or IPv6 address or the hostname to connect to.
-A host entry has the following form: `Host[:Port]`.
+The IPv4 or IPv6 address or the hostname to connect to.
+A host entry has the following form: `Host[:Port]`.
The Redis default port 6379 is used if `[:Port]` is not specified. """ zh: """ -将要连接的 IPv4 或 IPv6 地址,或者主机名。
-主机名具有以下形式:`Host[:Port]`。
+将要连接的 IPv4 或 IPv6 地址,或者主机名。
+主机名具有以下形式:`Host[:Port]`。
如果未指定 `[:Port]`,则使用 MongoDB 默认端口 27017。 """ } @@ -66,16 +66,16 @@ The Redis default port 6379 is used if `[:Port]` is not specified. servers { desc { en: """ -A Node list for Cluster to connect to. The nodes should be separated with commas, such as: `Node[,Node].
` -For each Node should be: The IPv4 or IPv6 address or the hostname to connect to.
-A host entry has the following form: `Host[:Port]`.
+A Node list for Cluster to connect to. The nodes should be separated with commas, such as: `Node[,Node].` +For each Node should be: The IPv4 or IPv6 address or the hostname to connect to. +A host entry has the following form: `Host[:Port]`. The MongoDB default port 27017 is used if `[:Port]` is not specified. """ zh: """ -集群将要连接的节点列表。 节点之间用逗号分隔,如:`Node[,Node].
` -每个节点的配置为:将要连接的 IPv4 或 IPv6 地址或主机名。
-主机名具有以下形式:`Host[:Port]`。
+集群将要连接的节点列表。 节点之间用逗号分隔,如:`Node[,Node].` +每个节点的配置为:将要连接的 IPv4 或 IPv6 地址或主机名。 +主机名具有以下形式:`Host[:Port]`。 如果未指定 `[:Port]`,则使用 Redis 默认端口 6379。 """ } diff --git a/apps/emqx_connector/i18n/emqx_connector_schema.conf b/apps/emqx_connector/i18n/emqx_connector_schema.conf index 0a94f5e88..1f6fd5381 100644 --- a/apps/emqx_connector/i18n/emqx_connector_schema.conf +++ b/apps/emqx_connector/i18n/emqx_connector_schema.conf @@ -14,11 +14,11 @@ emqx_connector_schema { desc_connector { desc { en: """ -Configuration for EMQX connectors.
+Configuration for EMQX connectors.
A connector maintains the data related to the external resources, such as MySQL database. """ zh: """ -EMQX 连接器的配置。
+EMQX 连接器的配置。
连接器维护与外部资源相关的数据,比如 MySQL 数据库。 """ } diff --git a/apps/emqx_connector/include/emqx_connector.hrl b/apps/emqx_connector/include/emqx_connector.hrl index 0aa61ed35..f0e07166d 100644 --- a/apps/emqx_connector/include/emqx_connector.hrl +++ b/apps/emqx_connector/include/emqx_connector.hrl @@ -24,12 +24,12 @@ -define(REDIS_DEFAULT_PORT, 6379). -define(PGSQL_DEFAULT_PORT, 5432). --define(SERVERS_DESC, "A Node list for Cluster to connect to. The nodes should be separated with commas, such as: `Node[,Node].
` +-define(SERVERS_DESC, "A Node list for Cluster to connect to. The nodes should be separated with commas, such as: `Node[,Node].` For each Node should be: "). -define(SERVER_DESC(TYPE, DEFAULT_PORT), " -The IPv4 or IPv6 address or the hostname to connect to.
-A host entry has the following form: `Host[:Port]`.
+The IPv4 or IPv6 address or the hostname to connect to.
+A host entry has the following form: `Host[:Port]`.
The " ++ TYPE ++ " default port " ++ DEFAULT_PORT ++ " is used if `[:Port]` is not specified." ). diff --git a/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl b/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl index fb749505a..9f9b03d34 100644 --- a/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl +++ b/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl @@ -205,9 +205,9 @@ topic_mappings() -> ingress_desc() -> " The ingress config defines how this bridge receive messages from the remote MQTT broker, and then -send them to the local broker.
+send them to the local broker.
Template with variables is allowed in 'local_topic', 'remote_qos', 'qos', 'retain', -'payload'.
+'payload'.
NOTE: if this bridge is used as the input of a rule (emqx rule engine), and also local_topic is configured, then messages got from the remote broker will be sent to both the 'local_topic' and the rule. @@ -215,8 +215,8 @@ the rule. egress_desc() -> " The egress config defines how this bridge forwards messages from the local broker to the remote -broker.
-Template with variables is allowed in 'remote_topic', 'qos', 'retain', 'payload'.
+broker.
+Template with variables is allowed in 'remote_topic', 'qos', 'retain', 'payload'.
NOTE: if this bridge is used as the output of a rule (emqx rule engine), and also local_topic is configured, then both the data got from the rule and the MQTT messages that matches local_topic will be forwarded. diff --git a/apps/emqx_dashboard/i18n/emqx_dashboard_i18n.conf b/apps/emqx_dashboard/i18n/emqx_dashboard_i18n.conf index 82c7075af..79d4375ab 100644 --- a/apps/emqx_dashboard/i18n/emqx_dashboard_i18n.conf +++ b/apps/emqx_dashboard/i18n/emqx_dashboard_i18n.conf @@ -1,11 +1,11 @@ emqx_dashboard_schema { listeners { desc { - en: """HTTP(s) listeners are identified by their protocol type and are
-used to serve dashboard UI and restful HTTP API.
-Listeners must have a unique combination of port number and IP address.
+ en: """HTTP(s) listeners are identified by their protocol type and are
+used to serve dashboard UI and restful HTTP API.
+Listeners must have a unique combination of port number and IP address.
For example, an HTTP listener can listen on all configured IP addresses -on a given port for a machine by specifying the IP address 0.0.0.0.
+on a given port for a machine by specifying the IP address 0.0.0.0.
Alternatively, the HTTP listener can specify a unique IP address for each listener, but use the same port.""" zh: """仪表盘监听器设置。""" @@ -17,7 +17,7 @@ but use the same port.""" } sample_interval { desc { - en: """How often to update metrics displayed in the dashboard.
+ en: """How often to update metrics displayed in the dashboard.
Note: `sample_interval` should be a divisor of 60.""" zh: """更新仪表板中显示的指标的时间间隔。必须小于60,且被60的整除。""" } @@ -154,9 +154,9 @@ Note: `sample_interval` should be a divisor of 60.""" } default_password { desc { - en: """The initial default password for dashboard 'admin' user.
+ en: """The initial default password for dashboard 'admin' user.
For safety, it should be changed as soon as possible.""" - zh: """默认的仪表板用户密码
+ zh: """默认的仪表板用户密码
为了安全,应该尽快修改密码。""" } label { @@ -166,10 +166,10 @@ For safety, it should be changed as soon as possible.""" } cors { desc { - en: """Support Cross-Origin Resource Sharing (CORS).
+ en: """Support Cross-Origin Resource Sharing (CORS).
Allows a server to indicate any origins (domain, scheme, or port) other than
+ zh: """支持跨域资源共享(CORS)
允许服务器指示任何来源(域名、协议或端口),除了本服务器之外的任何浏览器应允许加载资源。""" } label { diff --git a/apps/emqx_management/src/emqx_mgmt_api_configs.erl b/apps/emqx_management/src/emqx_mgmt_api_configs.erl index ea594b5a8..24454f61b 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_configs.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_configs.erl @@ -107,7 +107,7 @@ schema("/configs_reset/:rootname") -> tags => [conf], description => << - "Reset the config entry specified by the query string parameter `conf_path`.
\n" + "Reset the config entry specified by the query string parameter `conf_path`.
\n" "- For a config entry that has default value, this resets it to the default value;\n" "- For a config entry that has no default value, an error 400 will be returned" >>, diff --git a/apps/emqx_management/src/emqx_mgmt_api_plugins.erl b/apps/emqx_management/src/emqx_mgmt_api_plugins.erl index ea9f1e0ad..ac904f479 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_plugins.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_plugins.erl @@ -69,8 +69,8 @@ schema("/plugins") -> 'operationId' => list_plugins, get => #{ description => - "List all install plugins.
" - "Plugins are launched in top-down order.
" + "List all install plugins.
" + "Plugins are launched in top-down order.
" "Using `POST /plugins/{name}/move` to change the boot order.", responses => #{ 200 => hoconsc:array(hoconsc:ref(plugin)) @@ -129,9 +129,9 @@ schema("/plugins/:name/:action") -> 'operationId' => update_plugin, put => #{ description => - "start/stop a installed plugin.
" - "- **start**: start the plugin.
" - "- **stop**: stop the plugin.
", + "start/stop a installed plugin.
" + "- **start**: start the plugin.
" + "- **stop**: stop the plugin.
", parameters => [ hoconsc:ref(name), {action, hoconsc:mk(hoconsc:enum([start, stop]), #{desc => "Action", in => path})} @@ -264,8 +264,8 @@ fields(running_status) -> hoconsc:mk(hoconsc:enum([running, stopped]), #{ desc => "Install plugin status at runtime
" - "1. running: plugin is running.
" - "2. stopped: plugin is stopped.
" + "1. running: plugin is running.
" + "2. stopped: plugin is stopped.
" })} ]. diff --git a/apps/emqx_plugins/i18n/emqx_plugins_schema.conf b/apps/emqx_plugins/i18n/emqx_plugins_schema.conf index 2b88bbc6d..4c2a2fbac 100644 --- a/apps/emqx_plugins/i18n/emqx_plugins_schema.conf +++ b/apps/emqx_plugins/i18n/emqx_plugins_schema.conf @@ -2,14 +2,14 @@ emqx_plugins_schema { plugins { desc { en: """ -Manage EMQX plugins.
+Manage EMQX plugins.
Plugins can be pre-built as a part of EMQX package, or installed as a standalone package in a location specified by -install_dir config key
+install_dir config key
The standalone-installed plugins are referred to as 'external' plugins. """ - zh: """管理EMQX插件。
-插件可以是EMQX安装包中的一部分,也可以是一个独立的安装包。
+ zh: """管理EMQX插件。
+插件可以是EMQX安装包中的一部分,也可以是一个独立的安装包。
独立安装的插件称为“外部插件”。 """ } @@ -30,11 +30,11 @@ The standalone-installed plugins are referred to as 'external' plugins. } name_vsn { desc { - en: """The {name}-{version} of the plugin.
-It should match the plugin application name-version as the for the plugin release package name
+ en: """The {name}-{version} of the plugin.
+It should match the plugin application name-version as the for the plugin release package name
For example: my_plugin-0.1.0. """ - zh: """插件的名称{name}-{version}。
+ zh: """插件的名称{name}-{version}。
它应该与插件的发布包名称一致,如my_plugin-0.1.0。""" } label { @@ -54,7 +54,7 @@ For example: my_plugin-0.1.0. } states { desc { - en: """An array of plugins in the desired states.
+ en: """An array of plugins in the desired states.
The plugins are started in the defined order""" zh: """一组插件的状态。插件将按照定义的顺序启动""" } @@ -69,7 +69,7 @@ The plugins are started in the defined order""" The installation directory for the external plugins. The plugin beam files and configuration files should reside in the subdirectory named as emqx_foo_bar-0.1.0. -
+
NOTE: For security reasons, this directory should **NOT** be writable by anyone except emqx (or any user which runs EMQX). """ @@ -82,10 +82,10 @@ by anyone except emqx (or any user which runs EMQX). } check_interval { desc { - en: """Check interval: check if the status of the plugins in the cluster is consistent,
+ en: """Check interval: check if the status of the plugins in the cluster is consistent,
if the results of 3 consecutive checks are not consistent, then alarm. """ - zh: """检查间隔:检查集群中插件的状态是否一致,
+ zh: """检查间隔:检查集群中插件的状态是否一致,
如果连续3次检查结果不一致,则报警。 """ } diff --git a/apps/emqx_retainer/src/emqx_retainer_schema.erl b/apps/emqx_retainer/src/emqx_retainer_schema.erl index 7b46f147c..8aa913da3 100644 --- a/apps/emqx_retainer/src/emqx_retainer_schema.erl +++ b/apps/emqx_retainer/src/emqx_retainer_schema.erl @@ -127,7 +127,7 @@ retainer_indices(type) -> retainer_indices(desc) -> "Retainer index specifications: list of arrays of positive ascending integers. " "Each array specifies an index. Numbers in an index specification are 1-based " - "word positions in topics. Words from specified positions will be used for indexing.
" + "word positions in topics. Words from specified positions will be used for indexing.
" "For example, it is good to have [2, 4] index to optimize " "+/X/+/Y/... topic wildcard subscriptions."; retainer_indices(example) -> diff --git a/apps/emqx_rule_engine/i18n/emqx_rule_engine_schema.conf b/apps/emqx_rule_engine/i18n/emqx_rule_engine_schema.conf index 297413c38..135fe27eb 100644 --- a/apps/emqx_rule_engine/i18n/emqx_rule_engine_schema.conf +++ b/apps/emqx_rule_engine/i18n/emqx_rule_engine_schema.conf @@ -14,12 +14,12 @@ emqx_rule_engine_schema { rules_sql { desc { en: """ -SQL query to transform the messages.
-Example: SELECT * FROM "test/topic" WHERE payload.x = 1
+SQL query to transform the messages.
+Example: SELECT * FROM "test/topic" WHERE payload.x = 1
""" zh: """ -用于处理消息的 SQL 。
-示例:SELECT * FROM "test/topic" WHERE payload.x = 1
+用于处理消息的 SQL 。
+示例:SELECT * FROM "test/topic" WHERE payload.x = 1
""" } label: { @@ -31,25 +31,25 @@ Example: SELECT * FROM "test/topic" WHERE payload.x = 1
rules_outputs { desc { en: """ -A list of outputs of the rule.
+A list of outputs of the rule.
An output can be a string that refers to the channel ID of an EMQX bridge, or an object -that refers to a function.
+that refers to a function.
There a some built-in functions like "republish" and "console", and we also support user -provided functions in the format: "{module}:{function}".
+provided functions in the format: "{module}:{function}".
The outputs in the list are executed sequentially. This means that if one of the output is executing slowly, all the following outputs will not -be executed until it returns.
+be executed until it returns.
If one of the output crashed, all other outputs come after it will still be executed, in the -original order.
+original order.
If there's any error when running an output, there will be an error message, and the 'failure' counter of the function output or the bridge channel will increase. """ zh: """ -规则的动作列表。
-动作可以是指向 EMQX bridge 的引用,也可以是一个指向函数的对象。
-我们支持一些内置函数,如“republish”和“console”,我们还支持用户提供的函数,它的格式为:“{module}:{function}”。
-列表中的动作按顺序执行。这意味着如果其中一个动作执行缓慢,则以下所有动作都不会被执行直到它返回。
-如果其中一个动作崩溃,在它之后的所有动作仍然会被按照原始顺序执行。
+规则的动作列表。
+动作可以是指向 EMQX bridge 的引用,也可以是一个指向函数的对象。
+我们支持一些内置函数,如“republish”和“console”,我们还支持用户提供的函数,它的格式为:“{module}:{function}”。
+列表中的动作按顺序执行。这意味着如果其中一个动作执行缓慢,则以下所有动作都不会被执行直到它返回。
+如果其中一个动作崩溃,在它之后的所有动作仍然会被按照原始顺序执行。
如果运行动作时出现任何错误,则会出现错误消息,并且相应的计数器会增加。 """ } @@ -106,16 +106,16 @@ counter of the function output or the bridge channel will increase. user_provided_function_function { desc { en: """ -The user provided function. Should be in the format: '{module}:{function}'.
+The user provided function. Should be in the format: '{module}:{function}'.
Where {module} is the Erlang callback module and {function} is the Erlang function. -
+
To write your own function, checkout the function console and republish in the source file: apps/emqx_rule_engine/src/emqx_rule_outputs.erl as an example. """ zh: """ -用户提供的函数。 格式应为:'{module}:{function}'。
-其中 {module} 是 Erlang 回调模块, {function} 是 Erlang 函数。
+用户提供的函数。 格式应为:'{module}:{function}'。
+其中 {module} 是 Erlang 回调模块, {function} 是 Erlang 函数。
要编写自己的函数,请检查源文件:apps/emqx_rule_engine/src/emqx_rule_outputs.erl 中的示例函数 consolerepublish 。 """ } @@ -146,11 +146,11 @@ checkout the function console and republish in the sou republish_args_topic { desc { en: """ -The target topic of message to be re-published.
+The target topic of message to be re-published.
Template with variables is allowed, see description of the 'republish_args'. """ zh: """ -重新发布消息的目标主题。
+重新发布消息的目标主题。
允许使用带有变量的模板,请参阅“republish_args”的描述。 """ } @@ -164,12 +164,12 @@ Template with variables is allowed, see description of the 'republish_args'. desc { en: """ The qos of the message to be re-published. -Template with variables is allowed, see description of the 'republish_args'.
+Template with variables is allowed, see description of the 'republish_args'.
Defaults to ${qos}. If variable ${qos} is not found from the selected result of the rule, 0 is used. """ zh: """ -要重新发布的消息的 qos。允许使用带有变量的模板,请参阅“republish_args”的描述。
+要重新发布的消息的 qos。允许使用带有变量的模板,请参阅“republish_args”的描述。
默认为 ${qos}。 如果从规则的选择结果中没有找到变量 ${qos},则使用 0。 """ } @@ -183,12 +183,12 @@ Defaults to ${qos}. If variable ${qos} is not found from the selected result of desc { en: """ The 'retain' flag of the message to be re-published. -Template with variables is allowed, see description of the 'republish_args'.
+Template with variables is allowed, see description of the 'republish_args'.
Defaults to ${retain}. If variable ${retain} is not found from the selected result of the rule, false is used. """ zh: """ -要重新发布的消息的“保留”标志。允许使用带有变量的模板,请参阅“republish_args”的描述。
+要重新发布的消息的“保留”标志。允许使用带有变量的模板,请参阅“republish_args”的描述。
默认为 ${retain}。 如果从所选结果中未找到变量 ${retain},则使用 false。 """ } @@ -202,12 +202,12 @@ of the rule, false is used. desc { en: """ The payload of the message to be re-published. -Template with variables is allowed, see description of the 'republish_args'.
. +Template with variables is allowed, see description of the 'republish_args'.
. Defaults to ${payload}. If variable ${payload} is not found from the selected result of the rule, then the string "undefined" is used. """ zh: """ -要重新发布的消息的有效负载。允许使用带有变量的模板,请参阅“republish_args”的描述。
。 +要重新发布的消息的有效负载。允许使用带有变量的模板,请参阅“republish_args”的描述。
。 默认为 ${payload}。 如果从所选结果中未找到变量 ${payload},则使用字符串 "undefined"。 """ } @@ -296,7 +296,7 @@ of the rule, then the string "undefined" is used. desc_republish_args { desc { - en: """The arguments of the built-in 'republish' output.
One can use variables in the args.
+ en: """The arguments of the built-in 'republish' output.
One can use variables in the args.
The variables are selected by the rule. For example, if the rule SQL is defined as following: SELECT clientid, qos, payload FROM "t/1" @@ -314,8 +314,8 @@ When the rule is triggered by an MQTT message with payload = `hello`, qos = 1, clientid = `Steve`, the rule will republish a new MQTT message to topic `t/Steve`, payload = `msg: hello`, and `qos = 1`.""" zh: """ -内置 'republish' 动作的参数。
-可以在参数中使用变量。
+内置 'republish' 动作的参数。
+可以在参数中使用变量。
变量是规则中选择的字段。 例如规则 SQL 定义如下: SELECT clientid, qos, payload FROM "t/1"