From f54bda70637cd02bb2bafca6deffc1234cb438de Mon Sep 17 00:00:00 2001 From: Serge Tupchii Date: Thu, 30 Nov 2023 19:10:12 +0200 Subject: [PATCH] fix(emqx_mgmt_api_data_backup): add count and hasnext meta paging params --- .../src/emqx_mgmt_api_data_backup.erl | 8 ++++++-- .../test/emqx_mgmt_api_data_backup_SUITE.erl | 20 ++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/apps/emqx_management/src/emqx_mgmt_api_data_backup.erl b/apps/emqx_management/src/emqx_mgmt_api_data_backup.erl index 7cd151b08..ef0b095cb 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_data_backup.erl +++ b/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(), diff --git a/apps/emqx_management/test/emqx_mgmt_api_data_backup_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_data_backup_SUITE.erl index cef32ab92..c2e01fedc 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_data_backup_SUITE.erl +++ b/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).