From 9b3a6aa635bd3f10a37b28183b22cf035bdcabe3 Mon Sep 17 00:00:00 2001 From: JianBo He Date: Mon, 1 Feb 2021 11:13:47 +0800 Subject: [PATCH] fix(mgmt): fix client formating crash see: https://github.com/emqx/emqx/issues/3868 --- lib-opensource/emqx_management/src/emqx_mgmt.erl | 4 ++-- .../emqx_management/src/emqx_mgmt_api_clients.erl | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib-opensource/emqx_management/src/emqx_mgmt.erl b/lib-opensource/emqx_management/src/emqx_mgmt.erl index 4174f3224..d4f75ca94 100644 --- a/lib-opensource/emqx_management/src/emqx_mgmt.erl +++ b/lib-opensource/emqx_management/src/emqx_mgmt.erl @@ -919,7 +919,7 @@ get_telemetry_data() -> item(client, {ClientId, ChanPid}) -> Attrs = case emqx_cm:get_chan_info(ClientId, ChanPid) of - undefined -> #{}; + undefined -> throw(gone); Attrs0 -> Attrs0 end, Stats = case emqx_cm:get_chan_stats(ClientId, ChanPid) of @@ -933,7 +933,7 @@ item(client, {ClientId, ChanPid}) -> _Sess -> _Sess end, SessCreated = maps:get(created_at, Session, maps:get(connected_at, ConnInfo)), - Connected = case maps:get(conn_state, Attrs) of + Connected = case maps:get(conn_state, Attrs, connected) of connected -> true; _ -> false end, diff --git a/lib-opensource/emqx_management/src/emqx_mgmt_api_clients.erl b/lib-opensource/emqx_management/src/emqx_mgmt_api_clients.erl index db0884383..e9cd83139 100644 --- a/lib-opensource/emqx_management/src/emqx_mgmt_api_clients.erl +++ b/lib-opensource/emqx_management/src/emqx_mgmt_api_clients.erl @@ -250,7 +250,15 @@ parse_ratelimit_str(S) -> %% Format format(Items) when is_list(Items) -> - [format(Item) || Item <- Items]; + lists:foldr( + fun(Item, Acc) -> + try + [format(Item) | Acc] + catch + throw:gone:_Stk -> + Acc + end + end, [], Items); format(Key) when is_tuple(Key) -> format(emqx_mgmt:item(client, Key)); format(Data) when is_map(Data)->