chore(rewrite): add some log

This commit is contained in:
DDDHuang 2022-07-12 10:30:54 +08:00
parent 419ab97e72
commit 13e9e9de51
3 changed files with 21 additions and 13 deletions

View File

@ -20,6 +20,7 @@
-include_lib("emqx/include/emqx.hrl").
-include_lib("emqx/include/emqx_mqtt.hrl").
-include_lib("emqx/include/logger.hrl").
-ifdef(TEST).
-export([ compile/1
@ -45,6 +46,7 @@
load(RawRules) ->
{PubRules, SubRules} = compile(RawRules),
?LOG(info, "[Rewrite] Load rule pub ~0p sub ~0p", [PubRules, SubRules]),
emqx_hooks:put('client.subscribe', {?MODULE, rewrite_subscribe, [SubRules]}, 1000),
emqx_hooks:put('client.unsubscribe', {?MODULE, rewrite_unsubscribe, [SubRules]}, 1000),
emqx_hooks:put('message.publish', {?MODULE, rewrite_publish, [PubRules]}, 1000).
@ -62,6 +64,7 @@ rewrite_publish(Message = #message{topic = Topic}, Rules) ->
{ok, Message#message{topic = match_and_rewrite(Topic, Rules, Binds)}}.
unload(_) ->
?LOG(info, "[Rewrite] Unload"),
emqx_hooks:del('client.subscribe', {?MODULE, rewrite_subscribe}),
emqx_hooks:del('client.unsubscribe', {?MODULE, rewrite_unsubscribe}),
emqx_hooks:del('message.publish', {?MODULE, rewrite_publish}).
@ -93,16 +96,19 @@ match_and_rewrite(Topic, [{rewrite, Filter, MP, Dest} | Rules], Binds) ->
end.
rewrite(Topic, MP, Dest, Binds) ->
case re:run(Topic, MP, [{capture, all_but_first, list}]) of
{match, Captured} ->
Vars = lists:zip(["\\$" ++ integer_to_list(I)
|| I <- lists:seq(1, length(Captured))], Captured),
iolist_to_binary(lists:foldl(
fun({Var, Val}, Acc) ->
re:replace(Acc, Var, Val, [global])
end, Dest, Binds ++ Vars));
nomatch -> Topic
end.
NewTopic =
case re:run(Topic, MP, [{capture, all_but_first, list}]) of
{match, Captured} ->
Vars = lists:zip(["\\$" ++ integer_to_list(I)
|| I <- lists:seq(1, length(Captured))], Captured),
iolist_to_binary(lists:foldl(
fun({Var, Val}, Acc) ->
re:replace(Acc, Var, Val, [global])
end, Dest, Binds ++ Vars));
nomatch -> Topic
end,
?LOG(debug, "[Rewrite] topic ~0p, params: ~0p dest topic: ~p", [Topic, Binds, NewTopic]),
NewTopic.
fill_client_binds(#{clientid := ClientId, username := Username}) ->
filter_client_binds([{"%c", ClientId}, {"%u", Username}]);

View File

@ -1,6 +1,6 @@
{application, emqx_modules,
[{description, "EMQ X Module Management"},
{vsn, "4.3.7"},
{vsn, "4.3.8"},
{modules, []},
{applications, [kernel,stdlib]},
{mod, {emqx_modules_app, []}},

View File

@ -1,7 +1,8 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.6",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
[{"4.3.7",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{"4.3.6",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{"4.3.5",
[{load_module,emqx_modules,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
@ -31,7 +32,8 @@
{load_module,emqx_mod_api_topic_metrics,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.6",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
[{"4.3.7",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{"4.3.6",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{"4.3.5",
[{load_module,emqx_modules,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},