diff --git a/.gitignore b/.gitignore index bbb4edebb..13217dc00 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,4 @@ erlang_ls.config *# # For direnv .envrc +mix.lock diff --git a/apps/emqx_management/src/emqx_mgmt.erl b/apps/emqx_management/src/emqx_mgmt.erl index 39595b104..e68a6163f 100644 --- a/apps/emqx_management/src/emqx_mgmt.erl +++ b/apps/emqx_management/src/emqx_mgmt.erl @@ -58,8 +58,8 @@ -export([ list_subscriptions/1 , list_subscriptions_via_topic/2 , list_subscriptions_via_topic/3 - , lookup_subscriptions/1 , lookup_subscriptions/2 + , lookup_subscriptions/3 ]). %% Routes @@ -322,18 +322,20 @@ list_subscriptions_via_topic(Node, Topic, {M,F}) when Node =:= node() -> list_subscriptions_via_topic(Node, Topic, FormatFun) -> rpc_call(Node, list_subscriptions_via_topic, [Node, Topic, FormatFun]). -lookup_subscriptions(ClientId) -> - lists:append([lookup_subscriptions(Node, ClientId) || Node <- ekka_mnesia:running_nodes()]). +lookup_subscriptions(ClientId, FormatFun) -> + lists:append([lookup_subscriptions(Node, ClientId, FormatFun) || Node <- ekka_mnesia:running_nodes()]). -lookup_subscriptions(Node, ClientId) when Node =:= node() -> - case ets:lookup(emqx_subid, ClientId) of - [] -> []; - [{_, Pid}] -> - ets:match_object(emqx_suboption, {{Pid, '_'}, '_'}) - end; +lookup_subscriptions(Node, ClientId, {M, F}) when Node =:= node() -> + Result = case ets:lookup(emqx_subid, ClientId) of + [] -> []; + [{_, Pid}] -> + ets:match_object(emqx_suboption, {{Pid, '_'}, '_'}) + end, + %% format at the called node + erlang:apply(M, F, [Result]); -lookup_subscriptions(Node, ClientId) -> - rpc_call(Node, lookup_subscriptions, [Node, ClientId]). +lookup_subscriptions(Node, ClientId, FormatFun) -> + rpc_call(Node, lookup_subscriptions, [Node, ClientId, FormatFun]). %%-------------------------------------------------------------------- %% Routes diff --git a/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl b/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl index 4165ca51a..464df33c9 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl @@ -85,10 +85,10 @@ list(#{node := Node} = Bindings, Params) -> end. lookup(#{node := Node, clientid := ClientId}, _Params) -> - minirest:return({ok, format(emqx_mgmt:lookup_subscriptions(Node, emqx_mgmt_util:urldecode(ClientId)))}); + minirest:return({ok, emqx_mgmt:lookup_subscriptions(Node, emqx_mgmt_util:urldecode(ClientId), ?format_fun)}); lookup(#{clientid := ClientId}, _Params) -> - minirest:return({ok, format(emqx_mgmt:lookup_subscriptions(emqx_mgmt_util:urldecode(ClientId)))}). + minirest:return({ok, emqx_mgmt:lookup_subscriptions(emqx_mgmt_util:urldecode(ClientId), ?format_fun)}). format(Items) when is_list(Items) -> [format(Item) || Item <- Items];