Browse Source

fix(mgmt): fix subscription info format

JimMoen 4 years atrás
parent
commit
f2cfde7421

+ 1 - 0
.gitignore

@@ -59,3 +59,4 @@ erlang_ls.config
 *#
 *#
 # For direnv
 # For direnv
 .envrc
 .envrc
+mix.lock

+ 13 - 11
apps/emqx_management/src/emqx_mgmt.erl

@@ -58,8 +58,8 @@
 -export([ list_subscriptions/1
 -export([ list_subscriptions/1
         , list_subscriptions_via_topic/2
         , list_subscriptions_via_topic/2
         , list_subscriptions_via_topic/3
         , list_subscriptions_via_topic/3
-        , lookup_subscriptions/1
         , lookup_subscriptions/2
         , lookup_subscriptions/2
+        , lookup_subscriptions/3
         ]).
         ]).
 
 
 %% Routes
 %% Routes
@@ -322,18 +322,20 @@ list_subscriptions_via_topic(Node, Topic, {M,F}) when Node =:= node() ->
 list_subscriptions_via_topic(Node, Topic, FormatFun) ->
 list_subscriptions_via_topic(Node, Topic, FormatFun) ->
     rpc_call(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
 %% Routes

+ 2 - 2
apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl

@@ -85,10 +85,10 @@ list(#{node := Node} = Bindings, Params) ->
     end.
     end.
 
 
 lookup(#{node := Node, clientid := ClientId}, _Params) ->
 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) ->
 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(Items) when is_list(Items) ->
     [format(Item) || Item <- Items];
     [format(Item) || Item <- Items];