fix(rule): update rules without reset the metrics

This commit is contained in:
Shawn 2022-03-21 14:56:19 +08:00
parent 1748691db1
commit 50ee6ad2e2
3 changed files with 17 additions and 6 deletions

View File

@ -32,6 +32,7 @@
, create_metrics/3
, create_metrics/4
, clear_metrics/2
, has_metrics/2
]).
-export([ get_metrics/2
@ -115,6 +116,13 @@ create_metrics(Name, Id, Metrics, RateMetrics) ->
clear_metrics(Name, Id) ->
gen_server:call(Name, {delete_metrics, Id}).
-spec(has_metrics(handler_name(), metric_id()) -> boolean()).
has_metrics(Name, Id) ->
case get_ref(Name, Id) of
not_found -> false;
_ -> true
end.
-spec(get(handler_name(), metric_id(), atom() | integer()) -> number()).
get(Name, Id, Metric) ->
case get_ref(Name, Id) of

View File

@ -54,7 +54,7 @@
-export([ load_hooks_for_rule/1
, unload_hooks_for_rule/1
, add_metrics_for_rule/1
, maybe_add_metrics_for_rule/1
, clear_metrics_for_rule/1
]).
@ -134,7 +134,6 @@ update_rule(Params = #{id := RuleId}) when is_binary(RuleId) ->
not_found ->
{error, not_found};
{ok, #{created_at := CreatedAt}} ->
ok = delete_rule(RuleId),
parse_and_insert(Params, CreatedAt)
end.
@ -183,8 +182,12 @@ get_rule(Id) ->
load_hooks_for_rule(#{from := Topics}) ->
lists:foreach(fun emqx_rule_events:load/1, Topics).
add_metrics_for_rule(Id) ->
ok = emqx_plugin_libs_metrics:create_metrics(rule_metrics, Id, ?METRICS, ?RATE_METRICS).
maybe_add_metrics_for_rule(Id) ->
case emqx_plugin_libs_metrics:has_metrics(rule_metrics, Id) of
true -> ok;
false ->
ok = emqx_plugin_libs_metrics:create_metrics(rule_metrics, Id, ?METRICS, ?RATE_METRICS)
end.
clear_metrics_for_rule(Id) ->
ok = emqx_plugin_libs_metrics:clear_metrics(rule_metrics, Id).
@ -265,7 +268,7 @@ parse_and_insert(Params = #{id := RuleId, sql := Sql, outputs := Outputs}, Creat
do_insert_rule(#{id := Id} = Rule) ->
ok = load_hooks_for_rule(Rule),
ok = add_metrics_for_rule(Id),
ok = maybe_add_metrics_for_rule(Id),
true = ets:insert(?RULE_TAB, {Id, maps:remove(id, Rule)}),
ok.

View File

@ -45,7 +45,7 @@ test(#{sql := Sql, context := Context}) ->
test_rule(Sql, Select, Context, EventTopics) ->
RuleId = iolist_to_binary(["sql_tester:", emqx_misc:gen_id(16)]),
ok = emqx_rule_engine:add_metrics_for_rule(RuleId),
ok = emqx_rule_engine:maybe_add_metrics_for_rule(RuleId),
Rule = #{
id => RuleId,
sql => Sql,