Merge pull request #12242 from JimMoen/1228-chore-typo-and-style

chore: typo and style
This commit is contained in:
JimMoen 2023-12-29 16:39:03 +08:00 committed by GitHub
commit a3fc4fa5c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
84 changed files with 662 additions and 501 deletions

View File

@ -1,12 +1,11 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, {deps, [
[
{minirest, {git, "https://github.com/emqx/minirest.git", {tag, "1.3.7"}}} {minirest, {git, "https://github.com/emqx/minirest.git", {tag, "1.3.7"}}}
]}. ]}.
{shell, [ {shell, [
% {config, "config/sys.config"}, % {config, "config/sys.config"},
{apps, [http_server]} {apps, [http_server]}
]}. ]}.

View File

@ -316,9 +316,10 @@ $(foreach tt,$(ALL_ELIXIR_TGZS),$(eval $(call gen-elixir-tgz-target,$(tt))))
.PHONY: fmt .PHONY: fmt
fmt: $(REBAR) fmt: $(REBAR)
@$(SCRIPTS)/erlfmt -w 'apps/*/{src,include,priv,test,integration_test}/**/*.{erl,hrl,app.src,eterm}' @$(SCRIPTS)/erlfmt -w 'apps/*/{src,include,priv,test,integration_test}/**/*.{erl,hrl,app.src,eterm}'
@$(SCRIPTS)/erlfmt -w '**/*.escript' --exclude-files '_build/**'
@$(SCRIPTS)/erlfmt -w '**/rebar.config'
@$(SCRIPTS)/erlfmt -w 'rebar.config.erl' @$(SCRIPTS)/erlfmt -w 'rebar.config.erl'
@$(SCRIPTS)/erlfmt -w '$(SCRIPTS)/**/*.escript' @$(SCRIPTS)/erlfmt -w 'bin/nodetool'
@$(SCRIPTS)/erlfmt -w 'bin/**/*.escript'
@mix format @mix format
.PHONY: clean-test-cluster-config .PHONY: clean-test-cluster-config

View File

@ -60,7 +60,7 @@ EMQX Cloud 文档:[docs.emqx.com/zh/cloud/latest/](https://docs.emqx.com/zh/cl
- 访问 [EMQ 问答社区](https://askemq.com/) 以获取帮助,也可以分享您的想法或项目。 - 访问 [EMQ 问答社区](https://askemq.com/) 以获取帮助,也可以分享您的想法或项目。
- 添加小助手微信号 `emqmkt`,加入 EMQ 微信技术交流群。 - 添加小助手微信号 `emqmkt`,加入 EMQ 微信技术交流群。
- 加入我们的 [Discord](https://discord.gg/xYGf3fQnES),参于实时讨论。 - 加入我们的 [Discord](https://discord.gg/xYGf3fQnES),参于实时讨论。
- 关注我们的 [bilibili](https://space.bilibili.com/522222081),获取最新物联网技术分享。 - 关注我们的 [Bilibili](https://space.bilibili.com/522222081),获取最新物联网技术分享。
- 关注我们的 [微博](https://weibo.com/emqtt) 或 [Twitter](https://twitter.com/EMQTech),获取 EMQ 最新资讯。 - 关注我们的 [微博](https://weibo.com/emqtt) 或 [Twitter](https://twitter.com/EMQTech),获取 EMQ 最新资讯。
## 相关资源 ## 相关资源

View File

@ -32,7 +32,7 @@ docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p
Чтобы ознакомиться с функциональностью EMQX, пожалуйста, следуйте [руководству по началу работы](https://www.emqx.io/docs/en/v5.0/getting-started/getting-started.html#start-emqx). Чтобы ознакомиться с функциональностью EMQX, пожалуйста, следуйте [руководству по началу работы](https://www.emqx.io/docs/en/v5.0/getting-started/getting-started.html#start-emqx).
#### Запуск кластера EMQX на kubernetes #### Запуск кластера EMQX на Kubernetes
[Документация по EMQX Operator](https://github.com/emqx/emqx-operator/blob/main/docs/en_US/getting-started/getting-started.md). [Документация по EMQX Operator](https://github.com/emqx/emqx-operator/blob/main/docs/en_US/getting-started/getting-started.md).

View File

@ -34,7 +34,7 @@ docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p
Next, please follow the [Deploy with Docker](https://www.emqx.io/docs/en/v5.1/deploy/install-docker.html) guide for further instructions. Next, please follow the [Deploy with Docker](https://www.emqx.io/docs/en/v5.1/deploy/install-docker.html) guide for further instructions.
#### Run EMQX cluster on kubernetes #### Run EMQX cluster on Kubernetes
Please consult official [EMQX Operator](https://github.com/emqx/emqx-operator/blob/main/docs/en_US/getting-started/getting-started.md) documentation for details. Please consult official [EMQX Operator](https://github.com/emqx/emqx-operator/blob/main/docs/en_US/getting-started/getting-started.md) documentation for details.

View File

@ -47,8 +47,10 @@
{bbmustache, "1.10.0"}, {bbmustache, "1.10.0"},
{emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.0"}}} {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.0"}}}
]}, ]},
{extra_src_dirs, [{"test", [recursive]}, {extra_src_dirs, [
{"integration_test", [recursive]}]} {"test", [recursive]},
{"integration_test", [recursive]}
]}
]}, ]},
{standalone_test, [ {standalone_test, [
{deps, [ {deps, [

View File

@ -137,7 +137,7 @@ to negotiate protocol version:
protocol version supported by the remote node protocol version supported by the remote node
`Node`. `emqx_bpapi:supported_version(ProtocolId)` returns maximum `Node`. `emqx_bpapi:supported_version(ProtocolId)` returns maximum
protocol version that is supported by all nodes in the cluster. It can protocol version that is supported by all nodes in the cluster. It can
be useful when the protocol involves multicalls or multicasts. be useful when the protocol involves multi-calls or multi-casts.
The business logic can assume that the supported protocol version is The business logic can assume that the supported protocol version is
not going to change on the remote node, while it is running. So it is not going to change on the remote node, while it is running. So it is

View File

@ -585,7 +585,7 @@ t_connack_max_qos_allowed(Config) ->
process_flag(trap_exit, false). process_flag(trap_exit, false).
t_connack_assigned_clienid(Config) -> t_connack_assigned_clientid(Config) ->
ConnFun = ?config(conn_fun, Config), ConnFun = ?config(conn_fun, Config),
{ok, Client1} = emqtt:start_link([{proto_ver, v5} | Config]), {ok, Client1} = emqtt:start_link([{proto_ver, v5} | Config]),
{ok, _} = emqtt:ConnFun(Client1), {ok, _} = emqtt:ConnFun(Client1),

View File

@ -1,5 +1,7 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}} {emqx_utils, {path, "../emqx_utils"}}
]}. ]}.

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},

View File

@ -1,6 +1,7 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},
{emqx_auth, {path, "../emqx_auth"}} {emqx_auth, {path, "../emqx_auth"}}
]}. ]}.

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},

View File

@ -1,9 +1,11 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},
{emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_resource, {path, "../../apps/emqx_resource"}}
]}. ]}.
{shell, [ {shell, [
% {config, "config/sys.config"}, % {config, "config/sys.config"},

View File

@ -1,14 +1,16 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}} {deps, [
, {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}} {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}},
, {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}} {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}},
, {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}} {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}},
, {snappyer, "1.2.9"} {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}},
, {emqx_connector, {path, "../../apps/emqx_connector"}} {snappyer, "1.2.9"},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_azure_event_hub]} {apps, [emqx_bridge_azure_event_hub]}

View File

@ -1,10 +1,12 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {ecql, {git, "https://github.com/emqx/ecql.git", {tag, "v0.5.2"}}} {deps, [
, {emqx_connector, {path, "../../apps/emqx_connector"}} {ecql, {git, "https://github.com/emqx/ecql.git", {tag, "v0.5.2"}}},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_cassandra]} {apps, [emqx_bridge_cassandra]}

View File

@ -1,10 +1,12 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {clickhouse, {git, "https://github.com/emqx/clickhouse-client-erl", {tag, "0.3.1"}}} {deps, [
, {emqx_connector, {path, "../../apps/emqx_connector"}} {clickhouse, {git, "https://github.com/emqx/clickhouse-client-erl", {tag, "0.3.1"}}},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_clickhouse]} {apps, [emqx_bridge_clickhouse]}

View File

@ -1,14 +1,16 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}} {deps, [
, {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}} {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}},
, {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}} {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}},
, {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}} {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}},
, {snappyer, "1.2.9"} {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}},
, {emqx_connector, {path, "../../apps/emqx_connector"}} {snappyer, "1.2.9"},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_confluent]} {apps, [emqx_bridge_confluent]}

View File

@ -1,10 +1,12 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}} {deps, [
, {emqx_connector, {path, "../../apps/emqx_connector"}} {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_dynamo]} {apps, [emqx_bridge_dynamo]}

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [ {erl_opts, [
warn_unused_vars, warn_unused_vars,
warn_shadow_vars, warn_shadow_vars,

View File

@ -1,12 +1,12 @@
{erl_opts, [ %% -*- mode: erlang; -*-
debug_info
]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx_connector, {path, "../../apps/emqx_connector"}}, {emqx_connector, {path, "../../apps/emqx_connector"}},
{emqx_resource, {path, "../../apps/emqx_resource"}}, {emqx_resource, {path, "../../apps/emqx_resource"}},
{emqx_bridge, {path, "../../apps/emqx_bridge"}}, {emqx_bridge, {path, "../../apps/emqx_bridge"}},
{greptimedb, {git, "https://github.com/GreptimeTeam/greptimedb-client-erl", {tag, "v0.1.6"}}} {greptimedb, {git, "https://github.com/GreptimeTeam/greptimedb-client-erl", {tag, "v0.1.6"}}}
]}. ]}.
{plugins, [rebar3_path_deps]}. {plugins, [rebar3_path_deps]}.
{project_plugins, [erlfmt]}. {project_plugins, [erlfmt]}.

View File

