fix(rule): update rules without reset the metrics
This commit is contained in:
parent
1748691db1
commit
50ee6ad2e2
|
@ -32,6 +32,7 @@
|
||||||
, create_metrics/3
|
, create_metrics/3
|
||||||
, create_metrics/4
|
, create_metrics/4
|
||||||
, clear_metrics/2
|
, clear_metrics/2
|
||||||
|
, has_metrics/2
|
||||||
]).
|
]).
|
||||||
|
|
||||||
-export([ get_metrics/2
|
-export([ get_metrics/2
|
||||||
|
@ -115,6 +116,13 @@ create_metrics(Name, Id, Metrics, RateMetrics) ->
|
||||||
clear_metrics(Name, Id) ->
|
clear_metrics(Name, Id) ->
|
||||||
gen_server:call(Name, {delete_metrics, 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()).
|
-spec(get(handler_name(), metric_id(), atom() | integer()) -> number()).
|
||||||
get(Name, Id, Metric) ->
|
get(Name, Id, Metric) ->
|
||||||
case get_ref(Name, Id) of
|
case get_ref(Name, Id) of
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
|
|
||||||
-export([ load_hooks_for_rule/1
|
-export([ load_hooks_for_rule/1
|
||||||
, unload_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
|
, clear_metrics_for_rule/1
|
||||||
]).
|
]).
|
||||||
|
|
||||||
|
@ -134,7 +134,6 @@ update_rule(Params = #{id := RuleId}) when is_binary(RuleId) ->
|
||||||
not_found ->
|
not_found ->
|
||||||
{error, not_found};
|
{error, not_found};
|
||||||
{ok, #{created_at := CreatedAt}} ->
|
{ok, #{created_at := CreatedAt}} ->
|
||||||
ok = delete_rule(RuleId),
|
|
||||||
parse_and_insert(Params, CreatedAt)
|
parse_and_insert(Params, CreatedAt)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -183,8 +182,12 @@ get_rule(Id) ->
|
||||||
load_hooks_for_rule(#{from := Topics}) ->
|
load_hooks_for_rule(#{from := Topics}) ->
|
||||||
lists:foreach(fun emqx_rule_events:load/1, Topics).
|
lists:foreach(fun emqx_rule_events:load/1, Topics).
|
||||||
|
|
||||||
add_metrics_for_rule(Id) ->
|
maybe_add_metrics_for_rule(Id) ->
|
||||||
ok = emqx_plugin_libs_metrics:create_metrics(rule_metrics, Id, ?METRICS, ?RATE_METRICS).
|
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) ->
|
clear_metrics_for_rule(Id) ->
|
||||||
ok = emqx_plugin_libs_metrics:clear_metrics(rule_metrics, 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) ->
|
do_insert_rule(#{id := Id} = Rule) ->
|
||||||
ok = load_hooks_for_rule(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)}),
|
true = ets:insert(?RULE_TAB, {Id, maps:remove(id, Rule)}),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ test(#{sql := Sql, context := Context}) ->
|
||||||
|
|
||||||
test_rule(Sql, Select, Context, EventTopics) ->
|
test_rule(Sql, Select, Context, EventTopics) ->
|
||||||
RuleId = iolist_to_binary(["sql_tester:", emqx_misc:gen_id(16)]),
|
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 = #{
|
Rule = #{
|
||||||
id => RuleId,
|
id => RuleId,
|
||||||
sql => Sql,
|
sql => Sql,
|
||||||
|
|
Loading…
Reference in New Issue