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

This commit is contained in:
Serge Tupchii 2023-11-30 19:10:12 +02:00
parent 41194cacc8
commit f54bda7063
2 changed files with 21 additions and 7 deletions

View File

@ -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(),

View File

@ -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).