@ -1,9 +1,11 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{hstreamdb_erl, {git, "https://github.com/hstreamdb/hstreamdb_erl.git", {tag, "0.4.5+v0.16.1"}}}, {hstreamdb_erl,
{emqx, {path, "../../apps/emqx"}}, {git, "https://github.com/hstreamdb/hstreamdb_erl.git", {tag, "0.4.5+v0.16.1"}}},
{emqx_utils, {path, "../../apps/emqx_utils"}} {emqx, {path, "../../apps/emqx"}},
{emqx_utils, {path, "../../apps/emqx_utils"}}
]}. ]}.
{shell, [ {shell, [

View File

@ -1,9 +1,11 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} {deps, [
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_http]} {apps, [emqx_bridge_http]}

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [

View File

@ -5,11 +5,11 @@
]}. ]}.
{deps, [ {deps, [
{emqx, {path, "../../apps/emqx"}}, {emqx, {path, "../../apps/emqx"}},
{emqx_connector, {path, "../../apps/emqx_connector"}}, {emqx_connector, {path, "../../apps/emqx_connector"}},
{emqx_resource, {path, "../../apps/emqx_resource"}}, {emqx_resource, {path, "../../apps/emqx_resource"}},
{emqx_bridge, {path, "../../apps/emqx_bridge"}}, {emqx_bridge, {path, "../../apps/emqx_bridge"}},
{emqx_bridge_http, {path, "../emqx_bridge_http"}} {emqx_bridge_http, {path, "../emqx_bridge_http"}}
]}. ]}.
{plugins, [rebar3_path_deps]}. {plugins, [rebar3_path_deps]}.
{project_plugins, [erlfmt]}. {project_plugins, [erlfmt]}.

View File

@ -1,14 +1,16 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}} {deps, [
, {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}} {wolff, {git, "https://github.com/kafka4beam/wolff.git", {tag, "1.9.1"}}},
, {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}} {kafka_protocol, {git, "https://github.com/kafka4beam/kafka_protocol.git", {tag, "4.1.3"}}},
, {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}} {brod_gssapi, {git, "https://github.com/kafka4beam/brod_gssapi.git", {tag, "v0.1.1"}}},
, {snappyer, "1.2.9"} {brod, {git, "https://github.com/kafka4beam/brod.git", {tag, "3.16.8"}}},
, {emqx_connector, {path, "../../apps/emqx_connector"}} {snappyer, "1.2.9"},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_kafka]} {apps, [emqx_bridge_kafka]}

View File

@ -1,10 +1,12 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}} {deps, [
, {emqx_connector, {path, "../../apps/emqx_connector"}} {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_kinesis]} {apps, [emqx_bridge_kinesis]}

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [

View File

@ -1,10 +1,12 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} {deps, [
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
, {emqx_mongodb, {path, "../../apps/emqx_mongodb"}} {emqx_bridge, {path, "../../apps/emqx_bridge"}},
]}. {emqx_mongodb, {path, "../../apps/emqx_mongodb"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_mongodb]} {apps, [emqx_bridge_mongodb]}

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{deps, [ {deps, [
{emqx, {path, "../../apps/emqx"}} {emqx, {path, "../../apps/emqx"}}
]}. ]}.

View File

@ -1,10 +1,12 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} {deps, [
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
, {emqx_mysql, {path, "../../apps/emqx_mysql"}} {emqx_bridge, {path, "../../apps/emqx_bridge"}},
]}. {emqx_mysql, {path, "../../apps/emqx_mysql"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_mysql]} {apps, [emqx_bridge_mysql]}

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [

View File

@ -1,13 +1,14 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx_oracle, {path, "../../apps/emqx_oracle"}} {deps, [
, {emqx_connector, {path, "../../apps/emqx_connector"}} {emqx_oracle, {path, "../../apps/emqx_oracle"}},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
% {config, "config/sys.config"}, % {config, "config/sys.config"},
{apps, [emqx_bridge_oracle]} {apps, [emqx_bridge_oracle]}
]}. ]}.

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [

View File

@ -1,32 +1,32 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
%% The following two are dependencies of rabbit_common %% The following two are dependencies of rabbit_common
{thoas, {git, "https://github.com/emqx/thoas.git", {tag, "v1.0.0"}}} {thoas, {git, "https://github.com/emqx/thoas.git", {tag, "v1.0.0"}}},
, {credentials_obfuscation, {git, "https://github.com/emqx/credentials-obfuscation.git", {tag, "v3.2.0"}}} {credentials_obfuscation,
%% The v3.11.13.2 (v3.11.13_with_app_src branch), employed in the next two dependencies, {git, "https://github.com/emqx/credentials-obfuscation.git", {tag, "v3.2.0"}}},
%% represents a fork of the official RabbitMQ v3.11.13 tag. This fork diverges %% The v3.11.13.2 (v3.11.13_with_app_src branch), employed in the next two dependencies,
%% from the official version as it includes app and hrl files %% represents a fork of the official RabbitMQ v3.11.13 tag. This fork diverges
%% generated by make files in subdirectories deps/rabbit_common and %% from the official version as it includes app and hrl files
%% deps/amqp_client (app files are also relocated from the ebin to the src %% generated by make files in subdirectories deps/rabbit_common and
%% directory). This modification ensures compatibility with rebar3, as %% deps/amqp_client (app files are also relocated from the ebin to the src
%% rabbit_common and amqp_client utilize the erlang.mk build tool. %% directory). This modification ensures compatibility with rebar3, as
%% Similar changes are probably needed when upgrading to newer versions %% rabbit_common and amqp_client utilize the erlang.mk build tool.
%% of rabbit_common and amqp_client. There are hex packages for rabbit_common and %% Similar changes are probably needed when upgrading to newer versions
%% amqp_client, but they are not used here as we don't want to depend on %% of rabbit_common and amqp_client. There are hex packages for rabbit_common and
%% packages that we don't have control over. %% amqp_client, but they are not used here as we don't want to depend on
, {rabbit_common, {git_subdir, %% packages that we don't have control over.
"https://github.com/emqx/rabbitmq-server.git", {rabbit_common,
{tag, "v3.11.13.2"}, {git_subdir, "https://github.com/emqx/rabbitmq-server.git", {tag, "v3.11.13.2"},
"deps/rabbit_common"}} "deps/rabbit_common"}},
, {amqp_client, {git_subdir, {amqp_client,
"https://github.com/emqx/rabbitmq-server.git", {git_subdir, "https://github.com/emqx/rabbitmq-server.git", {tag, "v3.11.13.2"},
{tag, "v3.11.13.2"}, "deps/amqp_client"}},
"deps/amqp_client"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_connector, {path, "../../apps/emqx_connector"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_bridge, {path, "../../apps/emqx_bridge"}}
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} ]}.
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_rabbitmq]} {apps, [emqx_bridge_rabbitmq]}

View File

@ -1,10 +1,12 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} {deps, [
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
, {emqx_redis, {path, "../../apps/emqx_redis"}} {emqx_bridge, {path, "../../apps/emqx_bridge"}},
]}. {emqx_redis, {path, "../../apps/emqx_redis"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_redis]} {apps, [emqx_bridge_redis]}

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [

View File

@ -1,9 +1,11 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} {deps, [
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.
{shell, [ {shell, [
{apps, [emqx_bridge_sqlserver]} {apps, [emqx_bridge_sqlserver]}

View File

@ -1,6 +1,8 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} {deps, [
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {emqx_bridge, {path, "../../apps/emqx_bridge"}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {emqx_bridge, {path, "../../apps/emqx_bridge"}}
]}.

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [

View File

@ -1,2 +1,4 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, []}. {deps, []}.

View File

@ -2,5 +2,5 @@
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx_dashboard, {path, "../../apps/emqx_dashboard"}} {emqx_dashboard, {path, "../../apps/emqx_dashboard"}}
]}. ]}.

View File

@ -2,7 +2,7 @@
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx_ldap, {path, "../../apps/emqx_ldap"}}, {emqx_ldap, {path, "../../apps/emqx_ldap"}},
{emqx_dashboard, {path, "../../apps/emqx_dashboard"}}, {emqx_dashboard, {path, "../../apps/emqx_dashboard"}},
{esaml, {git, "https://github.com/emqx/esaml", {tag, "v1.1.3"}}} {esaml, {git, "https://github.com/emqx/esaml", {tag, "v1.1.3"}}}
]}. ]}.

View File

@ -1,3 +1,3 @@
%% -*- mode:erlang -*- %% -*- mode:erlang -*-
{deps,
[{emqx_utils, {path, "../emqx_utils"}}]}. {deps, [{emqx_utils, {path, "../emqx_utils"}}]}.

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, []}. {deps, []}.

View File

@ -1,2 +1,4 @@
%% -*- mode: erlang; -*-
{deps, [{emqx, {path, "../../apps/emqx"}}]}. {deps, [{emqx, {path, "../../apps/emqx"}}]}.
{project_plugins, [erlfmt]}. {project_plugins, [erlfmt]}.

View File

@ -1,4 +1,5 @@
%%-*- mode: erlang -*- %%-*- mode: erlang -*-
{plugins, [ {plugins, [
rebar3_proper, rebar3_proper,
{grpc_plugin, {git, "https://github.com/HJianBo/grpc_plugin", {tag, "v0.10.2"}}} {grpc_plugin, {git, "https://github.com/HJianBo/grpc_plugin", {tag, "v0.10.2"}}}

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},

View File

@ -509,7 +509,7 @@ codestr(400) -> 'BAD_REQUEST';
codestr(404) -> 'RESOURCE_NOT_FOUND'; codestr(404) -> 'RESOURCE_NOT_FOUND';
codestr(405) -> 'METHOD_NOT_ALLOWED'; codestr(405) -> 'METHOD_NOT_ALLOWED';
codestr(409) -> 'NOT_SUPPORT'; codestr(409) -> 'NOT_SUPPORT';
codestr(500) -> 'UNKNOW_ERROR'; codestr(500) -> 'UNKNOWN_ERROR';
codestr(501) -> 'NOT_IMPLEMENTED'. codestr(501) -> 'NOT_IMPLEMENTED'.
fmtstr(Fmt, Args) -> fmtstr(Fmt, Args) ->

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},

View File

@ -1,4 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../../apps/emqx"}}, {emqx, {path, "../../apps/emqx"}},

View File

@ -1,5 +1,7 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../../apps/emqx"}}, {emqx, {path, "../../apps/emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},

View File

@ -1,5 +1,7 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx, {path, "../../apps/emqx"}}, {deps, [
{emqx_gateway, {path, "../../apps/emqx_gateway"}} {emqx, {path, "../../apps/emqx"}},
]}. {emqx_gateway, {path, "../../apps/emqx_gateway"}}
]}.

View File

@ -1,4 +1,7 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx, {path, "../../apps/emqx"}}, {deps, [
{emqx_gateway, {path, "../../apps/emqx_gateway"}} {emqx, {path, "../../apps/emqx"}},
]}. {emqx_gateway, {path, "../../apps/emqx_gateway"}}
]}.

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{deps, [ {deps, [
{jesse, "1.7.0"}, {jesse, "1.7.0"},
{emqx, {path, "../../apps/emqx"}}, {emqx, {path, "../../apps/emqx"}},

View File

@ -1,7 +1,8 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../../apps/emqx"}}, {emqx, {path, "../../apps/emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},
{emqx_gateway, {path, "../../apps/emqx_gateway"}} {emqx_gateway, {path, "../../apps/emqx_gateway"}}
]}. ]}.

