fix(rule trace): restore logger metadata to its previous value
This commit is contained in:
parent
5ce095f30e
commit
3c87bcde46
|
@ -1174,12 +1174,13 @@ call_query(QM, Id, Index, Ref, Query, QueryOpts) ->
|
||||||
{ok, _Group, #{status := ?status_connecting, error := unhealthy_target}} ->
|
{ok, _Group, #{status := ?status_connecting, error := unhealthy_target}} ->
|
||||||
{error, {unrecoverable_error, unhealthy_target}};
|
{error, {unrecoverable_error, unhealthy_target}};
|
||||||
{ok, _Group, Resource} ->
|
{ok, _Group, Resource} ->
|
||||||
|
PrevLoggerProcessMetadata = logger:get_process_metadata(),
|
||||||
QueryResult =
|
QueryResult =
|
||||||
try
|
try
|
||||||
set_rule_id_trace_meta_data(Query),
|
set_rule_id_trace_meta_data(Query),
|
||||||
do_call_query(QM, Id, Index, Ref, Query, QueryOpts, Resource)
|
do_call_query(QM, Id, Index, Ref, Query, QueryOpts, Resource)
|
||||||
after
|
after
|
||||||
unset_rule_id_trace_meta_data()
|
reset_logger_process_metadata(PrevLoggerProcessMetadata)
|
||||||
end,
|
end,
|
||||||
QueryResult;
|
QueryResult;
|
||||||
{error, not_found} ->
|
{error, not_found} ->
|
||||||
|
@ -1216,6 +1217,11 @@ set_rule_id_trace_meta_data(Request) ->
|
||||||
set_rule_id_trace_meta_data([Request]),
|
set_rule_id_trace_meta_data([Request]),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
reset_logger_process_metadata(undefined = _PrevProcessMetadata) ->
|
||||||
|
logger:unset_process_metadata();
|
||||||
|
reset_logger_process_metadata(PrevProcessMetadata) ->
|
||||||
|
logger:set_process_metadata(PrevProcessMetadata).
|
||||||
|
|
||||||
collect_rule_id(?QUERY(_, _, _, _, #{rule_id := RuleId}), Acc) ->
|
collect_rule_id(?QUERY(_, _, _, _, #{rule_id := RuleId}), Acc) ->
|
||||||
Acc#{RuleId => true};
|
Acc#{RuleId => true};
|
||||||
collect_rule_id(?QUERY(_, _, _, _, _), Acc) ->
|
collect_rule_id(?QUERY(_, _, _, _, _), Acc) ->
|
||||||
|
@ -1231,25 +1237,6 @@ collect_rule_trigger_times(?QUERY(_, _, _, _, #{rule_trigger_ts := Time}), Acc)
|
||||||
collect_rule_trigger_times(?QUERY(_, _, _, _, _), Acc) ->
|
collect_rule_trigger_times(?QUERY(_, _, _, _, _), Acc) ->
|
||||||
Acc.
|
Acc.
|
||||||
|
|
||||||
unset_rule_id_trace_meta_data() ->
|
|
||||||
case logger:get_process_metadata() of
|
|
||||||
undefined ->
|
|
||||||
ok;
|
|
||||||
OldLoggerProcessMetadata ->
|
|
||||||
NewLoggerProcessMetadata =
|
|
||||||
maps:without(
|
|
||||||
[
|
|
||||||
rule_ids,
|
|
||||||
client_ids,
|
|
||||||
stop_action_after_render,
|
|
||||||
rule_trigger_ts
|
|
||||||
],
|
|
||||||
OldLoggerProcessMetadata
|
|
||||||
),
|
|
||||||
logger:set_process_metadata(NewLoggerProcessMetadata),
|
|
||||||
ok
|
|
||||||
end.
|
|
||||||
|
|
||||||
%% action:kafka_producer:myproducer1:connector:kafka_producer:mykakfaclient1
|
%% action:kafka_producer:myproducer1:connector:kafka_producer:mykakfaclient1
|
||||||
extract_connector_id(Id) when is_binary(Id) ->
|
extract_connector_id(Id) when is_binary(Id) ->
|
||||||
case binary:split(Id, <<":">>, [global]) of
|
case binary:split(Id, <<":">>, [global]) of
|
||||||
|
|
|
@ -70,6 +70,7 @@ apply_rule_discard_result(Rule, Columns, Envs) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
apply_rule(Rule = #{id := RuleID}, Columns, Envs) ->
|
apply_rule(Rule = #{id := RuleID}, Columns, Envs) ->
|
||||||
|
PrevProcessMetadata = logger:get_process_metadata(),
|
||||||
set_process_trace_metadata(RuleID, Columns),
|
set_process_trace_metadata(RuleID, Columns),
|
||||||
trace_rule_sql(
|
trace_rule_sql(
|
||||||
"rule_activated",
|
"rule_activated",
|
||||||
|
@ -137,7 +138,7 @@ apply_rule(Rule = #{id := RuleID}, Columns, Envs) ->
|
||||||
),
|
),
|
||||||
{error, {Error, StkTrace}}
|
{error, {Error, StkTrace}}
|
||||||
after
|
after
|
||||||
reset_process_trace_metadata(Columns)
|
reset_logger_process_metadata(PrevProcessMetadata)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
set_process_trace_metadata(RuleID, #{clientid := ClientID} = Columns) ->
|
set_process_trace_metadata(RuleID, #{clientid := ClientID} = Columns) ->
|
||||||
|
@ -152,6 +153,11 @@ set_process_trace_metadata(RuleID, Columns) ->
|
||||||
rule_trigger_ts => [rule_trigger_time(Columns)]
|
rule_trigger_ts => [rule_trigger_time(Columns)]
|
||||||
}).
|
}).
|
||||||
|
|
||||||
|
reset_logger_process_metadata(undefined = _PrevProcessMetadata) ->
|
||||||
|
logger:unset_process_metadata();
|
||||||
|
reset_logger_process_metadata(PrevProcessMetadata) ->
|
||||||
|
logger:set_process_metadata(PrevProcessMetadata).
|
||||||
|
|
||||||
rule_trigger_time(Columns) ->
|
rule_trigger_time(Columns) ->
|
||||||
case Columns of
|
case Columns of
|
||||||
#{timestamp := Timestamp} ->
|
#{timestamp := Timestamp} ->
|
||||||
|
@ -160,28 +166,6 @@ rule_trigger_time(Columns) ->
|
||||||
erlang:system_time(millisecond)
|
erlang:system_time(millisecond)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
reset_process_trace_metadata(#{clientid := _ClientID}) ->
|
|
||||||
Meta0 = logger:get_process_metadata(),
|
|
||||||
Meta1 = maps:without(
|
|
||||||
[
|
|
||||||
clientid,
|
|
||||||
rule_id,
|
|
||||||
rule_trigger_ts
|
|
||||||
],
|
|
||||||
Meta0
|
|
||||||
),
|
|
||||||
logger:set_process_metadata(Meta1);
|
|
||||||
reset_process_trace_metadata(_) ->
|
|
||||||
Meta0 = logger:get_process_metadata(),
|
|
||||||
Meta1 = maps:without(
|
|
||||||
[
|
|
||||||
rule_id,
|
|
||||||
rule_trigger_ts
|
|
||||||
],
|
|
||||||
Meta0
|
|
||||||
),
|
|
||||||
logger:set_process_metadata(Meta1).
|
|
||||||
|
|
||||||
do_apply_rule(
|
do_apply_rule(
|
||||||
#{
|
#{
|
||||||
id := RuleId,
|
id := RuleId,
|
||||||
|
|
|
@ -69,18 +69,22 @@ do_apply_rule(
|
||||||
end.
|
end.
|
||||||
|
|
||||||
do_apply_matched_rule(Rule, Context, StopAfterRender, EventTopics) ->
|
do_apply_matched_rule(Rule, Context, StopAfterRender, EventTopics) ->
|
||||||
update_process_trace_metadata(StopAfterRender),
|
PrevLoggerProcessMetadata = logger:get_process_metadata(),
|
||||||
FullContext = fill_default_values(
|
try
|
||||||
hd(EventTopics),
|
update_process_trace_metadata(StopAfterRender),
|
||||||
emqx_rule_maps:atom_key_map(Context)
|
FullContext = fill_default_values(
|
||||||
),
|
hd(EventTopics),
|
||||||
ApplyRuleRes = emqx_rule_runtime:apply_rule(
|
emqx_rule_maps:atom_key_map(Context)
|
||||||
Rule,
|
),
|
||||||
FullContext,
|
ApplyRuleRes = emqx_rule_runtime:apply_rule(
|
||||||
apply_rule_environment()
|
Rule,
|
||||||
),
|
FullContext,
|
||||||
reset_trace_process_metadata(StopAfterRender),
|
apply_rule_environment()
|
||||||
ApplyRuleRes.
|
),
|
||||||
|
ApplyRuleRes
|
||||||
|
after
|
||||||
|
reset_logger_process_metadata(PrevLoggerProcessMetadata)
|
||||||
|
end.
|
||||||
|
|
||||||
update_process_trace_metadata(true = _StopAfterRender) ->
|
update_process_trace_metadata(true = _StopAfterRender) ->
|
||||||
logger:update_process_metadata(#{
|
logger:update_process_metadata(#{
|
||||||
|
@ -89,12 +93,10 @@ update_process_trace_metadata(true = _StopAfterRender) ->
|
||||||
update_process_trace_metadata(false = _StopAfterRender) ->
|
update_process_trace_metadata(false = _StopAfterRender) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
reset_trace_process_metadata(true = _StopAfterRender) ->
|
reset_logger_process_metadata(undefined = _PrevProcessMetadata) ->
|
||||||
Meta = logger:get_process_metadata(),
|
logger:unset_process_metadata();
|
||||||
NewMeta = maps:remove(stop_action_after_render, Meta),
|
reset_logger_process_metadata(PrevProcessMetadata) ->
|
||||||
logger:set_process_metadata(NewMeta);
|
logger:set_process_metadata(PrevProcessMetadata).
|
||||||
reset_trace_process_metadata(false = _StopAfterRender) ->
|
|
||||||
ok.
|
|
||||||
|
|
||||||
%% At the time of writing the environment passed to the apply rule function is
|
%% At the time of writing the environment passed to the apply rule function is
|
||||||
%% not used at all for normal actions. When it is used for custom functions it
|
%% not used at all for normal actions. When it is used for custom functions it
|
||||||
|
|
Loading…
Reference in New Issue