From 183a65d263b3f8a3e93293e8885a7d6647ff5f09 Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 5 Aug 2021 17:50:09 +0800 Subject: [PATCH] fix(exhook): fix the server config format --- apps/emqx_exhook/etc/emqx_exhook.conf | 18 ++++++++++-------- apps/emqx_exhook/src/emqx_exhook_app.erl | 12 ++++++++---- apps/emqx_exhook/src/emqx_exhook_cli.erl | 10 +++++++++- apps/emqx_exhook/src/emqx_exhook_schema.erl | 10 ++++------ apps/emqx_exhook/test/emqx_exhook_SUITE.erl | 12 +++++++++--- .../test/props/prop_exhook_hooks.erl | 8 +++++++- rebar.config.erl | 2 +- 7 files changed, 48 insertions(+), 24 deletions(-) diff --git a/apps/emqx_exhook/etc/emqx_exhook.conf b/apps/emqx_exhook/etc/emqx_exhook.conf index 3ed499e28..648eb554f 100644 --- a/apps/emqx_exhook/etc/emqx_exhook.conf +++ b/apps/emqx_exhook/etc/emqx_exhook.conf @@ -3,12 +3,14 @@ ##==================================================================== exhook: { - server.default: { - url: "http://127.0.0.1:9000" - #ssl: { - # cacertfile: "{{ platform_etc_dir }}/certs/cacert.pem" - # certfile: "{{ platform_etc_dir }}/certs/cert.pem" - # keyfile: "{{ platform_etc_dir }}/certs/key.pem" - #} - } + servers: [ + # { name: "default" + # url: "http://127.0.0.1:9000" + # #ssl: { + # # cacertfile: "{{ platform_etc_dir }}/certs/cacert.pem" + # # certfile: "{{ platform_etc_dir }}/certs/cert.pem" + # # keyfile: "{{ platform_etc_dir }}/certs/key.pem" + # #} + # } + ] } diff --git a/apps/emqx_exhook/src/emqx_exhook_app.erl b/apps/emqx_exhook/src/emqx_exhook_app.erl index 9cbb2e1b8..c97b26677 100644 --- a/apps/emqx_exhook/src/emqx_exhook_app.erl +++ b/apps/emqx_exhook/src/emqx_exhook_app.erl @@ -65,10 +65,14 @@ stop(_State) -> %%-------------------------------------------------------------------- load_all_servers() -> - _ = maps:map(fun(Name, Options) -> - load_server(Name, Options) - end, emqx_config:get([exhook, server])), - ok. + try + lists:foreach(fun(#{name := Name} = Options) -> + load_server(Name, maps:remove(name, Options)) + end, emqx_config:get([exhook, servers])) + catch + _Class : _Reason -> + ok + end, ok. unload_all_servers() -> emqx_exhook:disable_all(). diff --git a/apps/emqx_exhook/src/emqx_exhook_cli.erl b/apps/emqx_exhook/src/emqx_exhook_cli.erl index 3f0dd0b6c..ccfbe4d45 100644 --- a/apps/emqx_exhook/src/emqx_exhook_cli.erl +++ b/apps/emqx_exhook/src/emqx_exhook_cli.erl @@ -30,7 +30,7 @@ cli(["server", "list"]) -> cli(["server", "enable", Name0]) -> if_enabled(fun() -> Name = list_to_atom(Name0), - case maps:get(Name, emqx_config:get([exhook, server]), undefined) of + case find_server_options(Name) of undefined -> emqx_ctl:print("not_found~n"); Opts -> @@ -59,6 +59,14 @@ print(ok) -> print({error, Reason}) -> emqx_ctl:print("~p~n", [Reason]). +find_server_options(Name) -> + Ls = emqx_config:get([exhook, servers]), + case [ E || E = #{name := N} <- Ls, N =:= Name] of + [] -> undefined; + [Options] -> + maps:remove(name, Options) + end. + %%-------------------------------------------------------------------- %% Internal funcs %%-------------------------------------------------------------------- diff --git a/apps/emqx_exhook/src/emqx_exhook_schema.erl b/apps/emqx_exhook/src/emqx_exhook_schema.erl index 867c8e6df..68ffb5735 100644 --- a/apps/emqx_exhook/src/emqx_exhook_schema.erl +++ b/apps/emqx_exhook/src/emqx_exhook_schema.erl @@ -29,13 +29,11 @@ -export([structs/0, fields/1]). -export([t/1, t/3, t/4, ref/1]). -structs() -> [server]. +structs() -> [servers]. -fields(server) -> - [{"$name", t(ref(server_structs))}]; - -fields(server_structs) -> - [ {url, t(string(), "emqx_exhook.url", "")} +fields(servers) -> + [ {name, string()} + , {url, string()} , {ssl, t(ref(ssl_conf_group))} ]; diff --git a/apps/emqx_exhook/test/emqx_exhook_SUITE.erl b/apps/emqx_exhook/test/emqx_exhook_SUITE.erl index 0291a8f91..8c5af47fc 100644 --- a/apps/emqx_exhook/test/emqx_exhook_SUITE.erl +++ b/apps/emqx_exhook/test/emqx_exhook_SUITE.erl @@ -23,7 +23,13 @@ -include_lib("common_test/include/ct.hrl"). -define(CONF_DEFAULT, <<" -exhook: { server.default: { url: \"http://127.0.0.1:9000\" } } +exhook: { + servers: [ + { name: \"default\" + url: \"http://127.0.0.1:9000\" + } + ] +} ">>). %%-------------------------------------------------------------------- @@ -49,8 +55,8 @@ end_per_suite(_Cfg) -> t_noserver_nohook(_) -> emqx_exhook:disable(default), ?assertEqual([], loaded_exhook_hookpoints()), - Opts = emqx_config:get([exhook, server, default]), - ok = emqx_exhook:enable(default, Opts), + [#{name := Name} = Opts] = emqx_config:get([exhook, servers]), + ok = emqx_exhook:enable(Name, Opts), ?assertNotEqual([], loaded_exhook_hookpoints()). t_cli_list(_) -> diff --git a/apps/emqx_exhook/test/props/prop_exhook_hooks.erl b/apps/emqx_exhook/test/props/prop_exhook_hooks.erl index 229805d3b..a57e0b49c 100644 --- a/apps/emqx_exhook/test/props/prop_exhook_hooks.erl +++ b/apps/emqx_exhook/test/props/prop_exhook_hooks.erl @@ -31,7 +31,13 @@ ]). -define(CONF_DEFAULT, <<" -exhook: { server.default: { url: \"http://127.0.0.1:9000\" } } +exhook: { + servers: [ + { name: \"default\" + url: \"http://127.0.0.1:9000\" + } + ] +} ">>). -define(ALL(Vars, Types, Exprs), diff --git a/rebar.config.erl b/rebar.config.erl index 058426665..f97aecb55 100644 --- a/rebar.config.erl +++ b/rebar.config.erl @@ -267,7 +267,7 @@ relx_apps(ReleaseType) -> , emqx_authn , emqx_authz , emqx_gateway - , {emqx_exhook, load} + , emqx_exhook , emqx_data_bridge , emqx_rule_engine , emqx_rule_actions