View File

@ -797,7 +797,7 @@ test_frame_error(Frame, AssertFun) ->
AssertFun(Sock) AssertFun(Sock)
end). end).
t_rest_clienit_info(_) -> t_rest_clientid_info(_) ->
with_connection(fun(Sock) -> with_connection(fun(Sock) ->
send_connection_frame(Sock, <<"guest">>, <<"guest">>), send_connection_frame(Sock, <<"guest">>, <<"guest">>),
?assertMatch({ok, #stomp_frame{command = <<"CONNECTED">>}}, recv_a_frame(Sock)), ?assertMatch({ok, #stomp_frame{command = <<"CONNECTED">>}}, recv_a_frame(Sock)),

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},

View File

@ -2,6 +2,6 @@
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx_connector, {path, "../../apps/emqx_connector"}}, {emqx_connector, {path, "../../apps/emqx_connector"}},
{emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_resource, {path, "../../apps/emqx_resource"}}
]}. ]}.

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{deps, [ {deps, [
{emqx, {path, "../../apps/emqx"}}, {emqx, {path, "../../apps/emqx"}},
{emqx_utils, {path, "../emqx_utils"}} {emqx_utils, {path, "../emqx_utils"}}

View File

@ -221,7 +221,7 @@ schema("/clients/kickout/bulk") ->
tags => ?TAGS, tags => ?TAGS,
'requestBody' => emqx_dashboard_swagger:schema_with_example( 'requestBody' => emqx_dashboard_swagger:schema_with_example(
hoconsc:array(binary()), hoconsc:array(binary()),
["emqx_clienid_985bb09d", "emqx_clientid_211cc01c"] ["emqx_clientid_985bb09d", "emqx_clientid_211cc01c"]
), ),
responses => #{ responses => #{
204 => <<"Kick out clients successfully">> 204 => <<"Kick out clients successfully">>
@ -452,7 +452,7 @@ fields(client) ->
{is_bridge, {is_bridge,
hoconsc:mk(boolean(), #{ hoconsc:mk(boolean(), #{
desc => desc =>
<<"Indicates whether the client is connectedvia bridge">> <<"Indicates whether the client is connected via bridge">>
})}, })},
{keepalive, {keepalive,
hoconsc:mk(integer(), #{ hoconsc:mk(integer(), #{
@ -605,7 +605,7 @@ kickout_clients(post, #{body := ClientIDs}) ->
{204}; {204};
{error, Reason} -> {error, Reason} ->
Message = list_to_binary(io_lib:format("~p", [Reason])), Message = list_to_binary(io_lib:format("~p", [Reason])),
{500, #{code => <<"UNKNOW_ERROR">>, message => Message}} {500, #{code => <<"UNKNOWN_ERROR">>, message => Message}}
end. end.
client(get, #{bindings := Bindings}) -> client(get, #{bindings := Bindings}) ->
@ -660,7 +660,7 @@ set_keepalive(put, #{bindings := #{clientid := ClientID}, body := Body}) ->
case emqx_mgmt:set_keepalive(ClientID, Interval) of case emqx_mgmt:set_keepalive(ClientID, Interval) of
ok -> lookup(#{clientid => ClientID}); ok -> lookup(#{clientid => ClientID});
{error, not_found} -> {404, ?CLIENTID_NOT_FOUND}; {error, not_found} -> {404, ?CLIENTID_NOT_FOUND};
{error, Reason} -> {400, #{code => 'PARAMS_ERROR', message => Reason}} {error, Reason} -> {400, #{code => 'PARAM_ERROR', message => Reason}}
end end
end. end.
@ -728,7 +728,7 @@ get_authz_cache(#{clientid := ClientID}) ->
{404, ?CLIENTID_NOT_FOUND}; {404, ?CLIENTID_NOT_FOUND};
{error, Reason} -> {error, Reason} ->
Message = list_to_binary(io_lib:format("~p", [Reason])), Message = list_to_binary(io_lib:format("~p", [Reason])),
{500, #{code => <<"UNKNOW_ERROR">>, message => Message}}; {500, #{code => <<"UNKNOWN_ERROR">>, message => Message}};
Caches -> Caches ->
Response = [format_authz_cache(Cache) || Cache <- Caches], Response = [format_authz_cache(Cache) || Cache <- Caches],
{200, Response} {200, Response}
@ -742,7 +742,7 @@ clean_authz_cache(#{clientid := ClientID}) ->
{404, ?CLIENTID_NOT_FOUND}; {404, ?CLIENTID_NOT_FOUND};
{error, Reason} -> {error, Reason} ->
Message = list_to_binary(io_lib:format("~p", [Reason])), Message = list_to_binary(io_lib:format("~p", [Reason])),
{500, #{code => <<"UNKNOW_ERROR">>, message => Message}} {500, #{code => <<"UNKNOWN_ERROR">>, message => Message}}
end. end.
subscribe(#{clientid := ClientID, topic := Topic} = Sub) -> subscribe(#{clientid := ClientID, topic := Topic} = Sub) ->
@ -752,7 +752,7 @@ subscribe(#{clientid := ClientID, topic := Topic} = Sub) ->
{404, ?CLIENTID_NOT_FOUND}; {404, ?CLIENTID_NOT_FOUND};
{error, Reason} -> {error, Reason} ->
Message = list_to_binary(io_lib:format("~p", [Reason])), Message = list_to_binary(io_lib:format("~p", [Reason])),
{500, #{code => <<"UNKNOW_ERROR">>, message => Message}}; {500, #{code => <<"UNKNOWN_ERROR">>, message => Message}};
{ok, SubInfo} -> {ok, SubInfo} ->
{200, SubInfo} {200, SubInfo}
end. end.

View File

@ -419,7 +419,7 @@ do_publish(Key = {Ts, _Id}, Now, Acc) when Ts =< Now ->
ignore_delayed_message_publish, ignore_delayed_message_publish,
#{ #{
reason => "client is banned", reason => "client is banned",
clienid => Msg#message.from clientid => Msg#message.from
} }
), ),
ok ok

View File

@ -1,7 +1,7 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{application, emqx_modules, [ {application, emqx_modules, [
{description, "EMQX Modules"}, {description, "EMQX Modules"},
{vsn, "5.0.24"}, {vsn, "5.0.25"},
{modules, []}, {modules, []},
{applications, [kernel, stdlib, emqx, emqx_ctl, observer_cli]}, {applications, [kernel, stdlib, emqx, emqx_ctl, observer_cli]},
{mod, {emqx_modules_app, []}}, {mod, {emqx_modules_app, []}},

View File

@ -1,7 +1,8 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {emqx_connector, {path, "../../apps/emqx_connector"}} {deps, [
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
, {mongodb, {git, "https://github.com/emqx/mongodb-erlang", {tag, "v3.0.22"}}} {emqx_resource, {path, "../../apps/emqx_resource"}},
]}. {mongodb, {git, "https://github.com/emqx/mongodb-erlang", {tag, "v3.0.22"}}}
]}.

View File

@ -2,8 +2,8 @@
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
%% NOTE: mind ecpool version when updating eredis_cluster version %% NOTE: mind ecpool version when updating eredis_cluster version
{mysql, {git, "https://github.com/emqx/mysql-otp", {tag, "1.7.4.1"}}}, {mysql, {git, "https://github.com/emqx/mysql-otp", {tag, "1.7.4.1"}}},
{emqx_connector, {path, "../../apps/emqx_connector"}}, {emqx_connector, {path, "../../apps/emqx_connector"}},
{emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_resource, {path, "../../apps/emqx_resource"}}
]}. ]}.

View File

@ -1,2 +1,4 @@
%% -*- mode: erlang; -*-
{deps, [{emqx, {path, "../../apps/emqx"}}]}. {deps, [{emqx, {path, "../../apps/emqx"}}]}.
{project_plugins, [erlfmt]}. {project_plugins, [erlfmt]}.

View File

@ -1,16 +1,26 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{deps, {deps, [
[{emqx, {path, "../emqx"}} {emqx, {path, "../emqx"}},
%% trace %% trace
, {opentelemetry_api, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry_api"}} {opentelemetry_api,
, {opentelemetry, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry"}} {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"},
"apps/opentelemetry_api"}},
{opentelemetry,
{git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"},
"apps/opentelemetry"}},
%% logs, metrics %% logs, metrics
, {opentelemetry_experimental, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry_experimental"}} {opentelemetry_experimental,
, {opentelemetry_api_experimental, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry_api_experimental"}} {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"},
"apps/opentelemetry_experimental"}},
{opentelemetry_api_experimental,
{git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"},
"apps/opentelemetry_api_experimental"}},
%% export %% export
, {opentelemetry_exporter, {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"}, "apps/opentelemetry_exporter"}} {opentelemetry_exporter,
]}. {git_subdir, "https://github.com/emqx/opentelemetry-erlang", {tag, "v1.4.7-emqx"},
"apps/opentelemetry_exporter"}}
]}.
{edoc_opts, [{preprocess, true}]}. {edoc_opts, [{preprocess, true}]}.
{erl_opts, [ {erl_opts, [

View File

@ -1,7 +1,8 @@
%% -*- mode: erlang; -*- %% -*- mode: erlang; -*-
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {jamdb_oracle, {git, "https://github.com/emqx/jamdb_oracle", {tag, "0.4.9.5"}}} {deps, [
, {emqx_connector, {path, "../../apps/emqx_connector"}} {jamdb_oracle, {git, "https://github.com/emqx/jamdb_oracle", {tag, "0.4.9.5"}}},
, {emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_connector, {path, "../../apps/emqx_connector"}},
]}. {emqx_resource, {path, "../../apps/emqx_resource"}}
]}.

View File

@ -2,7 +2,7 @@
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{epgsql, {git, "https://github.com/emqx/epgsql", {tag, "4.7.1.1"}}}, {epgsql, {git, "https://github.com/emqx/epgsql", {tag, "4.7.1.1"}}},
{emqx_connector, {path, "../../apps/emqx_connector"}}, {emqx_connector, {path, "../../apps/emqx_connector"}},
{emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_resource, {path, "../../apps/emqx_resource"}}
]}. ]}.

View File

@ -2,8 +2,8 @@
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
%% NOTE: mind ecpool version when updating eredis_cluster version %% NOTE: mind ecpool version when updating eredis_cluster version
{eredis_cluster, {git, "https://github.com/emqx/eredis_cluster", {tag, "0.8.3"}}}, {eredis_cluster, {git, "https://github.com/emqx/eredis_cluster", {tag, "0.8.3"}}},
{emqx_connector, {path, "../../apps/emqx_connector"}}, {emqx_connector, {path, "../../apps/emqx_connector"}},
{emqx_resource, {path, "../../apps/emqx_resource"}} {emqx_resource, {path, "../../apps/emqx_resource"}}
]}. ]}.

View File

@ -1,3 +1,5 @@
%% -*- mode: erlang; -*-
{deps, [ {deps, [
{emqx, {path, "../../apps/emqx"}}, {emqx, {path, "../../apps/emqx"}},
{erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}}, {erlcloud, {git, "https://github.com/emqx/erlcloud", {tag, "3.7.0.3"}}},

View File

@ -2,14 +2,14 @@
{erl_opts, [debug_info]}. {erl_opts, [debug_info]}.
{deps, [ {deps, [
{emqx, {path, "../emqx"}}, {emqx, {path, "../emqx"}},
{emqx_utils, {path, "../emqx_utils"}}, {emqx_utils, {path, "../emqx_utils"}},
{emqx_rule_engine, {path, "../emqx_rule_engine"}}, {emqx_rule_engine, {path, "../emqx_rule_engine"}},
{erlavro, {git, "https://github.com/klarna/erlavro.git", {tag, "2.9.8"}}}, {erlavro, {git, "https://github.com/klarna/erlavro.git", {tag, "2.9.8"}}},
{gpb, "4.19.9"} {gpb, "4.19.9"}
]}. ]}.
{shell, [ {shell, [
% {config, "config/sys.config"}, % {config, "config/sys.config"},
{apps, [emqx_schema_registry]} {apps, [emqx_schema_registry]}
]}. ]}.

View File

@ -12,7 +12,8 @@
main(Args) -> main(Args) ->
case os:type() of case os:type() of
{win32, nt} -> ok; {win32, nt} ->
ok;
_nix -> _nix ->
case init:get_argument(start_epmd) of case init:get_argument(start_epmd) of
{ok, [["true"]]} -> {ok, [["true"]]} ->
@ -44,22 +45,31 @@ do(Args) ->
ok = do_with_halt(Args, "mnesia_dir", fun create_mnesia_dir/2), ok = do_with_halt(Args, "mnesia_dir", fun create_mnesia_dir/2),
ok = do_with_halt(Args, "chkconfig", fun("-config", X) -> chkconfig(X) end), ok = do_with_halt(Args, "chkconfig", fun("-config", X) -> chkconfig(X) end),
ok = do_with_halt(Args, "chkconfig", fun chkconfig/1), ok = do_with_halt(Args, "chkconfig", fun chkconfig/1),
Args1 = do_with_ret(Args, "-name", Args1 = do_with_ret(
fun(TargetName) -> Args,
ThisNode = this_node_name(longnames, TargetName), "-name",
{ok, _} = net_kernel:start([ThisNode, longnames]), fun(TargetName) ->
put(target_node, nodename(TargetName)) ThisNode = this_node_name(longnames, TargetName),
end), {ok, _} = net_kernel:start([ThisNode, longnames]),
Args2 = do_with_ret(Args1, "-sname", put(target_node, nodename(TargetName))
fun(TargetName) -> end
ThisNode = this_node_name(shortnames, TargetName), ),
{ok, _} = net_kernel:start([ThisNode, shortnames]), Args2 = do_with_ret(
put(target_node, nodename(TargetName)) Args1,
end), "-sname",
RestArgs = do_with_ret(Args2, "-setcookie", fun(TargetName) ->
fun(Cookie) -> ThisNode = this_node_name(shortnames, TargetName),
erlang:set_cookie(node(), list_to_atom(Cookie)) {ok, _} = net_kernel:start([ThisNode, shortnames]),
end), put(target_node, nodename(TargetName))
end
),
RestArgs = do_with_ret(
Args2,
"-setcookie",
fun(Cookie) ->
erlang:set_cookie(node(), list_to_atom(Cookie))
end
),
[application:start(App) || App <- [crypto, public_key, ssl]], [application:start(App) || App <- [crypto, public_key, ssl]],
TargetNode = get(target_node), TargetNode = get(target_node),
@ -95,9 +105,11 @@ do(Args) ->
ok -> ok ->
ok; ok;
{badrpc, timeout} -> {badrpc, timeout} ->
io:format("EMQX is still shutting down, it failed to stop gracefully " io:format(
"within the configured timeout of: ~ps\n", "EMQX is still shutting down, it failed to stop gracefully "
[erlang:convert_time_unit(?SHUTDOWN_TIMEOUT_MS, millisecond, second)]), "within the configured timeout of: ~ps\n",
[erlang:convert_time_unit(?SHUTDOWN_TIMEOUT_MS, millisecond, second)]
),
halt(1); halt(1);
{badrpc, nodedown} -> {badrpc, nodedown} ->
%% nodetool commands are always executed after a ping %% nodetool commands are always executed after a ping
@ -106,8 +118,15 @@ do(Args) ->
ok ok
end; end;
["rpc", Module, Function | RpcArgs] -> ["rpc", Module, Function | RpcArgs] ->
case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), case
[RpcArgs], 60000) of rpc:call(
TargetNode,
list_to_atom(Module),
list_to_atom(Function),
[RpcArgs],
60000
)
of
ok -> ok ->
ok; ok;
{error, cmd_not_found} -> {error, cmd_not_found} ->
@ -122,7 +141,11 @@ do(Args) ->
halt(1) halt(1)
end; end;
["rpc_infinity", Module, Function | RpcArgs] -> ["rpc_infinity", Module, Function | RpcArgs] ->
case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), [RpcArgs], infinity) of case
rpc:call(
TargetNode, list_to_atom(Module), list_to_atom(Function), [RpcArgs], infinity
)
of
ok -> ok ->
ok; ok;
{badrpc, Reason} -> {badrpc, Reason} ->
@ -132,8 +155,15 @@ do(Args) ->
halt(1) halt(1)
end; end;
["rpcterms", Module, Function | ArgsAsString] -> ["rpcterms", Module, Function | ArgsAsString] ->
case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), case
consult(lists:flatten(ArgsAsString)), 60000) of rpc:call(
TargetNode,
list_to_atom(Module),
list_to_atom(Function),
consult(lists:flatten(ArgsAsString)),
60000
)
of
{badrpc, Reason} -> {badrpc, Reason} ->
io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]), io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]),
halt(1); halt(1);
@ -153,7 +183,9 @@ do(Args) ->
end; end;
Other -> Other ->
io:format("Other: ~p~n", [Other]), io:format("Other: ~p~n", [Other]),
io:format("Usage: nodetool chkconfig|getpid|ping|stop|rpc|rpc_infinity|rpcterms|eval|cold_eval [Terms] [RPC]\n") io:format(
"Usage: nodetool chkconfig|getpid|ping|stop|rpc|rpc_infinity|rpcterms|eval|cold_eval [Terms] [RPC]\n"
)
end, end,
net_kernel:stop(). net_kernel:stop().
@ -173,22 +205,22 @@ parse_eval_args(Args) ->
% shells may process args into more than one, and end up stripping % shells may process args into more than one, and end up stripping
% spaces, so this converts all of that to a single string to parse % spaces, so this converts all of that to a single string to parse
String = binary_to_list( String = binary_to_list(
list_to_binary( list_to_binary(
join(Args," ") join(Args, " ")
) )
), ),
% then just as a convenience to users, if they forgot a trailing % then just as a convenience to users, if they forgot a trailing
% '.' add it for them. % '.' add it for them.
Normalized = Normalized =
case lists:reverse(String) of case lists:reverse(String) of
[$. | _] -> String; [$. | _] -> String;
R -> lists:reverse([$. | R]) R -> lists:reverse([$. | R])
end, end,
% then scan and parse the string % then scan and parse the string
{ok, Scanned, _} = erl_scan:string(Normalized), {ok, Scanned, _} = erl_scan:string(Normalized),
{ok, Parsed } = erl_parse:parse_exprs(Scanned), {ok, Parsed} = erl_parse:parse_exprs(Scanned),
Parsed. Parsed.
do_with_ret(Args, Name, Handler) -> do_with_ret(Args, Name, Handler) ->
@ -207,7 +239,8 @@ do_with_halt(Args, Name, Handler) ->
false -> false ->
ok; ok;
{Args1, _Rest} -> {Args1, _Rest} ->
erlang:apply(Handler, Args1), %% should halt %% should halt
erlang:apply(Handler, Args1),
io:format(standard_error, "~s handler did not halt", [Name]), io:format(standard_error, "~s handler did not halt", [Name]),
halt(?LINE) halt(?LINE)
end. end.
@ -218,7 +251,9 @@ take_args(Args, OptName, 0) ->
take_args(Args, OptName, OptArity) -> take_args(Args, OptName, OptArity) ->
take_args(Args, OptName, OptArity, _Scanned = []). take_args(Args, OptName, OptArity, _Scanned = []).
take_args([], _, _, _) -> false; %% no such option %% no such option
take_args([], _, _, _) ->
false;
take_args([Name | Rest], Name, Arity, Scanned) -> take_args([Name | Rest], Name, Arity, Scanned) ->
length(Rest) >= Arity orelse error({not_enough_args_for, Name}), length(Rest) >= Arity orelse error({not_enough_args_for, Name}),
{Result, Tail} = lists:split(Arity, Rest), {Result, Tail} = lists:split(Arity, Rest),
@ -282,16 +317,24 @@ chkconfig(File) ->
{error, Problems} -> {error, Problems} ->
lists:foreach(fun print_issue/1, Problems), lists:foreach(fun print_issue/1, Problems),
%% halt(1) if any problems were errors %% halt(1) if any problems were errors
halt(case [x || {error, _} <- Problems] of halt(
[] -> 0; case [x || {error, _} <- Problems] of
_ -> 1 [] -> 0;
end) _ -> 1
end
)
end; end;
{error, {Line, Mod, Term}} -> {error, {Line, Mod, Term}} ->
io:format(standard_error, ["Error on line ", file:format_error({Line, Mod, Term}), "\n"], []), io:format(
standard_error, ["Error on line ", file:format_error({Line, Mod, Term}), "\n"], []
),
halt(1); halt(1);
{error, Error} -> {error, Error} ->
io:format(standard_error, ["Error reading config file: ", File, " ", file:format_error(Error), "\n"], []), io:format(
standard_error,
["Error reading config file: ", File, " ", file:format_error(Error), "\n"],
[]
),
halt(1) halt(1)
end. end.
@ -304,7 +347,8 @@ check_license(Config) ->
%% start but will not be able to receive connections due to connection limits. %% start but will not be able to receive connections due to connection limits.
%% It may receive license updates from the cluster further. %% It may receive license updates from the cluster further.
case emqx_license:read_license(Config) of case emqx_license:read_license(Config) of
{ok, _} -> ok; {ok, _} ->
ok;
{error, Error} -> {error, Error} ->
io:format(standard_error, "Error reading license: ~p~n", [Error]), io:format(standard_error, "Error reading license: ~p~n", [Error]),
halt(1) halt(1)
@ -315,7 +359,7 @@ check_license(Config) ->
%% %%
consult(Str) when is_list(Str) -> consult(Str) when is_list(Str) ->
consult([], Str, []); consult([], Str, []);
consult(Bin) when is_binary(Bin)-> consult(Bin) when is_binary(Bin) ->
consult([], binary_to_list(Bin), []). consult([], binary_to_list(Bin), []).
consult(Cont, Str, Acc) -> consult(Cont, Str, Acc) ->
@ -349,7 +393,7 @@ validate([Terms]) ->
%% Some initial and basic checks for the app.config file %% Some initial and basic checks for the app.config file
get_validation_funs() -> get_validation_funs() ->
[ ]. [].
print_issue({warning, Warning}) -> print_issue({warning, Warning}) ->
io:format(standard_error, "Warning in app.config: ~s~n", [Warning]); io:format(standard_error, "Warning in app.config: ~s~n", [Warning]);
@ -363,7 +407,7 @@ print_issue({error, Error}) ->
%% for most unicode use cases anyway. %% for most unicode use cases anyway.
join([], Sep) when is_list(Sep) -> join([], Sep) when is_list(Sep) ->
[]; [];
join([H|T], Sep) -> join([H | T], Sep) ->
H ++ lists:append([Sep ++ X || X <- T]). H ++ lists:append([Sep ++ X || X <- T]).
add_libs_dir() -> add_libs_dir() ->
@ -375,9 +419,11 @@ add_libs_dir() ->
Release = lists:keyfind(CurrentVsn, 3, Releases), Release = lists:keyfind(CurrentVsn, 3, Releases),
{release, _Name, _AppVsn, _ErtsVsn, Libs, _State} = Release, {release, _Name, _AppVsn, _ErtsVsn, Libs, _State} = Release,
lists:foreach( lists:foreach(
fun({Name, Vsn, _}) -> fun({Name, Vsn, _}) ->
add_lib_dir(RootDir, Name, Vsn) add_lib_dir(RootDir, Name, Vsn)
end, Libs); end,
Libs
);
{error, Reason} -> {error, Reason} ->
%% rel file was been deleted by release handler %% rel file was been deleted by release handler
error({failed_to_read_RELEASES_file, RelFile, Reason}) error({failed_to_read_RELEASES_file, RelFile, Reason})
@ -405,7 +451,8 @@ add_lib_dir(RootDir, Name, Vsn) ->
%% See `emqx_gateway_schema:fields(gateway)` %% See `emqx_gateway_schema:fields(gateway)`
is_emqx_application(Name) andalso ensure_application_load(Name), is_emqx_application(Name) andalso ensure_application_load(Name),
ok; ok;
{error, _} -> error(LibDir) {error, _} ->
error(LibDir)
end. end.
is_emqx_application(Name) when is_atom(Name) -> is_emqx_application(Name) when is_atom(Name) ->

