From 307eaa7f1e644d63b7cf1a621720d54a9064b960 Mon Sep 17 00:00:00 2001 From: Turtle Date: Thu, 26 Aug 2021 20:16:56 +0800 Subject: [PATCH] feat(rewrite): update rewrite conf to array --- apps/emqx_modules/etc/emqx_modules.conf | 24 +++++++++---------- apps/emqx_modules/src/emqx_modules_schema.erl | 20 ++++++---------- apps/emqx_modules/src/emqx_rewrite.erl | 9 +++---- apps/emqx_modules/test/emqx_rewrite_SUITE.erl | 12 +++------- 4 files changed, 24 insertions(+), 41 deletions(-) diff --git a/apps/emqx_modules/etc/emqx_modules.conf b/apps/emqx_modules/etc/emqx_modules.conf index 20d2672dc..a55a06bc5 100644 --- a/apps/emqx_modules/etc/emqx_modules.conf +++ b/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" + } +] diff --git a/apps/emqx_modules/src/emqx_modules_schema.erl b/apps/emqx_modules/src/emqx_modules_schema.erl index 0c5e716bf..695db972f 100644 --- a/apps/emqx_modules/src/emqx_modules_schema.erl +++ b/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())}]. diff --git a/apps/emqx_modules/src/emqx_rewrite.erl b/apps/emqx_modules/src/emqx_rewrite.erl index 9a6c0574b..4b4173156 100644 --- a/apps/emqx_modules/src/emqx_rewrite.erl +++ b/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(); diff --git a/apps/emqx_modules/test/emqx_rewrite_SUITE.erl b/apps/emqx_modules/test/emqx_rewrite_SUITE.erl index 467fa0e45..012f1cb5b 100644 --- a/apps/emqx_modules/test/emqx_rewrite_SUITE.erl +++ b/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)),