Просмотр исходного кода

fix(exhook): fix the server config format

JianBo He 4 лет назад
Родитель
Сommit
183a65d263

+ 10 - 8
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"
+    #      #}
+    #    }
+    ]
 }

+ 8 - 4
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().

+ 9 - 1
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
 %%--------------------------------------------------------------------

+ 4 - 6
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))}
     ];
 

+ 9 - 3
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(_) ->

+ 7 - 1
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),

+ 1 - 1
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