View File

@ -11,14 +11,14 @@ This chart bootstraps an emqx deployment on a Kubernetes cluster using the Helm
To install the chart with the release name `my-emqx`: To install the chart with the release name `my-emqx`:
+ From github + From Github
``` ```
$ git clone https://github.com/emqx/emqx.git $ git clone https://github.com/emqx/emqx.git
$ cd emqx/deploy/charts/emqx-enterprise $ cd emqx/deploy/charts/emqx-enterprise
$ helm install my-emqx . $ helm install my-emqx .
``` ```
+ From chart repos + From chart Repos
``` ```
helm repo add emqx https://repos.emqx.io/charts helm repo add emqx https://repos.emqx.io/charts
helm install my-emqx emqx/emqx-enterprise helm install my-emqx emqx/emqx-enterprise
@ -37,85 +37,85 @@ $ helm del my-emqx
The following table lists the configurable parameters of the emqx chart and their default values. The following table lists the configurable parameters of the emqx chart and their default values.
| Parameter | Description | Default Value | | Parameter | Description | Default Value |
|--------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------| |--------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| `replicaCount` | It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 | | `replicaCount` | It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 |
| `image.repository` | EMQX Image name | emqx/emqx-enterprise | | `image.repository` | EMQX Image name | emqx/emqx-enterprise |
| `image.pullPolicy` | The image pull policy | IfNotPresent | | `image.pullPolicy` | The image pull policy | IfNotPresent |
| `image.pullSecrets ` | The image pull secrets | `[]` (does not add image pull secrets to deployed pods) | | `image.pullSecrets ` | The image pull secrets | `[]` (does not add image pull secrets to deployed pods) |
| `serviceAccount.create` | If `true`, create a new service account | `true` | | `serviceAccount.create` | If `true`, create a new service account | `true` |
| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template | | | `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the full-name template | |
| `serviceAccount.annotations` | Annotations to add to the service account | | | `serviceAccount.annotations` | Annotations to add to the service account | |
| `envFromSecret` | The name pull a secret in the same kubernetes namespace which contains values that will be added to the environment | nil | | `envFromSecret` | The name pull a secret in the same Kubernetes namespace which contains values that will be added to the environment | nil |
| `recreatePods` | Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false | | `recreatePods` | Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false |
| `podAnnotations ` | Annotations for pod | `{}` | | `podAnnotations ` | Annotations for pod | `{}` |
| `podManagementPolicy` | To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | `Parallel` | | `podManagementPolicy` | To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | `Parallel` |
| `persistence.enabled` | Enable EMQX persistence using PVC | false | | `persistence.enabled` | Enable EMQX persistence using PVC | false |
| `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) | | `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) |
| `persistence.existingClaim` | EMQX data Persistent Volume existing claim name, evaluated as a template | "" | | `persistence.existingClaim` | EMQX data Persistent Volume existing claim name, evaluated as a template | "" |
| `persistence.accessMode` | PVC Access Mode for EMQX volume | ReadWriteOnce | | `persistence.accessMode` | PVC Access Mode for EMQX volume | ReadWriteOnce |
| `persistence.size` | PVC Storage Request for EMQX volume | 20Mi | | `persistence.size` | PVC Storage Request for EMQX volume | 20Mi |
| `initContainers` | Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | `{}` | | `initContainers` | Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | `{}` |
| `resources` | CPU/Memory resource requests/limits | {} | | `resources` | CPU/Memory resource requests/limits | {} |
| `extraVolumeMounts` | Additional volumeMounts to the default backend container. | [] | | `extraVolumeMounts` | Additional volumeMounts to the default backend container. | [] |
| `extraVolumes` | Additional volumes to the default backend pod.| [] | | `extraVolumes` | Additional volumes to the default backend pod. | [] |
| `nodeSelector` | Node labels for pod assignment | `{}` | | `nodeSelector` | Node labels for pod assignment | `{}` |
| `tolerations` | Toleration labels for pod assignment | `[]` | | `tolerations` | Toleration labels for pod assignment | `[]` |
| `affinity` | Map of node/pod affinities | `{}` | | `affinity` | Map of node/pod affinities | `{}` |
| `service.type` | Kubernetes Service type. | ClusterIP | | `service.type` | Kubernetes Service type. | ClusterIP |
| `service.mqtt` | Port for MQTT. | 1883 | | `service.mqtt` | Port for MQTT. | 1883 |
| `service.mqttssl` | Port for MQTT(SSL). | 8883 | | `service.mqttssl` | Port for MQTT(SSL). | 8883 |
| `service.ws` | Port for WebSocket/HTTP. | 8083 | | `service.ws` | Port for WebSocket/HTTP. | 8083 |
| `service.wss` | Port for WSS/HTTPS. | 8084 | | `service.wss` | Port for WSS/HTTPS. | 8084 |
| `service.dashboard` | Port for dashboard and API. | 18083 | | `service.dashboard` | Port for dashboard and API. | 18083 |
| `service.nodePorts.mqtt` | Kubernetes node port for MQTT. | nil | | `service.nodePorts.mqtt` | Kubernetes node port for MQTT. | nil |
| `service.nodePorts.mqttssl` | Kubernetes node port for MQTT(SSL). | nil | | `service.nodePorts.mqttssl` | Kubernetes node port for MQTT(SSL). | nil |
| `service.nodePorts.ws` | Kubernetes node port for WebSocket/HTTP. | nil | | `service.nodePorts.ws` | Kubernetes node port for WebSocket/HTTP. | nil |
| `service.nodePorts.wss` | Kubernetes node port for WSS/HTTPS. | nil | | `service.nodePorts.wss` | Kubernetes node port for WSS/HTTPS. | nil |
| `service.nodePorts.dashboard` | Kubernetes node port for dashboard. | nil | | `service.nodePorts.dashboard` | Kubernetes node port for dashboard. | nil |
| `service.loadBalancerClass` | The load balancer implementation this Service belongs to | | | `service.loadBalancerClass` | The load balancer implementation this Service belongs to | |
| `service.loadBalancerIP` | loadBalancerIP for Service | nil | | `service.loadBalancerIP` | loadBalancerIP for Service | nil |
| `service.loadBalancerSourceRanges` | Address(es) that are allowed when service is LoadBalancer | [] | | `service.loadBalancerSourceRanges` | Address(es) that are allowed when service is LoadBalancer | [] |
| `service.externalIPs` | ExternalIPs for the service | [] | | `service.externalIPs` | ExternalIPs for the service | [] |
| `service.externalTrafficPolicy` | External Traffic Policy for the service | `Cluster` | `service.externalTrafficPolicy` | External Traffic Policy for the service | `Cluster` |
| `service.annotations` | Service/ServiceMonitor annotations | {}(evaluated as a template) | | `service.annotations` | Service/ServiceMonitor annotations | {}(evaluated as a template) |
| `service.labels` | Service/ServiceMontior labels | {}(evaluated as a template) | | `service.labels` | Service/ServiceMonitor labels | {}(evaluated as a template) |
| `ingress.dashboard.enabled` | Enable ingress for EMQX Dashboard | false | | `ingress.dashboard.enabled` | Enable ingress for EMQX Dashboard | false |
| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | | `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | |
| `ingress.dashboard.path` | Ingress path for EMQX Dashboard | / | | `ingress.dashboard.path` | Ingress path for EMQX Dashboard | / |
| `ingress.dashboard.pathType` | Ingress pathType for EMQX Dashboard | `ImplementationSpecific` | | `ingress.dashboard.pathType` | Ingress pathType for EMQX Dashboard | `ImplementationSpecific` |
| `ingress.dashboard.hosts` | Ingress hosts for EMQX Dashboard | dashboard.emqx.local | | `ingress.dashboard.hosts` | Ingress hosts for EMQX Dashboard | dashboard.emqx.local |
| `ingress.dashboard.tls` | Ingress tls for EMQX Dashboard | [] | | `ingress.dashboard.tls` | Ingress tls for EMQX Dashboard | [] |
| `ingress.dashboard.annotations` | Ingress annotations for EMQX Dashboard | {} | | `ingress.dashboard.annotations` | Ingress annotations for EMQX Dashboard | {} |
| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | | `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | |
| `ingress.mqtt.enabled` | Enable ingress for MQTT | false | | `ingress.mqtt.enabled` | Enable ingress for MQTT | false |
| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | | `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | |
| `ingress.mqtt.path` | Ingress path for MQTT | / | | `ingress.mqtt.path` | Ingress path for MQTT | / |
| `ingress.mqtt.pathType` | Ingress pathType for MQTT | `ImplementationSpecific` | | `ingress.mqtt.pathType` | Ingress pathType for MQTT | `ImplementationSpecific` |
| `ingress.mqtt.hosts` | Ingress hosts for MQTT | mqtt.emqx.local | | `ingress.mqtt.hosts` | Ingress hosts for MQTT | mqtt.emqx.local |
| `ingress.mqtt.tls` | Ingress tls for MQTT | [] | | `ingress.mqtt.tls` | Ingress tls for MQTT | [] |
| `ingress.mqtt.annotations` | Ingress annotations for MQTT | {} | | `ingress.mqtt.annotations` | Ingress annotations for MQTT | {} |
| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | | `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | |
| `metrics.enable` | If set to true, [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) needs to be installed, and emqx_prometheus needs to enable | false | | `metrics.enable` | If set to true, [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) needs to be installed, and emqx_prometheus needs to enable | false |
| `metrics.type` | Now we only supported "prometheus" | "prometheus" | | `metrics.type` | Now we only supported "prometheus" | "prometheus" |
| `ssl.enabled` | Enable SSL support | false | | `ssl.enabled` | Enable SSL support | false |
| `ssl.useExisting` | Use existing certificate or let cert-manager generate one | false | | `ssl.useExisting` | Use existing certificate or let cert-manager generate one | false |
| `ssl.existingName` | Name of existing certificate | emqx-tls | | `ssl.existingName` | Name of existing certificate | emqx-tls |
| `ssl.dnsnames` | DNS name(s) for certificate to be generated | {} | | `ssl.dnsnames` | DNS name(s) for certificate to be generated | {} |
| `ssl.commonName` | Common name for or certificate to be generated | | | `ssl.commonName` | Common name for or certificate to be generated | |
| `ssl.issuer.name` | Issuer name for certificate generation | letsencrypt-dns | | `ssl.issuer.name` | Issuer name for certificate generation | letsencrypt-dns |
| `ssl.issuer.kind` | Issuer kind for certificate generation | ClusterIssuer | | `ssl.issuer.kind` | Issuer kind for certificate generation | ClusterIssuer |
## EMQX specific settings ## EMQX specific settings
The following table lists the configurable [EMQX](https://www.emqx.io/)-specific parameters of the chart and their The following table lists the configurable [EMQX](https://www.emqx.io/)-specific parameters of the chart and their
default values. default values.
Parameter | Description | Default Value | Parameter | Description | Default Value |
--- | --- | --- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|---------------|
`emqxConfig` | Map of [configuration](https://www.emqx.io/docs/en/v5.0/admin/cfg.html) items | `emqxConfig` | Map of [configuration](https://www.emqx.io/docs/en/v5.0/admin/cfg.html) items | |
expressed as [environment variables](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#environment-variables) (prefix `EMQX_` can be omitted) or using the configuration | expressed as [environment variables](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#environment-variables) (prefix `EMQX_` can be omitted) or using the configuration | | |
files [namespaced dotted notation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#syntax) | `nil` | files [namespaced dotted notation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#syntax) | `nil` | |
`emqxLicenseSecretName` | Name of the secret that holds the license information | `nil` | `emqxLicenseSecretName` | Name of the secret that holds the license information | `nil` |
## SSL settings ## SSL settings
`cert-manager` generates secrets with certificate data using the keys `tls.crt` and `tls.key`. The helm chart always mounts those keys as files to `/tmp/ssl/` `cert-manager` generates secrets with certificate data using the keys `tls.crt` and `tls.key`. The helm chart always mounts those keys as files to `/tmp/ssl/`
@ -136,9 +136,8 @@ In order to preserve the original client's IP address, you could change the emqx
EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL: "true" EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL: "true"
``` ```
With haproxy you'd also need the following ingress annotation: With HAProxy you'd also need the following ingress annotation:
``` ```
haproxy-ingress.github.io/proxy-protocol: "v2" haproxy-ingress.github.io/proxy-protocol: "v2"
``` ```

View File

@ -110,14 +110,14 @@ spec:
- name: wss - name: wss
containerPort: {{ .Values.emqxConfig.EMQX_LISTENERS__WSS__DEFAULT__BIND | default 8084 }} containerPort: {{ .Values.emqxConfig.EMQX_LISTENERS__WSS__DEFAULT__BIND | default 8084 }}
- name: dashboard - name: dashboard
containerPort: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTP__BIND | default 18083 }} containerPort: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default 18083 }}
{{- if not (empty .Values.emqxConfig.EMQX_LISTENERS__TCP__INTERNAL__BIND) }} {{- if not (empty .Values.emqxConfig.EMQX_LISTENERS__TCP__INTERNAL__BIND) }}
- name: internalmqtt - name: internalmqtt
containerPort: {{ .Values.emqxConfig.EMQX_LISTENERS__TCP__INTERNAL__BIND }} containerPort: {{ .Values.emqxConfig.EMQX_LISTENERS__TCP__INTERNAL__BIND }}
{{- end }} {{- end }}
{{- if not (empty .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTPS__BIND) }} {{- if not (empty .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTPS__BIND) }}
- name: dashboardtls - name: dashboardtls
containerPort: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTPS__BIND }} containerPort: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTPS__BIND }}
{{- end }} {{- end }}
- name: ekka - name: ekka
containerPort: 4370 containerPort: 4370
@ -152,14 +152,14 @@ spec:
readinessProbe: readinessProbe:
httpGet: httpGet:
path: /status path: /status
port: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTP__BIND | default 18083 }} port: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default 18083 }}
initialDelaySeconds: 10 initialDelaySeconds: 10
periodSeconds: 5 periodSeconds: 5
failureThreshold: 30 failureThreshold: 30
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /status path: /status
port: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENER__HTTP__BIND | default 18083 }} port: {{ .Values.emqxConfig.EMQX_DASHBOARD__LISTENERS__HTTP__BIND | default 18083 }}
initialDelaySeconds: 60 initialDelaySeconds: 60
periodSeconds: 30 periodSeconds: 30
failureThreshold: 10 failureThreshold: 10

View File

@ -11,14 +11,14 @@ This chart bootstraps an emqx deployment on a Kubernetes cluster using the Helm
To install the chart with the release name `my-emqx`: To install the chart with the release name `my-emqx`:
+ From github + From Github
``` ```
$ git clone https://github.com/emqx/emqx.git $ git clone https://github.com/emqx/emqx.git
$ cd emqx/deploy/charts/emqx $ cd emqx/deploy/charts/emqx
$ helm install my-emqx . $ helm install my-emqx .
``` ```
+ From chart repos + From chart Repos
``` ```
helm repo add emqx https://repos.emqx.io/charts helm repo add emqx https://repos.emqx.io/charts
helm install my-emqx emqx/emqx helm install my-emqx emqx/emqx
@ -37,86 +37,86 @@ $ helm del my-emqx
The following table lists the configurable parameters of the emqx chart and their default values. The following table lists the configurable parameters of the emqx chart and their default values.
| Parameter | Description | Default Value | | Parameter | Description | Default Value |
|--------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------| |--------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
| `replicaCount` | It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 | | `replicaCount` | It is recommended to have odd number of nodes in a cluster, otherwise the emqx cluster cannot be automatically healed in case of net-split. | 3 |
| `image.repository` | EMQX Image name | emqx/emqx | | `image.repository` | EMQX Image name | emqx/emqx |
| `image.pullPolicy` | The image pull policy | IfNotPresent | | `image.pullPolicy` | The image pull policy | IfNotPresent |
| `image.pullSecrets ` | The image pull secrets | `[]` (does not add image pull secrets to deployed pods) | | `image.pullSecrets ` | The image pull secrets | `[]` (does not add image pull secrets to deployed pods) |
| `serviceAccount.create` | If `true`, create a new service account | `true` | | `serviceAccount.create` | If `true`, create a new service account | `true` |
| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template | | | `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the full-name template | |
| `serviceAccount.annotations` | Annotations to add to the service account | | | `serviceAccount.annotations` | Annotations to add to the service account | |
| `envFromSecret` | The name pull a secret in the same kubernetes namespace which contains values that will be added to the environment | nil | | `envFromSecret` | The name pull a secret in the same Kubernetes namespace which contains values that will be added to the environment | nil |
| `recreatePods` | Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false | | `recreatePods` | Forces the recreation of pods during upgrades, which can be useful to always apply the most recent configuration. | false |
| `podAnnotations ` | Annotations for pod | `{}` | | `podAnnotations ` | Annotations for pod | `{}` |
| `podManagementPolicy` | To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | `Parallel` | | `podManagementPolicy` | To redeploy a chart with existing PVC(s), the value must be set to Parallel to avoid deadlock | `Parallel` |
| `persistence.enabled` | Enable EMQX persistence using PVC | false | | `persistence.enabled` | Enable EMQX persistence using PVC | false |
| `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) | | `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) |
| `persistence.existingClaim` | EMQX data Persistent Volume existing claim name, evaluated as a template | "" | | `persistence.existingClaim` | EMQX data Persistent Volume existing claim name, evaluated as a template | "" |
| `persistence.accessMode` | PVC Access Mode for EMQX volume | ReadWriteOnce | | `persistence.accessMode` | PVC Access Mode for EMQX volume | ReadWriteOnce |
| `persistence.size` | PVC Storage Request for EMQX volume | 20Mi | | `persistence.size` | PVC Storage Request for EMQX volume | 20Mi |
| `initContainers` | Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | `{}` | | `initContainers` | Containers that run before the creation of EMQX containers. They can contain utilities or setup scripts. | `{}` |
| `resources` | CPU/Memory resource requests/limits | {} | | `resources` | CPU/Memory resource requests/limits | {} |
| `extraVolumeMounts` | Additional volumeMounts to the default backend container. | [] | | `extraVolumeMounts` | Additional volumeMounts to the default backend container. | [] |
| `extraVolumes` | Additional volumes to the default backend pod.| [] | | `extraVolumes` | Additional volumes to the default backend pod. | [] |
| `nodeSelector` | Node labels for pod assignment | `{}` | | `nodeSelector` | Node labels for pod assignment | `{}` |
| `tolerations` | Toleration labels for pod assignment | `[]` | | `tolerations` | Toleration labels for pod assignment | `[]` |
| `affinity` | Map of node/pod affinities | `{}` | | `affinity` | Map of node/pod affinities | `{}` |
| `topologySpreadConstraints` | List of topology spread constraints without labelSelector | `[]` | | `topologySpreadConstraints` | List of topology spread constraints without labelSelector | `[]` |
| `service.type` | Kubernetes Service type. | ClusterIP | | `service.type` | Kubernetes Service type. | ClusterIP |
| `service.mqtt` | Port for MQTT. | 1883 | | `service.mqtt` | Port for MQTT. | 1883 |
| `service.mqttssl` | Port for MQTT(SSL). | 8883 | | `service.mqttssl` | Port for MQTT(SSL). | 8883 |
| `service.ws` | Port for WebSocket/HTTP. | 8083 | | `service.ws` | Port for WebSocket/HTTP. | 8083 |
| `service.wss` | Port for WSS/HTTPS. | 8084 | | `service.wss` | Port for WSS/HTTPS. | 8084 |
| `service.dashboard` | Port for dashboard and API. | 18083 | | `service.dashboard` | Port for dashboard and API. | 18083 |
| `service.nodePorts.mqtt` | Kubernetes node port for MQTT. | nil | | `service.nodePorts.mqtt` | Kubernetes node port for MQTT. | nil |
| `service.nodePorts.mqttssl` | Kubernetes node port for MQTT(SSL). | nil | | `service.nodePorts.mqttssl` | Kubernetes node port for MQTT(SSL). | nil |
| `service.nodePorts.ws` | Kubernetes node port for WebSocket/HTTP. | nil | | `service.nodePorts.ws` | Kubernetes node port for WebSocket/HTTP. | nil |
| `service.nodePorts.wss` | Kubernetes node port for WSS/HTTPS. | nil | | `service.nodePorts.wss` | Kubernetes node port for WSS/HTTPS. | nil |
| `service.nodePorts.dashboard` | Kubernetes node port for dashboard. | nil | | `service.nodePorts.dashboard` | Kubernetes node port for dashboard. | nil |
| `service.loadBalancerClass` | The load balancer implementation this Service belongs to | | | `service.loadBalancerClass` | The load balancer implementation this Service belongs to | |
| `service.loadBalancerIP` | loadBalancerIP for Service | nil | | `service.loadBalancerIP` | loadBalancerIP for Service | nil |
| `service.loadBalancerSourceRanges` | Address(es) that are allowed when service is LoadBalancer | [] | | `service.loadBalancerSourceRanges` | Address(es) that are allowed when service is LoadBalancer | [] |
| `service.externalIPs` | ExternalIPs for the service | [] | | `service.externalIPs` | ExternalIPs for the service | [] |
| `service.externalTrafficPolicy` | External Traffic Policy for the service | `Cluster` | `service.externalTrafficPolicy` | External Traffic Policy for the service | `Cluster` |
| `service.annotations` | Service/ServiceMonitor annotations | {}(evaluated as a template) | | `service.annotations` | Service/ServiceMonitor annotations | {}(evaluated as a template) |
| `service.labels` | Service/ServiceMontior labels | {}(evaluated as a template) | | `service.labels` | Service/ServiceMonitor labels | {}(evaluated as a template) |
| `ingress.dashboard.enabled` | Enable ingress for EMQX Dashboard | false | | `ingress.dashboard.enabled` | Enable ingress for EMQX Dashboard | false |
| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | | `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | |
| `ingress.dashboard.path` | Ingress path for EMQX Dashboard | / | | `ingress.dashboard.path` | Ingress path for EMQX Dashboard | / |
| `ingress.dashboard.pathType` | Ingress pathType for EMQX Dashboard | `ImplementationSpecific` | | `ingress.dashboard.pathType` | Ingress pathType for EMQX Dashboard | `ImplementationSpecific` |
| `ingress.dashboard.hosts` | Ingress hosts for EMQX Dashboard | dashboard.emqx.local | | `ingress.dashboard.hosts` | Ingress hosts for EMQX Dashboard | dashboard.emqx.local |
| `ingress.dashboard.tls` | Ingress tls for EMQX Dashboard | [] | | `ingress.dashboard.tls` | Ingress tls for EMQX Dashboard | [] |
| `ingress.dashboard.annotations` | Ingress annotations for EMQX Dashboard | {} | | `ingress.dashboard.annotations` | Ingress annotations for EMQX Dashboard | {} |
| `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | | | `ingress.dashboard.ingressClassName` | Set the ingress class for EMQX Dashboard | |
| `ingress.mqtt.enabled` | Enable ingress for MQTT | false | | `ingress.mqtt.enabled` | Enable ingress for MQTT | false |
| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | | `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | |
| `ingress.mqtt.path` | Ingress path for MQTT | / | | `ingress.mqtt.path` | Ingress path for MQTT | / |
| `ingress.mqtt.pathType` | Ingress pathType for MQTT | `ImplementationSpecific` | | `ingress.mqtt.pathType` | Ingress pathType for MQTT | `ImplementationSpecific` |
| `ingress.mqtt.hosts` | Ingress hosts for MQTT | mqtt.emqx.local | | `ingress.mqtt.hosts` | Ingress hosts for MQTT | mqtt.emqx.local |
| `ingress.mqtt.tls` | Ingress tls for MQTT | [] | | `ingress.mqtt.tls` | Ingress tls for MQTT | [] |
| `ingress.mqtt.annotations` | Ingress annotations for MQTT | {} | | `ingress.mqtt.annotations` | Ingress annotations for MQTT | {} |
| `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | | | `ingress.mqtt.ingressClassName` | Set the ingress class for MQTT | |
| `metrics.enable` | If set to true, [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) needs to be installed, and emqx_prometheus needs to enable | false | | `metrics.enable` | If set to true, [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) needs to be installed, and emqx_prometheus needs to enable | false |
| `metrics.type` | Now we only supported "prometheus" | "prometheus" | | `metrics.type` | Now we only supported "prometheus" | "prometheus" |
| `ssl.enabled` | Enable SSL support | false | | `ssl.enabled` | Enable SSL support | false |
| `ssl.useExisting` | Use existing certificate or let cert-manager generate one | false | | `ssl.useExisting` | Use existing certificate or let cert-manager generate one | false |
| `ssl.existingName` | Name of existing certificate | emqx-tls | | `ssl.existingName` | Name of existing certificate | emqx-tls |
| `ssl.commonName` | Common name for or certificate to be generated | | | `ssl.commonName` | Common name for or certificate to be generated | |
| `ssl.dnsnames` | DNS name(s) for certificate to be generated | {} | | `ssl.dnsnames` | DNS name(s) for certificate to be generated | {} |
| `ssl.issuer.name` | Issuer name for certificate generation | letsencrypt-dns | | `ssl.issuer.name` | Issuer name for certificate generation | letsencrypt-dns |
| `ssl.issuer.kind` | Issuer kind for certificate generation | ClusterIssuer | | `ssl.issuer.kind` | Issuer kind for certificate generation | ClusterIssuer |
## EMQX specific settings ## EMQX specific settings
The following table lists the configurable [EMQX](https://www.emqx.io/)-specific parameters of the chart and their The following table lists the configurable [EMQX](https://www.emqx.io/)-specific parameters of the chart and their
default values. default values.
Parameter | Description | Default Value | Parameter | Description | Default Value |
--- | --- | --- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|---------------|
`emqxConfig` | Map of [configuration](https://www.emqx.io/docs/en/v5.0/admin/cfg.html) items | `emqxConfig` | Map of [configuration](https://www.emqx.io/docs/en/v5.0/admin/cfg.html) items | |
expressed as [environment variables](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#environment-variables) (prefix `EMQX_` can be omitted) or using the configuration | expressed as [environment variables](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#environment-variables) (prefix `EMQX_` can be omitted) or using the configuration | | |
files [namespaced dotted notation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#syntax) | `nil` | files [namespaced dotted notation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html#syntax) | `nil` | |
`emqxLicenseSecretName` | Name of the secret that holds the license information | `nil` | `emqxLicenseSecretName` | Name of the secret that holds the license information | `nil` |
## SSL settings ## SSL settings
`cert-manager` generates secrets with certificate data using the keys `tls.crt` and `tls.key`. The helm chart always mounts those keys as files to `/tmp/ssl/` `cert-manager` generates secrets with certificate data using the keys `tls.crt` and `tls.key`. The helm chart always mounts those keys as files to `/tmp/ssl/`
@ -137,9 +137,8 @@ In order to preserve the original client's IP address, you could change the emqx
EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL: "true" EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL: "true"
``` ```
With haproxy you'd also need the following ingress annotation: With HAProxy you'd also need the following ingress annotation:
``` ```
haproxy-ingress.github.io/proxy-protocol: "v2" haproxy-ingress.github.io/proxy-protocol: "v2"
``` ```

View File

@ -37,3 +37,5 @@ a4feb3e6e95c18cb531416112e57520c5ba00d40
02c3f87b316e8370287d5cd46de4f103ffe48433 02c3f87b316e8370287d5cd46de4f103ffe48433
# erlfmt all remaining escripts # erlfmt all remaining escripts
72eb34658d31fb38130421949cff262efab51139 72eb34658d31fb38130421949cff262efab51139
# erlfmt rebar.config files and bin/nodetool
5e100f52b8a530f4a952a4b20125ec37b38e2906

View File

@ -7,119 +7,132 @@
%% with rebar.config.erl module. Final result is written to %% with rebar.config.erl module. Final result is written to
%% rebar.config.rendered if environment DEBUG is set. %% rebar.config.rendered if environment DEBUG is set.
{edoc_opts, [{preprocess,true}]}. {edoc_opts, [{preprocess, true}]}.
{erl_opts, [warn_unused_vars,warn_shadow_vars,warn_unused_import, {erl_opts, [
warn_obsolete_guard,compressed, nowarn_unused_import, warn_unused_vars,
{d, snk_kind, msg} warn_shadow_vars,
]}. warn_unused_import,
warn_obsolete_guard,
compressed,
nowarn_unused_import,
{d, snk_kind, msg}
]}.
{xref_checks,[undefined_function_calls,undefined_functions,locals_not_used, {xref_checks, [
deprecated_function_calls,warnings_as_errors,deprecated_functions]}. undefined_function_calls,
undefined_functions,
locals_not_used,
deprecated_function_calls,
warnings_as_errors,
deprecated_functions
]}.
%% Check the forbidden mnesia calls: %% Check the forbidden mnesia calls:
{xref_queries, {xref_queries, [
[ {"E || \"mnesia\":\"dirty_delete.*\"/\".*\" : Fun", []} {"E || \"mnesia\":\"dirty_delete.*\"/\".*\" : Fun", []},
, {"E || \"mnesia\":\"transaction\"/\".*\" : Fun", []} {"E || \"mnesia\":\"transaction\"/\".*\" : Fun", []},
, {"E || \"mnesia\":\"async_dirty\"/\".*\" : Fun", []} {"E || \"mnesia\":\"async_dirty\"/\".*\" : Fun", []},
, {"E || \"mnesia\":\"clear_table\"/\".*\" : Fun", []} {"E || \"mnesia\":\"clear_table\"/\".*\" : Fun", []},
, {"E || \"mnesia\":\"create_table\"/\".*\" : Fun", []} {"E || \"mnesia\":\"create_table\"/\".*\" : Fun", []},
, {"E || \"mnesia\":\"delete_table\"/\".*\" : Fun", []} {"E || \"mnesia\":\"delete_table\"/\".*\" : Fun", []}
]}. ]}.
{dialyzer, [ {dialyzer, [
{warnings, [unmatched_returns, error_handling]}, {warnings, [unmatched_returns, error_handling]},
{exclude_mods, [emqx_exproto_v_1_connection_unary_handler_bhvr, {exclude_mods, [
emqx_exproto_v_1_connection_handler_client, emqx_exproto_v_1_connection_unary_handler_bhvr,
emqx_exproto_v_1_connection_handler_bhvr, emqx_exproto_v_1_connection_handler_client,
emqx_exproto_v_1_connection_adapter_client, emqx_exproto_v_1_connection_handler_bhvr,
emqx_exproto_v_1_connection_adapter_bhvr, emqx_exproto_v_1_connection_adapter_client,
emqx_exproto_v_1_connection_unary_handler_client, emqx_exproto_v_1_connection_adapter_bhvr,
emqx_exhook_v_2_hook_provider_client, emqx_exproto_v_1_connection_unary_handler_client,
emqx_exhook_v_2_hook_provider_bhvr emqx_exhook_v_2_hook_provider_client,
]}, emqx_exhook_v_2_hook_provider_bhvr
]},
{plt_location, "."}, {plt_location, "."},
{plt_prefix, "emqx_dialyzer"}, {plt_prefix, "emqx_dialyzer"},
{plt_apps, all_apps}, {plt_apps, all_apps},
{statistics, true} {statistics, true}
] ]}.
}.
{cover_opts, [verbose]}. {cover_opts, [verbose]}.
{cover_export_enabled, true}. {cover_export_enabled, true}.
{cover_excl_mods, {cover_excl_mods,
[ %% generated protobuf modules %% generated protobuf modules
emqx_exproto_pb, [
emqx_exhook_pb, emqx_exproto_pb,
%% taken almost as-is from OTP emqx_exhook_pb,
emqx_ssl_crl_cache %% taken almost as-is from OTP
]}. emqx_ssl_crl_cache
]}.
%{provider_hooks, [{pre, [{release, {relup_helper, gen_appups}}]}]}. %{provider_hooks, [{pre, [{release, {relup_helper, gen_appups}}]}]}.
{post_hooks,[]}. {post_hooks, []}.
{deps, {deps, [
[ {lc, {git, "https://github.com/emqx/lc.git", {tag, "0.3.2"}}} {lc, {git, "https://github.com/emqx/lc.git", {tag, "0.3.2"}}},
, {redbug, {git, "https://github.com/emqx/redbug", {tag, "2.0.10"}}} {redbug, {git, "https://github.com/emqx/redbug", {tag, "2.0.10"}}},
, {covertool, {git, "https://github.com/zmstone/covertool", {tag, "2.0.4.1"}}} {covertool, {git, "https://github.com/zmstone/covertool", {tag, "2.0.4.1"}}},
, {gpb, "4.19.9"} {gpb, "4.19.9"},
, {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.9.1"}}} {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.9.1"}}},
, {gun, {git, "https://github.com/emqx/gun", {tag, "1.3.10"}}} {gun, {git, "https://github.com/emqx/gun", {tag, "1.3.10"}}},
, {ehttpc, {git, "https://github.com/emqx/ehttpc", {tag, "0.4.12"}}} {ehttpc, {git, "https://github.com/emqx/ehttpc", {tag, "0.4.12"}}},
, {gproc, {git, "https://github.com/emqx/gproc", {tag, "0.9.0.1"}}} {gproc, {git, "https://github.com/emqx/gproc", {tag, "0.9.0.1"}}},
, {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.6"}}} {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.6"}}},
, {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.2"}}} {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.2"}}},
, {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.11.1"}}} {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.11.1"}}},
, {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.8.0-emqx-2"}}} {rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.8.0-emqx-2"}}},
, {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.17.0"}}} {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.17.0"}}},
, {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "3.3.1"}}} {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "3.3.1"}}},
, {grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.12"}}} {grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.12"}}},
, {minirest, {git, "https://github.com/emqx/minirest", {tag, "1.3.15"}}} {minirest, {git, "https://github.com/emqx/minirest", {tag, "1.3.15"}}},
, {ecpool, {git, "https://github.com/emqx/ecpool", {tag, "0.5.7"}}} {ecpool, {git, "https://github.com/emqx/ecpool", {tag, "0.5.7"}}},
, {replayq, {git, "https://github.com/emqx/replayq.git", {tag, "0.3.7"}}} {replayq, {git, "https://github.com/emqx/replayq.git", {tag, "0.3.7"}}},
, {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}} {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}},
, {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.1"}}} {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.1"}}},
, {rulesql, {git, "https://github.com/emqx/rulesql", {tag, "0.1.7"}}} {rulesql, {git, "https://github.com/emqx/rulesql", {tag, "0.1.7"}}},
, {observer_cli, "1.7.1"} % NOTE: depends on recon 2.5.x % NOTE: depends on recon 2.5.x
, {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}} {observer_cli, "1.7.1"},
, {getopt, "1.0.2"} {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}},
, {snabbkaffe, {git, "https://github.com/kafka4beam/snabbkaffe.git", {tag, "1.0.8"}}} {getopt, "1.0.2"},
, {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.40.3"}}} {snabbkaffe, {git, "https://github.com/kafka4beam/snabbkaffe.git", {tag, "1.0.8"}}},
, {emqx_http_lib, {git, "https://github.com/emqx/emqx_http_lib.git", {tag, "0.5.3"}}} {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.40.3"}}},
, {esasl, {git, "https://github.com/emqx/esasl", {tag, "0.2.0"}}} {emqx_http_lib, {git, "https://github.com/emqx/emqx_http_lib.git", {tag, "0.5.3"}}},
, {jose, {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.2"}}} {esasl, {git, "https://github.com/emqx/esasl", {tag, "0.2.0"}}},
, {telemetry, "1.1.0"} {jose, {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.11.2"}}},
, {hackney, {git, "https://github.com/emqx/hackney.git", {tag, "1.18.1-1"}}} {telemetry, "1.1.0"},
{hackney, {git, "https://github.com/emqx/hackney.git", {tag, "1.18.1-1"}}},
%% to keep in sync with mix.exs %% to keep in sync with mix.exs
, {ssl_verify_fun, "1.1.7"} {ssl_verify_fun, "1.1.7"},
%% in conflict by erlavro and rocketmq %% in conflict by erlavro and rocketmq
, {jsone, {git, "https://github.com/emqx/jsone.git", {tag, "1.7.1"}}} {jsone, {git, "https://github.com/emqx/jsone.git", {tag, "1.7.1"}}},
, {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.6"}}} {uuid, {git, "https://github.com/okeuday/uuid.git", {tag, "v2.0.6"}}},
, {ssl_verify_fun, "1.1.7"} {ssl_verify_fun, "1.1.7"},
, {rfc3339, {git, "https://github.com/emqx/rfc3339.git", {tag, "0.2.3"}}} {rfc3339, {git, "https://github.com/emqx/rfc3339.git", {tag, "0.2.3"}}},
, {bcrypt, {git, "https://github.com/emqx/erlang-bcrypt.git", {tag, "0.6.1"}}} {bcrypt, {git, "https://github.com/emqx/erlang-bcrypt.git", {tag, "0.6.1"}}}
]}. ]}.
{xref_ignores, {xref_ignores,
[ %% schema registry is for enterprise %% schema registry is for enterprise
{emqx_schema_registry,get_all_schemas,0}, [
{emqx_schema_api,format_schema,1}, {emqx_schema_registry, get_all_schemas, 0},
{emqx_schema_api,make_schema_params,1}, {emqx_schema_api, format_schema, 1},
{emqx_schema_parser,decode,3}, {emqx_schema_api, make_schema_params, 1},
{emqx_schema_parser,encode,3}, {emqx_schema_parser, decode, 3},
{emqx_schema_registry,add_schema,1}, {emqx_schema_parser, encode, 3},
{emqx_audit, log, 2}, {emqx_schema_registry, add_schema, 1},
emqx_exhook_pb, % generated code for protobuf {emqx_audit, log, 2},
emqx_exproto_pb % generated code for protobuf % generated code for protobuf
]}. emqx_exhook_pb,
% generated code for protobuf
emqx_exproto_pb
]}.
{eunit_opts, {eunit_opts, [verbose]}.
[ verbose
]}.
{project_plugins, {project_plugins, [
[ erlfmt, erlfmt,
{rebar3_hex, "7.0.2"}, {rebar3_hex, "7.0.2"},
{rebar3_sbom, {rebar3_sbom, {git, "https://github.com/emqx/rebar3_sbom.git", {tag, "v0.6.1-1"}}}
{git, "https://github.com/emqx/rebar3_sbom.git", {tag, "v0.6.1-1"}}}
]}. ]}.