Просмотр исходного кода

feat: support retainer Start Length command

zhongwencool 2 лет назад
Родитель
Сommit
f4a88f717b

+ 1 - 1
apps/emqx_retainer/src/emqx_retainer.app.src

@@ -2,7 +2,7 @@
 {application, emqx_retainer, [
     {description, "EMQX Retainer"},
     % strict semver, bump manually!
-    {vsn, "5.0.17"},
+    {vsn, "5.0.18"},
     {modules, []},
     {registered, [emqx_retainer_sup]},
     {applications, [kernel, stdlib, emqx, emqx_ctl]},

+ 16 - 4
apps/emqx_retainer/src/emqx_retainer_mnesia_cli.erl

@@ -32,10 +32,11 @@ load() ->
     ok = emqx_ctl:register_command(retainer, {?MODULE, retainer}, []).
 
 retainer(["info"]) ->
-    ?PRINT("Number of retained messages: ~p~n", [emqx_retainer:retained_count()]);
+    count();
 retainer(["topics"]) ->
-    [?PRINT("~ts~n", [I]) || I <- emqx_retainer_mnesia:topics()],
-    ok;
+    topic(1, 1000);
+retainer(["topics", Start, Len]) ->
+    topic(list_to_integer(Start), list_to_integer(Len));
 retainer(["clean", Topic]) ->
     emqx_retainer:delete(list_to_binary(Topic));
 retainer(["clean"]) ->
@@ -65,7 +66,9 @@ retainer(_) ->
     emqx_ctl:usage(
         [
             {"retainer info", "Show the count of retained messages"},
-            {"retainer topics", "Show all topics of retained messages"},
+            {"retainer topics", "Same as retainer topic 1 1000"},
+            {"retainer topics <Start> <Length>",
+                "Show topics of retained messages by the specified range"},
             {"retainer clean", "Clean all retained messages"},
             {"retainer clean <Topic>", "Clean retained messages by the specified topic filter"},
             {"retainer reindex status", "Show reindex status"},
@@ -98,3 +101,12 @@ do_reindex(Force) ->
         end
     ),
     ?PRINT_MSG("Reindexing finished~n").
+
+count() ->
+    ?PRINT("Number of retained messages: ~p~n", [emqx_retainer:retained_count()]).
+
+topic(Start, Len) ->
+    count(),
+    Topics = lists:sublist(emqx_retainer_mnesia:topics(), Start, Len),
+    [?PRINT("~ts~n", [I]) || I <- Topics],
+    ok.

+ 3 - 0
apps/emqx_retainer/test/emqx_retainer_cli_SUITE.erl

@@ -44,6 +44,9 @@ t_info(_Config) ->
 t_topics(_Config) ->
     ok = emqx_retainer_mnesia_cli:retainer(["topics"]).
 
+t_topics_with_len(_Config) ->
+    ok = emqx_retainer_mnesia_cli:retainer(["topics", "100", "200"]).
+
 t_clean(_Config) ->
     ok = emqx_retainer_mnesia_cli:retainer(["clean"]).