Parcourir la source

feat(rewrite): update rewrite conf to array

Turtle il y a 4 ans
Parent
commit
307eaa7f1e

+ 11 - 13
apps/emqx_modules/etc/emqx_modules.conf

@@ -23,18 +23,16 @@ event_message {
     # "$event/message_dropped": false
 }
 
-topic_metrics {
-    topics = []
-}
+topic_metrics: [
+    #{topic: "test/1"}
+]
 
-rewrite {
-    rules = [
-        {
-            action = publish
-            source_topic = "x/#"
-            re = "^x/y/(.+)$"
-            dest_topic = "z/y/$1"
-        }
-    ]
-}
+rewrite: [
+    {
+        action = publish
+        source_topic = "x/#"
+        re = "^x/y/(.+)$"
+        dest_topic = "z/y/$1"
+    }
+]
 

+ 7 - 13
apps/emqx_modules/src/emqx_modules_schema.erl

@@ -28,8 +28,8 @@ structs() ->
      "recon",
      "telemetry",
      "event_message",
-     "rewrite",
-     "topic_metrics"].
+     {array, "rewrite"},
+     {array, "topic_metrics"}].
 
 fields(Name) when Name =:= "recon";
                   Name =:= "telemetry" ->
@@ -42,10 +42,12 @@ fields("delayed") ->
     ];
 
 fields("rewrite") ->
-    [ {rules, hoconsc:array(hoconsc:ref(?MODULE, "rules"))}
+    [ {action, hoconsc:enum([publish, subscribe])}
+    , {source_topic, emqx_schema:t(binary())}
+    , {re, emqx_schema:t(binary())}
+    , {dest_topic, emqx_schema:t(binary())}
     ];
 
-
 fields("event_message") ->
     [ {"$event/client_connected", emqx_schema:t(boolean(), undefined, false)}
     , {"$event/client_disconnected", emqx_schema:t(boolean(), undefined, false)}
@@ -57,13 +59,5 @@ fields("event_message") ->
     ];
 
 fields("topic_metrics") ->
-    [ {topics, hoconsc:array(binary())}
-    ];
-
-fields("rules") ->
-    [ {action, hoconsc:enum([publish, subscribe])}
-    , {source_topic, emqx_schema:t(binary())}
-    , {re, emqx_schema:t(binary())}
-    , {dest_topic, emqx_schema:t(binary())}
-    ].
+    [{topic, emqx_schema:t(binary())}].
 

+ 3 - 6
apps/emqx_modules/src/emqx_rewrite.erl

@@ -43,7 +43,7 @@
 %%--------------------------------------------------------------------
 
 enable() ->
-    Rules = emqx:get_config([rewrite, rules], []),
+    Rules = emqx:get_config([rewrite], []),
     register_hook(Rules).
 
 disable() ->
@@ -52,13 +52,10 @@ disable() ->
     emqx_hooks:del('message.publish',    {?MODULE, rewrite_publish}).
 
 list() ->
-    maps:get(<<"rules">>, emqx:get_raw_config([<<"rewrite">>], #{}), []).
+    maps:get(<<"rules">>, emqx:get_raw_config([<<"rewrite">>], []), []).
 
 update(Rules0) ->
-    Rewrite = emqx:get_raw_config([<<"rewrite">>], #{}),
-    {ok, #{config := Config}} = emqx:update_config([rewrite], maps:put(<<"rules">>,
-        Rules0, Rewrite)),
-    Rules = maps:get(rules, maps:get(rewrite, Config, #{}), []),
+    {ok, #{config := Rules}} = emqx:update_config([rewrite], Rules0),
     case Rules of
         [] ->
             disable();

+ 3 - 9
apps/emqx_modules/test/emqx_rewrite_SUITE.erl

@@ -23,8 +23,7 @@
 -include_lib("eunit/include/eunit.hrl").
 
 -define(REWRITE, <<"""
-rewrite: {
-  rules : [
+rewrite: [
     {
       action : publish
       source_topic : \"x/#\"
@@ -37,7 +36,7 @@ rewrite: {
       re : \"^y/(.+)/z/(.+)$\"
       dest_topic : \"y/z/$2\"
     }
-  ]}""">>).
+]""">>).
 
 all() -> emqx_ct:all(?MODULE).
 
@@ -87,12 +86,7 @@ t_mod_rewrite(_Config) ->
     ok = emqx_rewrite:disable().
 
 t_rewrite_rule(_Config) ->
-    {ok, Rewite} = hocon:binary(?REWRITE),
-    #{rewrite := #{rules := Rules}} =
-        hocon_schema:check_plain(emqx_modules_schema, Rewite,
-                                 #{atom_key => true},
-                                 ["rewrite"]),
-    {PubRules, SubRules} = emqx_rewrite:compile(Rules),
+    {PubRules, SubRules} = emqx_rewrite:compile(emqx:get_config([rewrite])),
     ?assertEqual(<<"z/y/2">>, emqx_rewrite:match_and_rewrite(<<"x/y/2">>, PubRules)),
     ?assertEqual(<<"x/1/2">>, emqx_rewrite:match_and_rewrite(<<"x/1/2">>, PubRules)),
     ?assertEqual(<<"y/z/b">>, emqx_rewrite:match_and_rewrite(<<"y/a/z/b">>, SubRules)),