Explorar o código

fix(emqx_mgmt_api_data_backup): add count and hasnext meta paging params

Serge Tupchii %!s(int64=2) %!d(string=hai) anos
pai
achega
f54bda7063

+ 6 - 2
apps/emqx_management/src/emqx_mgmt_api_data_backup.erl

@@ -240,7 +240,8 @@ data_files(get, #{query_string := PageParams}) ->
         false ->
             {400, #{code => ?BAD_REQUEST, message => <<"page_limit_invalid">>}};
         #{page := Page, limit := Limit} = Pager ->
-            {200, #{data => list_backup_files(Page, Limit), meta => Pager}}
+            {Count, HasNext, Data} = list_backup_files(Page, Limit),
+            {200, #{data => Data, meta => Pager#{count => Count, hasnext => HasNext}}}
     end.
 
 data_file_by_name(Method, #{bindings := #{filename := Filename}, query_string := QS}) ->
@@ -295,7 +296,10 @@ response({error, Reason}) ->
 
 list_backup_files(Page, Limit) ->
     Start = Page * Limit - Limit + 1,
-    lists:sublist(list_backup_files(), Start, Limit).
+    AllFiles = list_backup_files(),
+    Count = length(AllFiles),
+    HasNext = Start + Limit - 1 < Count,
+    {Count, HasNext, lists:sublist(AllFiles, Start, Limit)}.
 
 list_backup_files() ->
     Nodes = emqx:running_nodes(),

+ 15 - 5
apps/emqx_management/test/emqx_mgmt_api_data_backup_SUITE.erl

@@ -80,22 +80,32 @@ t_list_backups(Config) ->
     [{ok, _} = export_backup(?NODE2_PORT, Auth) || _ <- lists:seq(1, 10)],
 
     {ok, RespBody} = list_backups(?NODE1_PORT, Auth, <<"1">>, <<"100">>),
-    #{<<"data">> := Data, <<"meta">> := _} = emqx_utils_json:decode(RespBody),
+    #{<<"data">> := Data, <<"meta">> := #{<<"count">> := 20, <<"hasnext">> := false}} = emqx_utils_json:decode(
+        RespBody
+    ),
     ?assertEqual(20, length(Data)),
 
     {ok, EmptyRespBody} = list_backups(?NODE2_PORT, Auth, <<"2">>, <<"100">>),
-    #{<<"data">> := EmptyData, <<"meta">> := _} = emqx_utils_json:decode(EmptyRespBody),
+    #{<<"data">> := EmptyData, <<"meta">> := #{<<"count">> := 20, <<"hasnext">> := false}} = emqx_utils_json:decode(
+        EmptyRespBody
+    ),
     ?assertEqual(0, length(EmptyData)),
 
     {ok, RespBodyP1} = list_backups(?NODE3_PORT, Auth, <<"1">>, <<"10">>),
     {ok, RespBodyP2} = list_backups(?NODE3_PORT, Auth, <<"2">>, <<"10">>),
     {ok, RespBodyP3} = list_backups(?NODE3_PORT, Auth, <<"3">>, <<"10">>),
 
-    #{<<"data">> := DataP1, <<"meta">> := _} = emqx_utils_json:decode(RespBodyP1),
+    #{<<"data">> := DataP1, <<"meta">> := #{<<"count">> := 20, <<"hasnext">> := true}} = emqx_utils_json:decode(
+        RespBodyP1
+    ),
     ?assertEqual(10, length(DataP1)),
-    #{<<"data">> := DataP2, <<"meta">> := _} = emqx_utils_json:decode(RespBodyP2),
+    #{<<"data">> := DataP2, <<"meta">> := #{<<"count">> := 20, <<"hasnext">> := false}} = emqx_utils_json:decode(
+        RespBodyP2
+    ),
     ?assertEqual(10, length(DataP2)),
-    #{<<"data">> := DataP3, <<"meta">> := _} = emqx_utils_json:decode(RespBodyP3),
+    #{<<"data">> := DataP3, <<"meta">> := #{<<"count">> := 20, <<"hasnext">> := false}} = emqx_utils_json:decode(
+        RespBodyP3
+    ),
     ?assertEqual(0, length(DataP3)),
 
     ?assertEqual(Data, DataP1 ++ DataP2).