fix(rules): improve some code for emqx_rule_engine
This commit is contained in:
parent
dce57a3f92
commit
2e52ab9712
|
@ -69,13 +69,7 @@
|
||||||
|
|
||||||
-define(RULE_ENGINE, ?MODULE).
|
-define(RULE_ENGINE, ?MODULE).
|
||||||
|
|
||||||
-define(T_CALL, 10000).
|
-define(T_CALL, infinity).
|
||||||
|
|
||||||
-define(FOREACH_RULE(RULES, EXPR),
|
|
||||||
lists:foreach(fun({ID0, _ITEM}) ->
|
|
||||||
ID = bin(ID0),
|
|
||||||
EXPR
|
|
||||||
end, maps:to_list(RULES))).
|
|
||||||
|
|
||||||
config_key_path() ->
|
config_key_path() ->
|
||||||
[rule_engine, rules].
|
[rule_engine, rules].
|
||||||
|
@ -90,12 +84,15 @@ start_link() ->
|
||||||
post_config_update(_Req, NewRules, OldRules, _AppEnvs) ->
|
post_config_update(_Req, NewRules, OldRules, _AppEnvs) ->
|
||||||
#{added := Added, removed := Removed, changed := Updated}
|
#{added := Added, removed := Removed, changed := Updated}
|
||||||
= emqx_map_lib:diff_maps(NewRules, OldRules),
|
= emqx_map_lib:diff_maps(NewRules, OldRules),
|
||||||
?FOREACH_RULE(Updated, begin
|
maps_foreach(fun({Id, {_Old, New}}) ->
|
||||||
{_Old, New} = _ITEM,
|
{ok, _} = update_rule(New#{id => bin(Id)})
|
||||||
{ok, _} = update_rule(New#{id => ID})
|
end, Updated),
|
||||||
end),
|
maps_foreach(fun({Id, _Rule}) ->
|
||||||
?FOREACH_RULE(Removed, ok = delete_rule(ID)),
|
ok = delete_rule(bin(Id))
|
||||||
?FOREACH_RULE(Added, {ok, _} = create_rule(_ITEM#{id => ID})),
|
end, Removed),
|
||||||
|
maps_foreach(fun({Id, Rule}) ->
|
||||||
|
{ok, _} = create_rule(Rule#{id => bin(Id)})
|
||||||
|
end, Added),
|
||||||
{ok, get_rules()}.
|
{ok, get_rules()}.
|
||||||
|
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
|
@ -104,9 +101,9 @@ post_config_update(_Req, NewRules, OldRules, _AppEnvs) ->
|
||||||
|
|
||||||
-spec load_rules() -> ok.
|
-spec load_rules() -> ok.
|
||||||
load_rules() ->
|
load_rules() ->
|
||||||
lists:foreach(fun({Id, Rule}) ->
|
maps_foreach(fun({Id, Rule}) ->
|
||||||
{ok, _} = create_rule(Rule#{id => bin(Id)})
|
{ok, _} = create_rule(Rule#{id => bin(Id)})
|
||||||
end, maps:to_list(emqx:get_config([rule_engine, rules], #{}))).
|
end, emqx:get_config([rule_engine, rules], #{})).
|
||||||
|
|
||||||
-spec create_rule(map()) -> {ok, rule()} | {error, term()}.
|
-spec create_rule(map()) -> {ok, rule()} | {error, term()}.
|
||||||
create_rule(Params = #{id := RuleId}) when is_binary(RuleId) ->
|
create_rule(Params = #{id := RuleId}) when is_binary(RuleId) ->
|
||||||
|
@ -270,5 +267,8 @@ do_parse_output(BridgeChannelId) when is_binary(BridgeChannelId) ->
|
||||||
get_all_records(Tab) ->
|
get_all_records(Tab) ->
|
||||||
[Rule#{id => Id} || {Id, Rule} <- ets:tab2list(Tab)].
|
[Rule#{id => Id} || {Id, Rule} <- ets:tab2list(Tab)].
|
||||||
|
|
||||||
|
maps_foreach(Fun, Map) ->
|
||||||
|
lists:foreach(Fun, maps:to_list(Map)).
|
||||||
|
|
||||||
bin(A) when is_atom(A) -> atom_to_binary(A, utf8);
|
bin(A) when is_atom(A) -> atom_to_binary(A, utf8);
|
||||||
bin(B) when is_binary(B) -> B.
|
bin(B) when is_binary(B) -> B.
|
||||||
|
|
Loading…
Reference in New Issue