fix(rule): restore metrics for actions
This commit is contained in:
parent
c761b1aa3c
commit
b7bcb37eab
|
@ -1,6 +1,6 @@
|
||||||
{application, emqx_rule_engine,
|
{application, emqx_rule_engine,
|
||||||
[{description, "EMQ X Rule Engine"},
|
[{description, "EMQ X Rule Engine"},
|
||||||
{vsn, "4.3.6"}, % strict semver, bump manually!
|
{vsn, "4.3.7"}, % strict semver, bump manually!
|
||||||
{modules, []},
|
{modules, []},
|
||||||
{registered, [emqx_rule_engine_sup, emqx_rule_registry]},
|
{registered, [emqx_rule_engine_sup, emqx_rule_registry]},
|
||||||
{applications, [kernel,stdlib,rulesql,getopt]},
|
{applications, [kernel,stdlib,rulesql,getopt]},
|
||||||
|
|
|
@ -1,52 +1,79 @@
|
||||||
%% -*- mode: erlang -*-
|
%% -*- mode: erlang -*-
|
||||||
{VSN,
|
{VSN,
|
||||||
[{"4.3.5",[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
|
[
|
||||||
{"4.3.0",
|
{"4.3.6",
|
||||||
[{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
|
[ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
||||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
]},
|
||||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
{"4.3.5",
|
||||||
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
[ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
||||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}]},
|
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
||||||
{"4.3.1",
|
]},
|
||||||
[{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
|
||||||
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
|
||||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}]},
|
|
||||||
{"4.3.2",
|
|
||||||
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
|
||||||
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
|
||||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}]},
|
|
||||||
{"4.3.3",
|
|
||||||
[{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
|
|
||||||
{"4.3.4",
|
{"4.3.4",
|
||||||
[{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
[ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
||||||
{<<".*">>,[]}],
|
]},
|
||||||
[{"4.3.5",[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
|
|
||||||
{"4.3.0",
|
|
||||||
[{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
|
||||||
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
|
||||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}]},
|
|
||||||
{"4.3.1",
|
|
||||||
[{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
|
||||||
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
|
||||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}]},
|
|
||||||
{"4.3.2",
|
|
||||||
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
|
||||||
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
|
||||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
|
||||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}]},
|
|
||||||
{"4.3.3",
|
{"4.3.3",
|
||||||
[{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
[ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{"4.3.2",
|
||||||
|
[ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{"4.3.1",
|
||||||
|
[ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{"4.3.0",
|
||||||
|
[ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{<<".*">>, []}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{"4.3.6",
|
||||||
|
[ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{"4.3.5",
|
||||||
|
[ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
||||||
|
, {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
{"4.3.4",
|
{"4.3.4",
|
||||||
[{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
[ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
||||||
{<<".*">>,[]}]}.
|
]},
|
||||||
|
{"4.3.3",
|
||||||
|
[ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{"4.3.2",
|
||||||
|
[ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{"4.3.1",
|
||||||
|
[ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{"4.3.0",
|
||||||
|
[ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
|
{apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
|
||||||
|
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
|
||||||
|
]},
|
||||||
|
{<<".*">>, []}
|
||||||
|
]
|
||||||
|
}.
|
||||||
|
|
|
@ -491,11 +491,24 @@ may_update_rule_params(Rule, Params = #{on_action_failed := OnFailed}) ->
|
||||||
may_update_rule_params(Rule = #rule{actions = OldActions}, Params = #{actions := Actions}) ->
|
may_update_rule_params(Rule = #rule{actions = OldActions}, Params = #{actions := Actions}) ->
|
||||||
%% prepare new actions before removing old ones
|
%% prepare new actions before removing old ones
|
||||||
NewActions = prepare_actions(Actions, maps:get(enabled, Params, true)),
|
NewActions = prepare_actions(Actions, maps:get(enabled, Params, true)),
|
||||||
|
ok = restore_action_metrics(OldActions, NewActions),
|
||||||
_ = ?CLUSTER_CALL(clear_actions, [OldActions]),
|
_ = ?CLUSTER_CALL(clear_actions, [OldActions]),
|
||||||
may_update_rule_params(Rule#rule{actions = NewActions}, maps:remove(actions, Params));
|
may_update_rule_params(Rule#rule{actions = NewActions}, maps:remove(actions, Params));
|
||||||
may_update_rule_params(Rule, _Params) -> %% ignore all the unsupported params
|
may_update_rule_params(Rule, _Params) -> %% ignore all the unsupported params
|
||||||
Rule.
|
Rule.
|
||||||
|
|
||||||
|
%% NOTE: if the user removed an action, but the action is not the last one in the list,
|
||||||
|
%% the `restore_action_metrics/2` will not work as expected!
|
||||||
|
restore_action_metrics([#action_instance{id = OldId} | OldActions],
|
||||||
|
[#action_instance{id = NewId} | NewActions]) ->
|
||||||
|
emqx_rule_metrics:inc_actions_taken(NewId, emqx_rule_metrics:get_actions_taken(OldId)),
|
||||||
|
emqx_rule_metrics:inc_actions_success(NewId, emqx_rule_metrics:get_actions_success(OldId)),
|
||||||
|
emqx_rule_metrics:inc_actions_error(NewId, emqx_rule_metrics:get_actions_error(OldId)),
|
||||||
|
emqx_rule_metrics:inc_actions_exception(NewId, emqx_rule_metrics:get_actions_exception(OldId)),
|
||||||
|
restore_action_metrics(OldActions, NewActions);
|
||||||
|
restore_action_metrics(_, _) ->
|
||||||
|
ok.
|
||||||
|
|
||||||
ignore_lib_apps(Apps) ->
|
ignore_lib_apps(Apps) ->
|
||||||
LibApps = [kernel, stdlib, sasl, appmon, eldap, erts,
|
LibApps = [kernel, stdlib, sasl, appmon, eldap, erts,
|
||||||
syntax_tools, ssl, crypto, mnesia, os_mon,
|
syntax_tools, ssl, crypto, mnesia, os_mon,
|
||||||
|
|
Loading…
Reference in New Issue