fix: discard rpc call failed data

This commit is contained in:
EMQ-YangM 2022-04-08 10:12:40 +08:00
parent 16dc0d6555
commit 96b26bf4ce
2 changed files with 38 additions and 19 deletions

View File

@ -323,13 +323,13 @@ show_resource(#{id := Id}, _Params) ->
case emqx_rule_registry:find_resource(Id) of case emqx_rule_registry:find_resource(Id) of
{ok, R} -> {ok, R} ->
Status = Status =
[begin lists:flatten(
St = case rpc:call(Node, emqx_rule_engine, get_resource_status, [Id]) of [ case rpc:call(Node, emqx_rule_engine, get_resource_status, [Id]) of
{ok, St0} -> St0; {badrpc, _} -> [];
{error, _} -> #{is_alive => false} {ok, St} -> [maps:put(node, Node, St)];
end, {error, _} -> [maps:put(node, Node, #{is_alive => false})]
maps:put(node, Node, St) end
end || Node <- ekka_mnesia:running_nodes()], || Node <- ekka_mnesia:running_nodes()]),
return({ok, maps:put(status, Status, record_to_map(R))}); return({ok, maps:put(status, Status, record_to_map(R))});
not_found -> not_found ->
return({error, 404, <<"Not Found">>}) return({error, 404, <<"Not Found">>})
@ -575,9 +575,17 @@ sort_by(Pos, TplList) ->
end, TplList). end, TplList).
get_rule_metrics(Id) -> get_rule_metrics(Id) ->
[maps:put(node, Node, rpc:call(Node, emqx_rule_metrics, get_rule_metrics, [Id])) lists:flatten(
|| Node <- ekka_mnesia:running_nodes()]. [ case rpc:call(Node, emqx_rule_metrics, get_rule_metrics, [Id]) of
{badrpc, _} -> [];
Res -> [maps:put(node, Node, Res)]
end
|| Node <- ekka_mnesia:running_nodes()]).
get_action_metrics(Id) -> get_action_metrics(Id) ->
[maps:put(node, Node, rpc:call(Node, emqx_rule_metrics, get_action_metrics, [Id])) lists:flatten(
|| Node <- ekka_mnesia:running_nodes()]. [ case rpc:call(Node, emqx_rule_metrics, get_action_metrics, [Id]) of
{badrpc, _} -> [];
Res -> [maps:put(node, Node, Res)]
end
|| Node <- ekka_mnesia:running_nodes()]).

View File

@ -273,10 +273,13 @@ format(#resource{id = Id,
config = Config, config = Config,
description = Descr}) -> description = Descr}) ->
Status = Status =
[begin lists:flatten(
{ok, St} = rpc:call(Node, emqx_rule_engine, get_resource_status, [Id]), [ case rpc:call(Node, emqx_rule_engine, get_resource_status, [Id]) of
maps:put(node, Node, St) {badrpc, _} -> [];
end || Node <- [node()| nodes()]], {ok, St} -> [maps:put(node, Node, St)];
{error, _} -> [maps:put(node, Node, #{is_alive => false})]
end
|| Node <- ekka_mnesia:running_nodes()]),
lists:flatten(io_lib:format("resource(id='~s', type='~s', config=~0p, status=~0p, description='~s')~n", [Id, Type, Config, Status, Descr])); lists:flatten(io_lib:format("resource(id='~s', type='~s', config=~0p, status=~0p, description='~s')~n", [Id, Type, Config, Status, Descr]));
format(#resource_type{name = Name, format(#resource_type{name = Name,
@ -369,12 +372,20 @@ get_actions() ->
emqx_rule_registry:get_actions(). emqx_rule_registry:get_actions().
get_rule_metrics(Id) -> get_rule_metrics(Id) ->
[maps:put(node, Node, rpc:call(Node, emqx_rule_metrics, get_rule_metrics, [Id])) lists:flatten(
|| Node <- [node()| nodes()]]. [ case rpc:call(Node, emqx_rule_metrics, get_rule_metrics, [Id]) of
{badrpc, _} -> [];
Res -> [maps:put(node, Node, Res)]
end
|| Node <- ekka_mnesia:running_nodes()]).
get_action_metrics(Id) -> get_action_metrics(Id) ->
[maps:put(node, Node, rpc:call(Node, emqx_rule_metrics, get_action_metrics, [Id])) lists:flatten(
|| Node <- [node()| nodes()]]. [ case rpc:call(Node, emqx_rule_metrics, get_action_metrics, [Id]) of
{badrpc, _} -> [];
Res -> [maps:put(node, Node, Res)]
end
|| Node <- ekka_mnesia:running_nodes()]).
on_failed(continue) -> continue; on_failed(continue) -> continue;
on_failed(stop) -> stop; on_failed(stop) -> stop;