diff --git a/apps/emqx_management/src/emqx_mgmt_api.erl b/apps/emqx_management/src/emqx_mgmt_api.erl index c34791b57..7550e8bce 100644 --- a/apps/emqx_management/src/emqx_mgmt_api.erl +++ b/apps/emqx_management/src/emqx_mgmt_api.erl @@ -30,6 +30,10 @@ -export([do_query/5]). +-export([ page/1 + , limit/1 + ]). + paginate(Tables, Params, RowFun) -> Qh = query_handle(Tables), Count = count(Tables), diff --git a/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl b/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl index 464df33c9..2554c1f94 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl @@ -64,8 +64,10 @@ list(Bindings, Params) when map_size(Bindings) == 0 -> case proplists:get_value(<<"topic">>, Params) of undefined -> minirest:return({ok, emqx_mgmt_api:cluster_query(Params, ?SUBS_QS_SCHEMA, ?query_fun)}); - Topic -> - minirest:return({ok, emqx_mgmt:list_subscriptions_via_topic(emqx_mgmt_util:urldecode(Topic), ?format_fun)}) + Topic0 -> + Topic = emqx_mgmt_util:urldecode(Topic0), + Data = emqx_mgmt:list_subscriptions_via_topic(Topic, ?format_fun), + minirest:return({ok, add_meta(Params, Data)}) end; list(#{node := Node} = Bindings, Params) -> @@ -80,10 +82,26 @@ list(#{node := Node} = Bindings, Params) -> Res -> Res end end; - Topic -> - minirest:return({ok, emqx_mgmt:list_subscriptions_via_topic(Node, emqx_mgmt_util:urldecode(Topic), ?format_fun)}) + Topic0 -> + Topic = emqx_mgmt_util:urldecode(Topic0), + Data = emqx_mgmt:list_subscriptions_via_topic(Node, Topic, ?format_fun), + minirest:return({ok, add_meta(Params, Data)}) end. +add_meta(Params, List) -> + Page = emqx_mgmt_api:page(Params), + Limit = emqx_mgmt_api:limit(Params), + Data = lists:sublist(List, (Page - 1) * Limit + 1, Limit), + #{meta => #{ + page => Page, + limit => Limit, + hasnext => erlang:length(Data) >= Limit, + count => erlang:length(List) + }, + data => Data, + code => 0 + }. + lookup(#{node := Node, clientid := ClientId}, _Params) -> minirest:return({ok, emqx_mgmt:lookup_subscriptions(Node, emqx_mgmt_util:urldecode(ClientId), ?format_fun)});