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

docs: make sure there is a summary for all API endpoints

Many HTTP API endpoints did not have a summary when looking at the API
docs at "http://emqx_host_name:18083/api-docs". This has been fixed by
making sure there is a summary corresponding to all endpoints.

Fixes:
https://emqx.atlassian.net/browse/EMQX-9767
Kjell Winblad 2 лет назад
Родитель
Сommit
ab8b8ccaad
48 измененных файлов с 871 добавлено и 107 удалено
  1. 1 1
      apps/emqx_dashboard/src/emqx_dashboard.app.src
  2. 3 2
      apps/emqx_dashboard/src/emqx_dashboard_error_code_api.erl
  3. 5 4
      apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl
  4. 1 1
      apps/emqx_management/src/emqx_management.app.src
  5. 6 5
      apps/emqx_management/src/emqx_mgmt_api_api_keys.erl
  6. 12 11
      apps/emqx_management/src/emqx_mgmt_api_clients.erl
  7. 3 3
      apps/emqx_management/src/emqx_mgmt_api_cluster.erl
  8. 21 24
      apps/emqx_management/src/emqx_mgmt_api_configs.erl
  9. 10 10
      apps/emqx_management/src/emqx_mgmt_api_listeners.erl
  10. 2 1
      apps/emqx_management/src/emqx_mgmt_api_metrics.erl
  11. 5 4
      apps/emqx_management/src/emqx_mgmt_api_nodes.erl
  12. 2 1
      apps/emqx_management/src/emqx_mgmt_api_stats.erl
  13. 2 1
      apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl
  14. 3 2
      apps/emqx_management/src/emqx_mgmt_api_topics.erl
  15. 23 23
      apps/emqx_management/src/emqx_mgmt_api_trace.erl
  16. 1 1
      apps/emqx_prometheus/src/emqx_prometheus.app.src
  17. 4 3
      apps/emqx_prometheus/src/emqx_prometheus_api.erl
  18. 1 0
      changes/ce/fix-10724.en.md
  19. 58 0
      rel/i18n/emqx_authn_api.hocon
  20. 4 0
      rel/i18n/emqx_authn_user_import_api.hocon
  21. 2 0
      rel/i18n/emqx_authz_api_cache.hocon
  22. 28 5
      rel/i18n/emqx_authz_api_mnesia.hocon
  23. 14 4
      rel/i18n/emqx_authz_api_sources.hocon
  24. 6 0
      rel/i18n/emqx_auto_subscribe_api.hocon
  25. 16 0
      rel/i18n/emqx_dashboard_api.hocon
  26. 13 0
      rel/i18n/emqx_dashboard_error_code_api.hocon
  27. 23 0
      rel/i18n/emqx_dashboard_monitor_api.hocon
  28. 46 0
      rel/i18n/emqx_delayed_api.hocon
  29. 44 1
      rel/i18n/emqx_exhook_api.hocon
  30. 4 0
      rel/i18n/emqx_mgmt_api_alarms.hocon
  31. 33 0
      rel/i18n/emqx_mgmt_api_api_keys.hocon
  32. 6 0
      rel/i18n/emqx_mgmt_api_banned.hocon
  33. 58 0
      rel/i18n/emqx_mgmt_api_clients.hocon
  34. 18 0
      rel/i18n/emqx_mgmt_api_cluster.hocon
  35. 40 0
      rel/i18n/emqx_mgmt_api_configs.hocon
  36. 59 0
      rel/i18n/emqx_mgmt_api_listeners.hocon
  37. 8 0
      rel/i18n/emqx_mgmt_api_metrics.hocon
  38. 23 0
      rel/i18n/emqx_mgmt_api_nodes.hocon
  39. 8 0
      rel/i18n/emqx_mgmt_api_stats.hocon
  40. 8 0
      rel/i18n/emqx_mgmt_api_subscriptions.hocon
  41. 13 0
      rel/i18n/emqx_mgmt_api_topics.hocon
  42. 118 0
      rel/i18n/emqx_mgmt_api_trace.hocon
  43. 18 0
      rel/i18n/emqx_prometheus_api.hocon
  44. 10 0
      rel/i18n/emqx_retainer_api.hocon
  45. 6 0
      rel/i18n/emqx_rewrite_api.hocon
  46. 8 0
      rel/i18n/emqx_slow_subs_api.hocon
  47. 6 0
      rel/i18n/emqx_telemetry_api.hocon
  48. 68 0
      rel/i18n/emqx_topic_metrics_api.hocon

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

@@ -2,7 +2,7 @@
 {application, emqx_dashboard, [
     {description, "EMQX Web Dashboard"},
     % strict semver, bump manually!
-    {vsn, "5.0.20"},
+    {vsn, "5.0.21"},
     {modules, []},
     {registered, [emqx_dashboard_sup]},
     {applications, [kernel, stdlib, mnesia, minirest, emqx, emqx_ctl]},

+ 3 - 2
apps/emqx_dashboard/src/emqx_dashboard_error_code_api.erl

@@ -20,6 +20,7 @@
 -include_lib("emqx/include/http_api.hrl").
 -include("emqx_dashboard.hrl").
 -include_lib("typerefl/include/types.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 -export([
     api_spec/0,
@@ -50,7 +51,7 @@ schema("/error_codes") ->
         'operationId' => error_codes,
         get => #{
             security => [],
-            description => <<"API Error Codes">>,
+            description => ?DESC(error_codes),
             tags => [<<"Error Codes">>],
             responses => #{
                 200 => hoconsc:array(hoconsc:ref(?MODULE, error_code))
@@ -62,7 +63,7 @@ schema("/error_codes/:code") ->
         'operationId' => error_code,
         get => #{
             security => [],
-            description => <<"API Error Codes">>,
+            description => ?DESC(error_codes_u),
             tags => [<<"Error Codes">>],
             parameters => [
                 {code,

+ 5 - 4
apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl

@@ -6,6 +6,7 @@
 
 -include("emqx_dashboard.hrl").
 -include_lib("typerefl/include/types.hrl").
+-include_lib("hocon/include/hocon_types.hrl").
 
 -behaviour(minirest_api).
 
@@ -38,7 +39,7 @@ schema("/monitor") ->
         'operationId' => monitor,
         get => #{
             tags => [<<"Metrics">>],
-            desc => <<"List monitor data.">>,
+            description => ?DESC(list_monitor),
             parameters => [parameter_latest()],
             responses => #{
                 200 => hoconsc:mk(hoconsc:array(hoconsc:ref(sampler)), #{}),
@@ -51,7 +52,7 @@ schema("/monitor/nodes/:node") ->
         'operationId' => monitor,
         get => #{
             tags => [<<"Metrics">>],
-            desc => <<"List the monitor data on the node.">>,
+            description => ?DESC(list_monitor_node),
             parameters => [parameter_node(), parameter_latest()],
             responses => #{
                 200 => hoconsc:mk(hoconsc:array(hoconsc:ref(sampler)), #{}),
@@ -64,7 +65,7 @@ schema("/monitor_current") ->
         'operationId' => monitor_current,
         get => #{
             tags => [<<"Metrics">>],
-            desc => <<"Current status. Gauge and rate.">>,
+            description => ?DESC(current_status),
             responses => #{
                 200 => hoconsc:mk(hoconsc:ref(sampler_current), #{})
             }
@@ -75,7 +76,7 @@ schema("/monitor_current/nodes/:node") ->
         'operationId' => monitor_current,
         get => #{
             tags => [<<"Metrics">>],
-            desc => <<"Node current status. Gauge and rate.">>,
+            description => ?DESC(current_status_node),
             parameters => [parameter_node()],
             responses => #{
                 200 => hoconsc:mk(hoconsc:ref(sampler_current), #{}),

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

@@ -2,7 +2,7 @@
 {application, emqx_management, [
     {description, "EMQX Management API and CLI"},
     % strict semver, bump manually!
-    {vsn, "5.0.21"},
+    {vsn, "5.0.22"},
     {modules, []},
     {registered, [emqx_management_sup]},
     {applications, [kernel, stdlib, emqx_plugins, minirest, emqx, emqx_ctl]},

+ 6 - 5
apps/emqx_management/src/emqx_mgmt_api_api_keys.erl

@@ -18,6 +18,7 @@
 -behaviour(minirest_api).
 
 -include_lib("typerefl/include/types.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 -export([api_spec/0, fields/1, paths/0, schema/1, namespace/0]).
 -export([api_key/2, api_key_by_name/2]).
@@ -36,14 +37,14 @@ schema("/api_key") ->
     #{
         'operationId' => api_key,
         get => #{
-            description => "Return api_key list",
+            description => ?DESC(api_key_list),
             tags => ?TAGS,
             responses => #{
                 200 => delete([api_secret], fields(app))
             }
         },
         post => #{
-            description => "Create new api_key",
+            description => ?DESC(create_new_api_key),
             tags => ?TAGS,
             'requestBody' => delete([created_at, api_key, api_secret], fields(app)),
             responses => #{
@@ -56,7 +57,7 @@ schema("/api_key/:name") ->
     #{
         'operationId' => api_key_by_name,
         get => #{
-            description => "Return the specific api_key",
+            description => ?DESC(get_api_key),
             tags => ?TAGS,
             parameters => [hoconsc:ref(name)],
             responses => #{
@@ -65,7 +66,7 @@ schema("/api_key/:name") ->
             }
         },
         put => #{
-            description => "Update the specific api_key",
+            description => ?DESC(update_api_key),
             tags => ?TAGS,
             parameters => [hoconsc:ref(name)],
             'requestBody' => delete([created_at, api_key, api_secret, name], fields(app)),
@@ -75,7 +76,7 @@ schema("/api_key/:name") ->
             }
         },
         delete => #{
-            description => "Delete the specific api_key",
+            description => ?DESC(delete_api_key),
             tags => ?TAGS,
             parameters => [hoconsc:ref(name)],
             responses => #{

+ 12 - 11
apps/emqx_management/src/emqx_mgmt_api_clients.erl

@@ -20,6 +20,7 @@
 
 -include_lib("typerefl/include/types.hrl").
 -include_lib("emqx/include/emqx.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 -include_lib("emqx/include/logger.hrl").
 
@@ -101,7 +102,7 @@ schema("/clients") ->
     #{
         'operationId' => clients,
         get => #{
-            description => <<"List clients">>,
+            description => ?DESC(list_clients),
             tags => ?TAGS,
             parameters => [
                 hoconsc:ref(emqx_dashboard_swagger, page),
@@ -214,7 +215,7 @@ schema("/clients/:clientid") ->
     #{
         'operationId' => client,
         get => #{
-            description => <<"Get clients info by client ID">>,
+            description => ?DESC(clients_info_from_id),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             responses => #{
@@ -225,7 +226,7 @@ schema("/clients/:clientid") ->
             }
         },
         delete => #{
-            description => <<"Kick out client by client ID">>,
+            description => ?DESC(kick_client_id),
             tags => ?TAGS,
             parameters => [
                 {clientid, hoconsc:mk(binary(), #{in => path})}
@@ -242,7 +243,7 @@ schema("/clients/:clientid/authorization/cache") ->
     #{
         'operationId' => authz_cache,
         get => #{
-            description => <<"Get client authz cache in the cluster.">>,
+            description => ?DESC(get_authz_cache),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             responses => #{
@@ -253,7 +254,7 @@ schema("/clients/:clientid/authorization/cache") ->
             }
         },
         delete => #{
-            description => <<"Clean client authz cache in the cluster.">>,
+            description => ?DESC(clean_authz_cache),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             responses => #{
@@ -268,7 +269,7 @@ schema("/clients/:clientid/subscriptions") ->
     #{
         'operationId' => subscriptions,
         get => #{
-            description => <<"Get client subscriptions">>,
+            description => ?DESC(get_client_subs),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             responses => #{
@@ -285,7 +286,7 @@ schema("/clients/:clientid/subscribe") ->
     #{
         'operationId' => subscribe,
         post => #{
-            description => <<"Subscribe">>,
+            description => ?DESC(subscribe),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             'requestBody' => hoconsc:mk(hoconsc:ref(?MODULE, subscribe)),
@@ -301,7 +302,7 @@ schema("/clients/:clientid/subscribe/bulk") ->
     #{
         'operationId' => subscribe_batch,
         post => #{
-            description => <<"Subscribe">>,
+            description => ?DESC(subscribe_g),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             'requestBody' => hoconsc:mk(hoconsc:array(hoconsc:ref(?MODULE, subscribe))),
@@ -317,7 +318,7 @@ schema("/clients/:clientid/unsubscribe") ->
     #{
         'operationId' => unsubscribe,
         post => #{
-            description => <<"Unsubscribe">>,
+            description => ?DESC(unsubscribe),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             'requestBody' => hoconsc:mk(hoconsc:ref(?MODULE, unsubscribe)),
@@ -333,7 +334,7 @@ schema("/clients/:clientid/unsubscribe/bulk") ->
     #{
         'operationId' => unsubscribe_batch,
         post => #{
-            description => <<"Unsubscribe">>,
+            description => ?DESC(unsubscribe_g),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             'requestBody' => hoconsc:mk(hoconsc:array(hoconsc:ref(?MODULE, unsubscribe))),
@@ -349,7 +350,7 @@ schema("/clients/:clientid/keepalive") ->
     #{
         'operationId' => set_keepalive,
         put => #{
-            description => <<"Set the online client keepalive by seconds">>,
+            description => ?DESC(set_keepalive_seconds),
             tags => ?TAGS,
             parameters => [{clientid, hoconsc:mk(binary(), #{in => path})}],
             'requestBody' => hoconsc:mk(hoconsc:ref(?MODULE, keepalive)),

+ 3 - 3
apps/emqx_management/src/emqx_mgmt_api_cluster.erl

@@ -39,7 +39,7 @@ schema("/cluster") ->
     #{
         'operationId' => cluster_info,
         get => #{
-            description => "Get cluster info",
+            desc => ?DESC(get_cluster_info),
             tags => [<<"Cluster">>],
             responses => #{
                 200 => [
@@ -54,7 +54,7 @@ schema("/cluster/:node/invite") ->
     #{
         'operationId' => invite_node,
         put => #{
-            description => "Invite node to cluster",
+            desc => ?DESC(invite_node),
             tags => [<<"Cluster">>],
             parameters => [hoconsc:ref(node)],
             responses => #{
@@ -67,7 +67,7 @@ schema("/cluster/:node/force_leave") ->
     #{
         'operationId' => force_leave,
         delete => #{
-            description => "Force leave node from cluster",
+            desc => ?DESC(force_remove_node),
             tags => [<<"Cluster">>],
             parameters => [hoconsc:ref(node)],
             responses => #{

+ 21 - 24
apps/emqx_management/src/emqx_mgmt_api_configs.erl

@@ -67,8 +67,7 @@ schema("/configs") ->
         'operationId' => configs,
         get => #{
             tags => ?TAGS,
-            description =>
-                <<"Get all the configurations of the specified node, including hot and non-hot updatable items.">>,
+            description => ?DESC(get_conf_node),
             parameters => [
                 {node,
                     hoconsc:mk(
@@ -77,8 +76,7 @@ schema("/configs") ->
                             in => query,
                             required => false,
                             example => <<"emqx@127.0.0.1">>,
-                            desc =>
-                                <<"Node's name: If you do not fill in the fields, this node will be used by default.">>
+                            description => ?DESC(node_name)
                         }
                     )}
             ],
@@ -95,12 +93,7 @@ schema("/configs_reset/:rootname") ->
         'operationId' => config_reset,
         post => #{
             tags => ?TAGS,
-            description =>
-                <<
-                    "Reset the config entry specified by the query string parameter `conf_path`.<br/>"
-                    "- For a config entry that has default value, this resets it to the default value;\n"
-                    "- For a config entry that has no default value, an error 400 will be returned"
-                >>,
+            description => ?DESC(rest_conf_query),
             %% We only return "200" rather than the new configs that has been changed, as
             %% the schema of the changed configs is depends on the request parameter
             %% `conf_path`, it cannot be defined here.
@@ -134,12 +127,12 @@ schema("/configs/global_zone") ->
         'operationId' => global_zone_configs,
         get => #{
             tags => ?TAGS,
-            description => <<"Get the global zone configs">>,
+            description => ?DESC(get_global_zone_configs),
             responses => #{200 => Schema}
         },
         put => #{
             tags => ?TAGS,
-            description => <<"Update globbal zone configs">>,
+            description => ?DESC(update_globar_zone_configs),
             'requestBody' => Schema,
             responses => #{
                 200 => Schema,
@@ -153,7 +146,7 @@ schema("/configs/limiter") ->
         'operationId' => limiter,
         get => #{
             tags => ?TAGS,
-            description => <<"Get the node-level limiter configs">>,
+            description => ?DESC(get_node_level_limiter_congigs),
             responses => #{
                 200 => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
                 404 => emqx_dashboard_swagger:error_codes(['NOT_FOUND'], <<"config not found">>)
@@ -161,7 +154,7 @@ schema("/configs/limiter") ->
         },
         put => #{
             tags => ?TAGS,
-            description => <<"Update the node-level limiter configs">>,
+            description => ?DESC(update_node_level_limiter_congigs),
             'requestBody' => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
             responses => #{
                 200 => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
@@ -172,15 +165,22 @@ schema("/configs/limiter") ->
     };
 schema(Path) ->
     {RootKey, {_Root, Schema}} = find_schema(Path),
+    GetDesc = iolist_to_binary([
+        <<"Get the sub-configurations under *">>,
+        RootKey,
+        <<"*">>
+    ]),
+    PutDesc = iolist_to_binary([
+        <<"Update the sub-configurations under *">>,
+        RootKey,
+        <<"*">>
+    ]),
     #{
         'operationId' => config,
         get => #{
             tags => ?TAGS,
-            description => iolist_to_binary([
-                <<"Get the sub-configurations under *">>,
-                RootKey,
-                <<"*">>
-            ]),
+            desc => GetDesc,
+            summary => GetDesc,
             responses => #{
                 200 => Schema,
                 404 => emqx_dashboard_swagger:error_codes(['NOT_FOUND'], <<"config not found">>)
@@ -188,11 +188,8 @@ schema(Path) ->
         },
         put => #{
             tags => ?TAGS,
-            description => iolist_to_binary([
-                <<"Update the sub-configurations under *">>,
-                RootKey,
-                <<"*">>
-            ]),
+            desc => PutDesc,
+            summary => PutDesc,
             'requestBody' => Schema,
             responses => #{
                 200 => Schema,

+ 10 - 10
apps/emqx_management/src/emqx_mgmt_api_listeners.erl

@@ -66,7 +66,7 @@ schema("/listeners_status") ->
         'operationId' => listener_type_status,
         get => #{
             tags => [<<"listeners">>],
-            desc => <<"List all running node's listeners live status. group by listener type">>,
+            description => ?DESC(list_node_live_statuses),
             responses => #{
                 200 =>
                     emqx_dashboard_swagger:schema_with_example(
@@ -81,7 +81,7 @@ schema("/listeners") ->
         'operationId' => list_listeners,
         get => #{
             tags => [<<"listeners">>],
-            desc => <<"List all running node's listeners for the specified type.">>,
+            description => ?DESC(list_listeners),
             parameters => [
                 {type,
                     ?HOCON(
@@ -99,7 +99,7 @@ schema("/listeners") ->
         },
         post => #{
             tags => [<<"listeners">>],
-            desc => <<"Create the specified listener on all nodes.">>,
+            description => ?DESC(create_on_all_nodes),
             parameters => [],
             'requestBody' => create_listener_schema(#{bind => true}),
             responses => #{
@@ -113,7 +113,7 @@ schema("/listeners/:id") ->
         'operationId' => crud_listeners_by_id,
         get => #{
             tags => [<<"listeners">>],
-            desc => <<"List all running node's listeners for the specified id.">>,
+            description => ?DESC(list_by_id),
             parameters => [?R_REF(listener_id)],
             responses => #{
                 200 => listener_schema(#{bind => true}),
@@ -122,7 +122,7 @@ schema("/listeners/:id") ->
         },
         put => #{
             tags => [<<"listeners">>],
-            desc => <<"Update the specified listener on all nodes.">>,
+            description => ?DESC(update_lisener),
             parameters => [?R_REF(listener_id)],
             'requestBody' => listener_schema(#{bind => false}),
             responses => #{
@@ -133,7 +133,7 @@ schema("/listeners/:id") ->
         },
         post => #{
             tags => [<<"listeners">>],
-            desc => <<"Create the specified listener on all nodes.">>,
+            description => ?DESC(create_on_all_nodes),
             parameters => [?R_REF(listener_id)],
             'requestBody' => listener_schema(#{bind => true}),
             responses => #{
@@ -144,7 +144,7 @@ schema("/listeners/:id") ->
         },
         delete => #{
             tags => [<<"listeners">>],
-            desc => <<"Delete the specified listener on all nodes.">>,
+            description => ?DESC(delete_on_all_nodes),
             parameters => [?R_REF(listener_id)],
             responses => #{
                 204 => <<"Listener deleted">>,
@@ -157,7 +157,7 @@ schema("/listeners/:id/start") ->
         'operationId' => start_listeners_by_id,
         post => #{
             tags => [<<"listeners">>],
-            desc => <<"Start the listener on all nodes.">>,
+            description => ?DESC(start_on_all_nodes),
             parameters => [
                 ?R_REF(listener_id)
             ],
@@ -172,7 +172,7 @@ schema("/listeners/:id/stop") ->
         'operationId' => stop_listeners_by_id,
         post => #{
             tags => [<<"listeners">>],
-            desc => <<"Stop the listener on all nodes.">>,
+            description => ?DESC(stop_on_all_nodes),
             parameters => [
                 ?R_REF(listener_id)
             ],
@@ -187,7 +187,7 @@ schema("/listeners/:id/restart") ->
         'operationId' => restart_listeners_by_id,
         post => #{
             tags => [<<"listeners">>],
-            desc => <<"Restart listeners on all nodes.">>,
+            description => ?DESC(restart_on_all_nodes),
             parameters => [
                 ?R_REF(listener_id)
             ],

+ 2 - 1
apps/emqx_management/src/emqx_mgmt_api_metrics.erl

@@ -19,6 +19,7 @@
 -behaviour(minirest_api).
 
 -include_lib("typerefl/include/types.hrl").
+-include_lib("hocon/include/hocon_types.hrl").
 
 -import(hoconsc, [mk/2, ref/2]).
 
@@ -73,7 +74,7 @@ schema("/metrics") ->
         'operationId' => metrics,
         get =>
             #{
-                description => <<"EMQX metrics">>,
+                description => ?DESC(emqx_metrics),
                 tags => [<<"Metrics">>],
                 parameters =>
                     [

+ 5 - 4
apps/emqx_management/src/emqx_mgmt_api_nodes.erl

@@ -18,6 +18,7 @@
 -behaviour(minirest_api).
 
 -include_lib("typerefl/include/types.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 -import(hoconsc, [mk/2, ref/1, ref/2, enum/1, array/1]).
 
@@ -60,7 +61,7 @@ schema("/nodes") ->
         'operationId' => nodes,
         get =>
             #{
-                description => <<"List EMQX nodes">>,
+                description => ?DESC(list_nodes),
                 tags => [<<"Nodes">>],
                 responses =>
                     #{
@@ -76,7 +77,7 @@ schema("/nodes/:node") ->
         'operationId' => node,
         get =>
             #{
-                description => <<"Get node info">>,
+                description => ?DESC(get_node_info),
                 tags => [<<"Nodes">>],
                 parameters => [ref(node_name)],
                 responses =>
@@ -94,7 +95,7 @@ schema("/nodes/:node/metrics") ->
         'operationId' => node_metrics,
         get =>
             #{
-                description => <<"Get node metrics">>,
+                description => ?DESC(get_node_metrics),
                 tags => [<<"Nodes">>],
                 parameters => [ref(node_name)],
                 responses =>
@@ -112,7 +113,7 @@ schema("/nodes/:node/stats") ->
         'operationId' => node_stats,
         get =>
             #{
-                description => <<"Get node stats">>,
+                description => ?DESC(get_node_stats),
                 tags => [<<"Nodes">>],
                 parameters => [ref(node_name)],
                 responses =>

+ 2 - 1
apps/emqx_management/src/emqx_mgmt_api_stats.erl

@@ -18,6 +18,7 @@
 -behaviour(minirest_api).
 
 -include_lib("typerefl/include/types.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 -import(
     hoconsc,
@@ -49,7 +50,7 @@ schema("/stats") ->
         'operationId' => list,
         get =>
             #{
-                description => <<"EMQX stats">>,
+                description => ?DESC(emqx_stats),
                 tags => [<<"Metrics">>],
                 parameters => [ref(aggregate)],
                 responses =>

+ 2 - 1
apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl

@@ -21,6 +21,7 @@
 -include_lib("typerefl/include/types.hrl").
 -include_lib("emqx/include/emqx.hrl").
 -include_lib("emqx/include/emqx_mqtt.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 -export([
     api_spec/0,
@@ -58,7 +59,7 @@ schema("/subscriptions") ->
     #{
         'operationId' => subscriptions,
         get => #{
-            description => <<"List subscriptions">>,
+            description => ?DESC(list_subs),
             tags => [<<"Subscriptions">>],
             parameters => parameters(),
             responses => #{

+ 3 - 2
apps/emqx_management/src/emqx_mgmt_api_topics.erl

@@ -18,6 +18,7 @@
 
 -include_lib("emqx/include/emqx.hrl").
 -include_lib("typerefl/include/types.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 %% API
 -behaviour(minirest_api).
@@ -51,7 +52,7 @@ schema("/topics") ->
     #{
         'operationId' => topics,
         get => #{
-            description => <<"Topics list">>,
+            description => ?DESC(topic_list),
             tags => ?TAGS,
             parameters => [
                 topic_param(query),
@@ -71,7 +72,7 @@ schema("/topics/:topic") ->
     #{
         'operationId' => topic,
         get => #{
-            description => <<"Lookup topic info by name">>,
+            description => ?DESC(topic_info_by_name),
             tags => ?TAGS,
             parameters => [topic_param(path)],
             responses => #{

+ 23 - 23
apps/emqx_management/src/emqx_mgmt_api_trace.erl

@@ -21,6 +21,7 @@
 -include_lib("typerefl/include/types.hrl").
 -include_lib("emqx/include/logger.hrl").
 -include_lib("snabbkaffe/include/snabbkaffe.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 -export([
     api_spec/0,
@@ -73,14 +74,14 @@ schema("/trace") ->
     #{
         'operationId' => trace,
         get => #{
-            description => "List all trace",
+            description => ?DESC(list_all),
             tags => ?TAGS,
             responses => #{
                 200 => hoconsc:array(hoconsc:ref(trace))
             }
         },
         post => #{
-            description => "Create new trace",
+            description => ?DESC(create_new),
             tags => ?TAGS,
             'requestBody' => delete([status, log_size], fields(trace)),
             responses => #{
@@ -102,7 +103,7 @@ schema("/trace") ->
             }
         },
         delete => #{
-            description => "Clear all traces",
+            description => ?DESC(clear_all),
             tags => ?TAGS,
             responses => #{
                 204 => <<"No Content">>
@@ -113,7 +114,7 @@ schema("/trace/:name") ->
     #{
         'operationId' => delete_trace,
         delete => #{
-            description => "Delete specified trace",
+            description => ?DESC(delete_trace),
             tags => ?TAGS,
             parameters => [hoconsc:ref(name)],
             responses => #{
@@ -126,7 +127,7 @@ schema("/trace/:name/stop") ->
     #{
         'operationId' => update_trace,
         put => #{
-            description => "Stop trace by name",
+            description => ?DESC(stop_trace),
             tags => ?TAGS,
             parameters => [hoconsc:ref(name)],
             responses => #{
@@ -139,7 +140,7 @@ schema("/trace/:name/download") ->
     #{
         'operationId' => download_trace_log,
         get => #{
-            description => "Download trace log by name",
+            description => ?DESC(download_log_by_name),
             tags => ?TAGS,
             parameters => [hoconsc:ref(name), hoconsc:ref(node)],
             responses => #{
@@ -161,7 +162,7 @@ schema("/trace/:name/log_detail") ->
     #{
         'operationId' => log_file_detail,
         get => #{
-            description => "get trace log file's metadata, such as size, last update time",
+            description => ?DESC(get_trace_file_metadata),
             tags => ?TAGS,
             parameters => [hoconsc:ref(name)],
             responses => #{
@@ -174,7 +175,7 @@ schema("/trace/:name/log") ->
     #{
         'operationId' => stream_log_file,
         get => #{
-            description => "view trace log",
+            description => ?DESC(view_trace_log),
             tags => ?TAGS,
             parameters => [
                 hoconsc:ref(name),
@@ -204,9 +205,8 @@ schema("/trace/:name/log") ->
 fields(log_file_detail) ->
     fields(node) ++
         [
-            {size, hoconsc:mk(integer(), #{desc => "file size"})},
-            {mtime,
-                hoconsc:mk(integer(), #{desc => "the modification and last access times of a file"})}
+            {size, hoconsc:mk(integer(), #{description => ?DESC(file_size)})},
+            {mtime, hoconsc:mk(integer(), #{description => ?DESC(modification_date)})}
         ];
 fields(trace) ->
     [
@@ -214,7 +214,7 @@ fields(trace) ->
             hoconsc:mk(
                 binary(),
                 #{
-                    desc => "Unique and format by [a-zA-Z0-9-_]",
+                    description => ?DESC(format),
                     validator => fun ?MODULE:validate_name/1,
                     required => true,
                     example => <<"EMQX-TRACE-1">>
@@ -224,7 +224,7 @@ fields(trace) ->
             hoconsc:mk(
                 hoconsc:enum([clientid, topic, ip_address]),
                 #{
-                    desc => "" "Filter type" "",
+                    description => ?DESC(filter_type),
                     required => true,
                     example => <<"clientid">>
                 }
@@ -233,7 +233,7 @@ fields(trace) ->
             hoconsc:mk(
                 binary(),
                 #{
-                    desc => "" "support mqtt wildcard topic." "",
+                    description => ?DESC(support_wildcard),
                     required => false,
                     example => <<"/dev/#">>
                 }
@@ -242,7 +242,7 @@ fields(trace) ->
             hoconsc:mk(
                 binary(),
                 #{
-                    desc => "" "mqtt clientid." "",
+                    description => ?DESC(mqtt_clientid),
                     required => false,
                     example => <<"dev-001">>
                 }
@@ -252,7 +252,7 @@ fields(trace) ->
             hoconsc:mk(
                 binary(),
                 #{
-                    desc => "client ip address",
+                    description => ?DESC(client_ip_addess),
                     required => false,
                     example => <<"127.0.0.1">>
                 }
@@ -261,7 +261,7 @@ fields(trace) ->
             hoconsc:mk(
                 hoconsc:enum([running, stopped, waiting]),
                 #{
-                    desc => "trace status",
+                    description => ?DESC(trace_status),
                     required => false,
                     example => running
                 }
@@ -283,7 +283,7 @@ fields(trace) ->
             hoconsc:mk(
                 emqx_datetime:epoch_second(),
                 #{
-                    desc => "rfc3339 timestamp or epoch second",
+                    description => ?DESC(time_format),
                     required => false,
                     example => <<"2021-11-04T18:17:38+08:00">>
                 }
@@ -292,7 +292,7 @@ fields(trace) ->
             hoconsc:mk(
                 emqx_datetime:epoch_second(),
                 #{
-                    desc => "rfc3339 timestamp or epoch second",
+                    description => ?DESC(time_format),
                     required => false,
                     example => <<"2021-11-05T18:17:38+08:00">>
                 }
@@ -301,7 +301,7 @@ fields(trace) ->
             hoconsc:mk(
                 hoconsc:array(map()),
                 #{
-                    desc => "trace log size",
+                    description => ?DESC(trace_log_size),
                     example => [#{<<"node">> => <<"emqx@127.0.0.1">>, <<"size">> => 1024}],
                     required => false
                 }
@@ -326,7 +326,7 @@ fields(node) ->
             hoconsc:mk(
                 binary(),
                 #{
-                    desc => "Node name",
+                    description => ?DESC(node_name),
                     in => query,
                     required => false,
                     example => "emqx@127.0.0.1"
@@ -341,7 +341,7 @@ fields(bytes) ->
                 %% across different OS
                 range(0, ?MAX_SINT32),
                 #{
-                    desc => "Maximum number of bytes to send in response",
+                    description => ?DESC(max_response_bytes),
                     in => query,
                     required => false,
                     default => 1000,
@@ -356,7 +356,7 @@ fields(position) ->
             hoconsc:mk(
                 integer(),
                 #{
-                    desc => "Offset from the current trace position.",
+                    description => ?DESC(current_trace_offset),
                     in => query,
                     required => false,
                     default => 0

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

@@ -2,7 +2,7 @@
 {application, emqx_prometheus, [
     {description, "Prometheus for EMQX"},
     % strict semver, bump manually!
-    {vsn, "5.0.10"},
+    {vsn, "5.0.11"},
     {modules, []},
     {registered, [emqx_prometheus_sup]},
     {applications, [kernel, stdlib, prometheus, emqx, emqx_management]},

+ 4 - 3
apps/emqx_prometheus/src/emqx_prometheus_api.erl

@@ -19,6 +19,7 @@
 -behaviour(minirest_api).
 
 -include("emqx_prometheus.hrl").
+-include_lib("hocon/include/hoconsc.hrl").
 
 -import(hoconsc, [ref/2]).
 
@@ -50,14 +51,14 @@ schema("/prometheus") ->
         'operationId' => prometheus,
         get =>
             #{
-                description => <<"Get Prometheus config info">>,
+                description => ?DESC(get_prom_conf_info),
                 tags => ?TAGS,
                 responses =>
                     #{200 => prometheus_config_schema()}
             },
         put =>
             #{
-                description => <<"Update Prometheus config">>,
+                description => ?DESC(update_prom_conf_info),
                 tags => ?TAGS,
                 'requestBody' => prometheus_config_schema(),
                 responses =>
@@ -69,7 +70,7 @@ schema("/prometheus/stats") ->
         'operationId' => stats,
         get =>
             #{
-                description => <<"Get Prometheus Data">>,
+                description => ?DESC(get_prom_data),
                 tags => ?TAGS,
                 security => [],
                 responses =>

+ 1 - 0
changes/ce/fix-10724.en.md

@@ -0,0 +1 @@
+A summary has been added for all endpoints in the HTTP API documentation (accessible at "http://emqx_host_name:18083/api-docs").

+ 58 - 0
rel/i18n/emqx_authn_api.hocon

@@ -2,42 +2,68 @@ emqx_authn_api {
 
 authentication_get.desc:
 """List authenticators for global authentication."""
+authentication_get.label:
+"""List authenticators"""
 
 authentication_id_delete.desc:
 """Delete authenticator from global authentication chain."""
+authentication_id_delete.label:
+"""Delete authenticator"""
 
 authentication_id_get.desc:
 """Get authenticator from global authentication chain."""
+authentication_id_get.label:
+"""Get authenticator"""
 
 authentication_id_position_put.desc:
 """Move authenticator in global authentication chain."""
+authentication_id_position_put.label:
+"""Move authenticator"""
 
 authentication_id_put.desc:
 """Update authenticator from global authentication chain."""
+authentication_id_put.label:
+"""Update authenticator"""
 
 authentication_id_status_get.desc:
 """Get authenticator status from global authentication chain."""
+authentication_id_status_get.label:
+"""Get authenticator status"""
 
 authentication_id_users_get.desc:
 """List users in authenticator in global authentication chain."""
+authentication_id_users_get.label:
+"""List users in authenticator"""
 
 authentication_id_users_post.desc:
 """Create users for authenticator in global authentication chain."""
+authentication_id_users_post.label:
+"""Create users for authenticator"""
 
 authentication_id_users_user_id_delete.desc:
 """Delete user in authenticator in global authentication chain."""
+authentication_id_users_user_id_delete.label:
+"""Delete user in authenticator"""
 
 authentication_id_users_user_id_get.desc:
 """Get user from authenticator in global authentication chain."""
+authentication_id_users_user_id_get.label:
+"""Get user from authenticator"""
 
 authentication_id_users_user_id_put.desc:
 """Update user in authenticator in global authentication chain."""
+authentication_id_users_user_id_put.label:
+"""Update user in authenticator"""
 
 authentication_post.desc:
 """Create authenticator for global authentication."""
+authentication_post.label:
+"""Create authenticator"""
 
 is_superuser.desc:
 """Is superuser"""
+is_superuser.label:
+"""Is superuser"""
 
 like_user_id.desc:
 """Fuzzy search user_id (username or clientid)."""
@@ -47,50 +73,82 @@ like_user_id.label:
 
 listeners_listener_id_authentication_get.desc:
 """List authenticators for listener authentication."""
+listeners_listener_id_authentication_get.label:
+"""List authenticators for listener"""
 
 listeners_listener_id_authentication_id_delete.desc:
 """Delete authenticator from listener authentication chain."""
+listeners_listener_id_authentication_id_delete.label:
+"""Delete authenticator from listener"""
 
 listeners_listener_id_authentication_id_get.desc:
 """Get authenticator from listener authentication chain."""
+listeners_listener_id_authentication_id_get.label:
+"""Get authenticator from listener"""
 
 listeners_listener_id_authentication_id_position_put.desc:
 """Move authenticator in listener authentication chain."""
+listeners_listener_id_authentication_id_position_put.label:
+"""Move authenticator in listener"""
 
 listeners_listener_id_authentication_id_put.desc:
 """Update authenticator from listener authentication chain."""
+listeners_listener_id_authentication_id_put.label:
+"""Update authenticator from listener"""
 
 listeners_listener_id_authentication_id_status_get.desc:
 """Get authenticator status from listener authentication chain."""
+listeners_listener_id_authentication_id_status_get.label:
+"""Get authenticator status from listener"""
 
 listeners_listener_id_authentication_id_users_get.desc:
 """List users in authenticator in listener authentication chain."""
+listeners_listener_id_authentication_id_users_get.label:
+"""List users in authenticator in listener"""
 
 listeners_listener_id_authentication_id_users_post.desc:
 """Create users for authenticator in listener authentication chain."""
+listeners_listener_id_authentication_id_users_post.label:
+"""Create users for authenticator in listener"""
 
 listeners_listener_id_authentication_id_users_user_id_delete.desc:
 """Delete user in authenticator in listener authentication chain."""
+listeners_listener_id_authentication_id_users_user_id_delete.label:
+"""Delete user in authenticator in listener"""
 
 listeners_listener_id_authentication_id_users_user_id_get.desc:
 """Get user from authenticator in listener authentication chain."""
+listeners_listener_id_authentication_id_users_user_id_get.label:
+"""Get user from authenticator in listener"""
 
 listeners_listener_id_authentication_id_users_user_id_put.desc:
 """Update user in authenticator in listener authentication chain."""
+listeners_listener_id_authentication_id_users_user_id_put.label:
+"""Update user in authenticator in listener"""
 
 listeners_listener_id_authentication_post.desc:
 """Create authenticator for listener authentication."""
+listeners_listener_id_authentication_post.label:
+"""Create authenticator for listener"""
 
 param_auth_id.desc:
 """Authenticator ID."""
+param_auth_id.label:
+"""Authenticator ID"""
 
 param_listener_id.desc:
 """Listener ID."""
+param_listener_id.label:
+"""Listener ID"""
 
 param_position.desc:
 """Position of authenticator in chain. Possible values are 'front', 'rear', 'before:{other_authenticator}', 'after:{other_authenticator}'."""
+param_position.label:
+"""Position of authenticator"""
 
 param_user_id.desc:
 """User ID."""
+param_user_id.label:
+"""User ID"""
 
 }

+ 4 - 0
rel/i18n/emqx_authn_user_import_api.hocon

@@ -2,8 +2,12 @@ emqx_authn_user_import_api {
 
 authentication_id_import_users_post.desc:
 """Import users into authenticator in global authentication chain."""
+authentication_id_import_users_post.label:
+"""Global import users into authenticator"""
 
 listeners_listener_id_authentication_id_import_users_post.desc:
 """Import users into authenticator in listener authentication chain."""
+listeners_listener_id_authentication_id_import_users_post.label:
+"""Import users into authenticator in listener"""
 
 }

+ 2 - 0
rel/i18n/emqx_authz_api_cache.hocon

@@ -2,5 +2,7 @@ emqx_authz_api_cache {
 
 authorization_cache_delete.desc:
 """Clean all authorization cache in the cluster."""
+authorization_cache_delete.label:
+"""Clean authorization cache in cluster"""
 
 }

+ 28 - 5
rel/i18n/emqx_authz_api_mnesia.hocon

@@ -2,13 +2,11 @@ emqx_authz_api_mnesia {
 
 action.desc:
 """Authorized action (pub/sub/all)"""
-
 action.label:
 """action"""
 
 clientid.desc:
 """ClientID"""
-
 clientid.label:
 """clientid"""
 
@@ -26,62 +24,87 @@ fuzzy_username.label:
 
 permission.desc:
 """Permission"""
-
 permission.label:
 """permission"""
 
 rules_all_delete.desc:
 """Delete rules for 'all'"""
+rules_all_delete.label:
+"""Delete rules for 'all'"""
 
 rules_all_get.desc:
 """Show the list of rules for 'all'"""
+rules_all_get.label:
+"""Show rules for 'all'"""
 
 rules_all_post.desc:
 """Create/Update the list of rules for 'all'."""
+rules_all_post.label:
+"""Update rules for 'all'"""
 
 rules_delete.desc:
 """Delete all rules for all 'users', 'clients' and 'all'"""
+rules_delete.label:
+"""Delete all rules"""
 
 topic.desc:
 """Rule on specific topic"""
-
 topic.label:
 """topic"""
 
 user_clientid_delete.desc:
 """Delete rule for 'clientid'"""
+user_clientid_delete.label:
+"""Delete rule for 'clientid'"""
 
 user_clientid_get.desc:
 """Get rule for 'clientid'"""
+user_clientid_get.label:
+"""Get rule for 'clientid'"""
 
 user_clientid_put.desc:
 """Set rule for 'clientid'"""
+user_clientid_put.label:
+"""Set rule for 'clientid'"""
 
 user_username_delete.desc:
 """Delete rule for 'username'"""
+user_username_delete.label:
+"""Delete rule for 'username'"""
 
 user_username_get.desc:
 """Get rule for 'username'"""
+user_username_get.label:
+"""Get rule for 'username'"""
 
 user_username_put.desc:
 """Set rule for 'username'"""
+user_username_put.label:
+"""Set rule for 'username'"""
 
 username.desc:
 """Username"""
-
 username.label:
 """username"""
 
 users_clientid_get.desc:
 """Show the list of rules for clients"""
+users_clientid_get.label:
+"""Show rules for clients"""
 
 users_clientid_post.desc:
 """Add new rule for 'clientid'"""
+users_clientid_post.label:
+"""Add rule for 'clientid'"""
 
 users_username_get.desc:
 """Show the list of rules for users"""
+users_username_get.label:
+"""Show rules for users"""
 
 users_username_post.desc:
 """Add new rule for 'username'"""
+users_username_post.label:
+"""Add rule for 'username'"""
 
 }

+ 14 - 4
rel/i18n/emqx_authz_api_sources.hocon

@@ -2,46 +2,56 @@ emqx_authz_api_sources {
 
 authorization_sources_get.desc:
 """List all authorization sources"""
+authorization_sources_get.label:
+"""List all authorization sources"""
 
 authorization_sources_post.desc:
 """Add a new source"""
+authorization_sources_post.label:
+"""Add a new source"""
 
 authorization_sources_type_delete.desc:
 """Delete source"""
+authorization_sources_type_delete.label:
+"""Delete source"""
 
 authorization_sources_type_get.desc:
 """Get a authorization source"""
+authorization_sources_type_get.label:
+"""Get a authorization source"""
 
 authorization_sources_type_move_post.desc:
 """Change the exection order of sources"""
+authorization_sources_type_move_post.label:
+"""Change order of sources"""
 
 authorization_sources_type_put.desc:
 """Update source"""
+authorization_sources_type_put.label:
+"""Update source"""
 
 authorization_sources_type_status_get.desc:
 """Get a authorization source"""
+authorization_sources_type_status_get.label:
+"""Get a authorization source"""
 
 source.desc:
 """Authorization source"""
-
 source.label:
 """source"""
 
 source_config.desc:
 """Source config"""
-
 source_config.label:
 """source_config"""
 
 source_type.desc:
 """Authorization type"""
-
 source_type.label:
 """source_type"""
 
 sources.desc:
 """Authorization sources"""
-
 sources.label:
 """sources"""
 

+ 6 - 0
rel/i18n/emqx_auto_subscribe_api.hocon

@@ -2,11 +2,17 @@ emqx_auto_subscribe_api {
 
 list_auto_subscribe_api.desc:
 """Get auto subscribe topic list"""
+list_auto_subscribe_api.label:
+"""Get auto subscribe topics"""
 
 update_auto_subscribe_api.desc:
 """Update auto subscribe topic list"""
+update_auto_subscribe_api.label:
+"""Update auto subscribe topics"""
 
 update_auto_subscribe_api_response409.desc:
 """Auto Subscribe topics max limit"""
+update_auto_subscribe_api_response409.label:
+"""Auto Subscribe topics max limit"""
 
 }

+ 16 - 0
rel/i18n/emqx_dashboard_api.hocon

@@ -2,24 +2,36 @@ emqx_dashboard_api {
 
 change_pwd_api.desc:
 """Change dashboard user password"""
+change_pwd_api.label:
+"""Change dashboard user password"""
 
 create_user_api.desc:
 """Create dashboard user"""
+create_user_api.label:
+"""Create dashboard user"""
 
 create_user_api_success.desc:
 """Create dashboard user success"""
+create_user_api_success.label:
+"""Create dashboard user success"""
 
 delete_user_api.desc:
 """Delete dashboard user"""
+delete_user_api.label:
+"""Delete dashboard user"""
 
 license.desc:
 """EMQX License. opensource or enterprise"""
 
 list_users_api.desc:
 """Dashboard list users"""
+list_users_api.label:
+"""Dashboard list users"""
 
 login_api.desc:
 """Get Dashboard Auth Token."""
+login_api.label:
+"""Get Dashboard Auth Token."""
 
 login_failed401.desc:
 """Login failed. Bad username or password"""
@@ -32,6 +44,8 @@ login_success.desc:
 
 logout_api.desc:
 """Dashboard user logout"""
+logout_api.label:
+"""Dashboard user logout"""
 
 new_pwd.desc:
 """New password"""
@@ -47,6 +61,8 @@ token.desc:
 
 update_user_api.desc:
 """Update dashboard user description"""
+update_user_api.label:
+"""Update dashboard user description"""
 
 update_user_api200.desc:
 """Update dashboard user success"""

+ 13 - 0
rel/i18n/emqx_dashboard_error_code_api.hocon

@@ -0,0 +1,13 @@
+emqx_dashboard_error_code_api {
+
+error_codes.desc:
+"""API Error Codes"""
+error_codes.label:
+"""API Error Codes"""
+
+error_codes_u.desc:
+"""API Error Codes"""
+error_codes_u.label:
+"""API Error Codes"""
+
+}

+ 23 - 0
rel/i18n/emqx_dashboard_monitor_api.hocon

@@ -0,0 +1,23 @@
+emqx_dashboard_monitor_api {
+
+list_monitor.desc:
+"""List monitor data."""
+list_monitor.label:
+"""List monitor data."""
+
+list_monitor_node.desc:
+"""List the monitor data on the node."""
+list_monitor_node.label:
+"""List the monitor data on the node."""
+
+current_status.desc:
+"""Current status. Gauge and rate."""
+current_status.label:
+"""Current status. Gauge and rate."""
+
+current_status_node.desc:
+"""Node current status. Gauge and rate."""
+current_status_node.label:
+"""Node current status. Gauge and rate."""
+
+}

+ 46 - 0
rel/i18n/emqx_delayed_api.hocon

@@ -2,71 +2,117 @@ emqx_delayed_api {
 
 bad_msgid_format.desc:
 """Bad Message ID format"""
+bad_msgid_format.label:
+"""Bad Message ID format"""
 
 count.desc:
 """Count of delayed messages"""
+count.label:
+"""Count of delayed messages"""
 
 delayed_interval.desc:
 """Delayed interval(second)"""
+delayed_interval.label:
+"""Delayed interval"""
 
 delayed_remaining.desc:
 """Delayed remaining(second)"""
+delayed_remaining.label:
+"""Delayed remaining"""
 
 delete_api.desc:
 """Delete delayed message"""
+delete_api.label:
+"""Delete delayed message"""
 
 expected_at.desc:
 """Expect publish time, in RFC 3339 format"""
+expected_at.label:
+"""Expect publish time"""
 
 from_clientid.desc:
 """From ClientID"""
+from_clientid.label:
+"""From ClientID"""
 
 from_username.desc:
 """From Username"""
+from_username.label:
+"""From Username"""
 
 get_message_api.desc:
 """View delayed message"""
+get_message_api.label:
+"""View delayed message"""
 
 illegality_limit.desc:
 """Max limit illegality"""
+illegality_limit.label:
+"""Max limit illegality"""
 
 list_api.desc:
 """List delayed messages"""
+list_api.label:
+"""List delayed messages"""
 
 msgid.desc:
 """Delayed Message ID"""
+msgid.label:
+"""Delayed Message ID"""
 
 msgid_not_found.desc:
 """Message ID not found"""
+msgid_not_found.label:
+"""Message ID not found"""
 
 node.desc:
 """The node where message from"""
+node.label:
+"""Node where message from"""
 
 payload.desc:
 """Payload, base64 encoded. Payload will be set to 'PAYLOAD_TO_LARGE' if its length is larger than 2048 bytes"""
+payload.label:
+"""Payload"""
 
 publish_at.desc:
 """Clinet publish message time, in RFC 3339 format"""
+publish_at.label:
+"""Client publish message time"""
 
 qos.desc:
 """QoS"""
+qos.label:
+"""QoS"""
 
 topic.desc:
 """Topic"""
+topic.label:
+"""Topic"""
 
 update_api.desc:
 """Enable or disable delayed, set max delayed messages"""
+update_api.label:
+"""Enable or disable delayed"""
 
 update_success.desc:
 """Enable or disable delayed successfully"""
+update_success.label:
+"""Enable or disable delayed successfully"""
 
 view_limit.desc:
 """Page limit"""
+view_limit.label:
+"""Page limit"""
 
 view_page.desc:
 """View page"""
+view_page.label:
+"""View page"""
 
 view_status_api.desc:
 """Get delayed status"""
+view_status_api.label:
+"""Get delayed status"""
 
 }

+ 44 - 1
rel/i18n/emqx_exhook_api.hocon

@@ -2,70 +2,109 @@ emqx_exhook_api {
 
 add_server.desc:
 """Add a server"""
+add_server.label:
+"""Add a server"""
 
 delete_server.desc:
 """Delete the server"""
+delete_server.label:
+"""Delete the server"""
 
 get_detail.desc:
 """Get the detail information of Exhook server"""
+get_detail.label:
+"""Get server details"""
 
 get_hooks.desc:
 """Get the hooks information of server"""
+get_hooks.label:
+"""Get server hooks information"""
 
 hook_metrics.desc:
 """Metrics information of this hook in the current node"""
+hook_metrics.label:
+"""Hook metrics"""
 
 hook_name.desc:
 """The hook's name"""
+hook_name.label:
+"""Hook name"""
 
 hook_params.desc:
 """The parameters used when the hook is registered"""
+hook_params.label:
+"""Hook parameters"""
 
 list_all_servers.desc:
 """List all servers"""
+list_all_servers.label:
+"""List servers"""
 
 metric_failed.desc:
 """The number of times the hook execution failed"""
+metric_failed.label:
+"""Failed executions count"""
 
 metric_max_rate.desc:
 """Maximum call rate of hooks"""
+metric_max_rate.label:
+"""Max hook call rate"""
 
 metric_rate.desc:
 """The call rate of hooks"""
+metric_rate.label:
+"""Hook call rate"""
 
 metric_succeed.desc:
 """The number of times the hooks execution successful"""
+metric_succeed.label:
+"""Successful executions count"""
 
 metrics.desc:
 """Metrics information"""
+metrics.label:
+"""Metrics information"""
 
 move_api.desc:
 """Move the server.
 NOTE: The position should be "front | rear | before:{name} | after:{name}"""
-
 move_api.label:
 """Change order of execution for registered Exhook server"""
 
 move_position.desc:
 """The target position to be moved"""
+move_position.label:
+"""Target position"""
 
 node.desc:
 """Node name"""
+node.label:
+"""Node name"""
 
 node_hook_metrics.desc:
 """Metrics information of this hook in all nodes"""
+node_hook_metrics.label:
+"""Node-wise hook metrics"""
 
 node_metrics.desc:
 """Metrics information of this server in all nodes"""
+node_metrics.label:
+"""Node-wise server metrics"""
 
 node_status.desc:
 """status of this server in all nodes"""
+node_status.label:
+"""Node-wise server status"""
 
 server_metrics.desc:
 """Metrics information of this server in the current node"""
+server_metrics.label:
+"""Server metrics"""
 
 server_name.desc:
 """The Exhook server name"""
+server_name.label:
+"""Server name"""
 
 status.desc:
 """The status of Exhook server.<br/>
@@ -74,8 +113,12 @@ connecting: connection failed, reconnecting<br/>
 disconnected: failed to connect and didn't reconnect<br/>
 disabled: this server is disabled<br/>
 error: failed to view the status of this server"""
+status.label:
+"""Server status"""
 
 update_server.desc:
 """Update the server"""
+update_server.label:
+"""Update the server"""
 
 }

+ 4 - 0
rel/i18n/emqx_mgmt_api_alarms.hocon

@@ -8,6 +8,8 @@ deactivate_at.desc:
 
 delete_alarms_api.desc:
 """Remove all historical alarms."""
+delete_alarms_api.label:
+"""Remove all historical alarms."""
 
 delete_alarms_api_response204.desc:
 """Historical alarms have been cleared successfully."""
@@ -26,6 +28,8 @@ The default is false."""
 
 list_alarms_api.desc:
 """List currently activated alarms or historical alarms, determined by query parameters."""
+list_alarms_api.label:
+"""List alarms"""
 
 message.desc:
 """Alarm message, which describes the alarm content in a human-readable format."""

+ 33 - 0
rel/i18n/emqx_mgmt_api_api_keys.hocon

@@ -0,0 +1,33 @@
+emqx_mgmt_api_api_keys {
+
+api_key_list.desc:
+"""Return api_key list"""
+api_key_list.label:
+"""Return api_key list"""
+
+create_new_api_key.desc:
+"""Create new api_key"""
+create_new_api_key.label:
+"""Create new api_key"""
+
+get_api_key.desc:
+"""Return the specific api_key"""
+get_api_key.label:
+"""Return the specific api_key"""
+
+update_api_key.desc:
+"""Update the specific api_key"""
+update_api_key.label:
+"""Update the specific api_key"""
+
+delete_api_key.desc:
+"""Delete the specific api_key"""
+delete_api_key.label:
+"""Delete the specific api_key"""
+
+format.desc:
+"""Unique and format by [a-zA-Z0-9-_]"""
+format.label:
+"""Unique and format by [a-zA-Z0-9-_]"""
+
+}

+ 6 - 0
rel/i18n/emqx_mgmt_api_banned.hocon

@@ -20,18 +20,24 @@ by.label:
 
 create_banned_api.desc:
 """Add a client ID, username or IP address to the blacklist."""
+create_banned_api.label:
+"""Ban client ID, username or IP address"""
 
 create_banned_api_response400.desc:
 """Bad request, possibly due to wrong parameters or the existence of a banned object."""
 
 delete_banned_api.desc:
 """Remove a client ID, username or IP address from the blacklist."""
+delete_banned_api.label:
+"""Unban a client ID, username or IP address"""
 
 delete_banned_api_response404.desc:
 """The banned object was not found in the blacklist."""
 
 list_banned_api.desc:
 """List all currently banned client IDs, usernames and IP addresses."""
+list_banned_api.label:
+"""List all banned client IDs"""
 
 reason.desc:
 """Ban reason, record the reason why the current object was banned."""

+ 58 - 0
rel/i18n/emqx_mgmt_api_clients.hocon

@@ -0,0 +1,58 @@
+emqx_mgmt_api_clients {
+
+list_clients.desc:
+"""List clients"""
+list_clients.label:
+"""List clients"""
+
+clients_info_from_id.desc:
+"""Get clients info by client ID"""
+clients_info_from_id.label:
+"""Get clients info by client ID"""
+
+kick_client_id.desc:
+"""Kick out client by client ID"""
+kick_client_id.label:
+"""Kick out client by client ID"""
+
+get_authz_cache.desc:
+"""Get client authz cache in the cluster."""
+get_authz_cache.label:
+"""Get client authz cache in the cluster."""
+
+clean_authz_cache.desc:
+"""Clean client authz cache in the cluster."""
+clean_authz_cache.label:
+"""Clean client authz cache in the cluster."""
+
+get_client_subs.desc:
+"""Get client subscriptions"""
+get_client_subs.label:
+"""Get client subscriptions"""
+
+subscribe.desc:
+"""Subscribe"""
+subscribe.label:
+"""Subscribe"""
+
+subscribe_g.desc:
+"""Subscribe bulk"""
+subscribe_g.label:
+"""Subscribe bulk"""
+
+unsubscribe.desc:
+"""Unsubscribe"""
+unsubscribe.label:
+"""Unsubscribe"""
+
+unsubscribe_g.desc:
+"""Unsubscribe bulk"""
+unsubscribe_g.label:
+"""Unsubscribe bulk"""
+
+set_keepalive_seconds.desc:
+"""Set the online client keepalive by seconds"""
+set_keepalive_seconds.label:
+"""Set the online client keepalive by seconds"""
+
+}

+ 18 - 0
rel/i18n/emqx_mgmt_api_cluster.hocon

@@ -0,0 +1,18 @@
+emqx_mgmt_api_cluster {
+
+get_cluster_info.desc:
+"""Get cluster info"""
+get_cluster_info.label:
+"""Get cluster info"""
+
+invite_node.desc:
+"""Invite node to cluster"""
+invite_node.label:
+"""Invite node to cluster"""
+
+force_remove_node.desc:
+"""Force leave node from cluster"""
+force_remove_node.label:
+"""Force leave node from cluster"""
+
+}

+ 40 - 0
rel/i18n/emqx_mgmt_api_configs.hocon

@@ -0,0 +1,40 @@
+emqx_mgmt_api_configs {
+
+get_conf_node.desc:
+"""Get all the configurations of the specified node, including hot and non-hot updatable items."""
+get_conf_node.label:
+"""Get all the configurations for node."""
+
+node_name.desc:
+"""Node's name: If you do not fill in the fields, this node will be used by default."""
+node_name.label:
+"""Node's name."""
+
+rest_conf_query.desc:
+"""Reset the config entry specified by the query string parameter `conf_path`.<br/>
+- For a config entry that has default value, this resets it to the default value;
+- For a config entry that has no default value, an error 400 will be returned"""
+rest_conf_query.label:
+"""Reset the config entry with query"""
+
+get_global_zone_configs.desc:
+"""Get the global zone configs"""
+get_global_zone_configs.label:
+"""Get the global zone configs"""
+
+update_globar_zone_configs.desc:
+"""Update globbal zone configs"""
+update_globar_zone_configs.label:
+"""Update globbal zone configs"""
+
+get_node_level_limiter_congigs.desc:
+"""Get the node-level limiter configs"""
+get_node_level_limiter_congigs.label:
+"""Get the node-level limiter configs"""
+
+update_node_level_limiter_congigs.desc:
+"""Update the node-level limiter configs"""
+update_node_level_limiter_congigs.label:
+"""Update the node-level limiter configs"""
+
+}

+ 59 - 0
rel/i18n/emqx_mgmt_api_listeners.hocon

@@ -0,0 +1,59 @@
+emqx_mgmt_api_listeners {
+
+list_node_live_statuses.desc:
+"""List all running node's listeners live status. group by listener type"""
+list_node_live_statuses.label:
+"""List all running node's listeners live status. group by listener type"""
+
+list_listeners.desc:
+"""List all running node's listeners for the specified type."""
+list_listeners.label:
+"""List all running node's listeners for the specified type."""
+
+listener_type.desc:
+"""Listener type"""
+listener_type.label:
+"""Listener type"""
+
+create_on_all_nodes.desc:
+"""Create the specified listener on all nodes."""
+create_on_all_nodes.label:
+"""Create the specified listener on all nodes."""
+
+list_by_id.desc:
+"""List all running node's listeners for the specified id."""
+list_by_id.label:
+"""List all running node's listeners for the specified id."""
+
+update_lisener.desc:
+"""Update the specified listener on all nodes."""
+update_lisener.label:
+"""Update the specified listener on all nodes."""
+
+create_on_all_nodes_2.desc:
+"""Create the specified listener on all nodes."""
+create_on_all_nodes_2.label:
+"""Create the specified listener on all nodes."""
+
+delete_on_all_nodes.desc:
+"""Delete the specified listener on all nodes."""
+delete_on_all_nodes.label:
+"""Delete the specified listener on all nodes."""
+
+start_on_all_nodes.desc:
+"""Start the listener on all nodes."""
+start_on_all_nodes.label:
+"""Start the listener on all nodes."""
+
+stop_on_all_nodes.desc:
+"""Stop the listener on all nodes."""
+stop_on_all_nodes.label:
+"""Stop the listener on all nodes."""
+
+restart_on_all_nodes.desc:
+"""Restart listeners on all nodes."""
+restart_on_all_nodes.label:
+"""Restart listeners on all nodes."""
+
+
+}

+ 8 - 0
rel/i18n/emqx_mgmt_api_metrics.hocon

@@ -0,0 +1,8 @@
+emqx_mgmt_api_metrics {
+
+emqx_metrics.desc:
+"""EMQX metrics"""
+emqx_metrics.label:
+"""EMQX metrics"""
+
+}

+ 23 - 0
rel/i18n/emqx_mgmt_api_nodes.hocon

@@ -0,0 +1,23 @@
+emqx_mgmt_api_nodes {
+
+list_nodes.desc:
+"""List EMQX nodes"""
+list_nodes.label:
+"""List EMQX nodes"""
+
+get_node_info.desc:
+"""Get node info"""
+get_node_info.label:
+"""Get node info"""
+
+get_node_metrics.desc:
+"""Get node metrics"""
+get_node_metrics.label:
+"""Get node metrics"""
+
+get_node_stats.desc:
+"""Get node stats"""
+get_node_stats.label:
+"""Get node stats"""
+
+}

+ 8 - 0
rel/i18n/emqx_mgmt_api_stats.hocon

@@ -0,0 +1,8 @@
+emqx_mgmt_api_stats {
+
+emqx_stats.desc:
+"""EMQX stats"""
+emqx_stats.label:
+"""EMQX stats"""
+
+}

+ 8 - 0
rel/i18n/emqx_mgmt_api_subscriptions.hocon

@@ -0,0 +1,8 @@
+emqx_mgmt_api_subscriptions {
+
+list_subs.desc:
+"""List subscriptions"""
+list_subs.label:
+"""List subscriptions"""
+
+}

+ 13 - 0
rel/i18n/emqx_mgmt_api_topics.hocon

@@ -0,0 +1,13 @@
+emqx_mgmt_api_topics {
+
+topic_list.desc:
+"""Topics list"""
+topic_list.label:
+"""Topics list"""
+
+topic_info_by_name.desc:
+"""Lookup topic info by name"""
+topic_info_by_name.label:
+"""Lookup topic info by name"""
+
+}

+ 118 - 0
rel/i18n/emqx_mgmt_api_trace.hocon

@@ -0,0 +1,118 @@
+emqx_mgmt_api_trace {
+
+list_all.desc:
+"""List all trace"""
+list_all.label:
+"""List all trace"""
+
+create_new.desc:
+"""Create new trace"""
+create_new.label:
+"""Create new trace"""
+
+clear_all.desc:
+"""Clear all traces"""
+clear_all.label:
+"""Clear all traces"""
+
+delete_trace.desc:
+"""Delete specified trace"""
+delete_trace.label:
+"""Delete specified trace"""
+
+stop_trace.desc:
+"""Stop trace by name"""
+stop_trace.label:
+"""Stop trace by name"""
+
+download_log_by_name.desc:
+"""Download trace log by name"""
+download_log_by_name.label:
+"""Download trace log by name"""
+
+trace_zip_file.desc:
+"""A trace zip file"""
+trace_zip_file.label:
+"""A trace zip file"""
+
+get_trace_file_metadata.desc:
+"""get trace log file's metadata, such as size, last update time"""
+get_trace_file_metadata.label:
+"""get trace log file's metadata"""
+
+view_trace_log.desc:
+"""view trace log"""
+view_trace_log.label:
+"""view trace log"""
+
+file_size.desc:
+"""file size"""
+file_size.label:
+"""file size"""
+
+modification_date.desc:
+"""the modification and last access times of a file"""
+modification_date.label:
+"""last access time"""
+
+format.desc:
+"""Unique and format by [a-zA-Z0-9-_]"""
+format.label:
+"""Unique and format by [a-zA-Z0-9-_]"""
+
+filter_type.desc:
+"""Filter type"""
+filter_type.label:
+"""Filter type"""
+
+support_wildcard.desc:
+"""support mqtt wildcard topic."""
+support_wildcard.label:
+"""support mqtt wildcard topic"""
+
+mqtt_clientid.desc:
+"""mqtt clientid."""
+mqtt_clientid.label:
+"""mqtt clientid"""
+
+client_ip_addess.desc:
+"""client ip address"""
+client_ip_addess.label:
+"""client ip address"""
+
+trace_status.desc:
+"""trace status"""
+trace_status.label:
+"""trace status"""
+
+time_format.desc:
+"""rfc3339 timestamp or epoch second"""
+time_format.label:
+"""rfc3339 timestamp or epoch second"""
+
+time_format_g.desc:
+"""rfc3339 timestamp or epoch second"""
+time_format_g.label:
+"""rfc3339 timestamp or epoch second"""
+
+trace_log_size.desc:
+"""trace log size"""
+trace_log_size.label:
+"""trace log size"""
+
+node_name.desc:
+"""Node name"""
+node_name.label:
+"""Node name"""
+
+max_response_bytes.desc:
+"""Maximum number of bytes to send in response"""
+max_response_bytes.label:
+"""Maximum response bytes"""
+
+current_trace_offset.desc:
+"""Offset from the current trace position."""
+current_trace_offset.label:
+"""Offset from the current trace position."""
+
+}

+ 18 - 0
rel/i18n/emqx_prometheus_api.hocon

@@ -0,0 +1,18 @@
+emqx_prometheus_api {
+
+get_prom_conf_info.desc:
+"""Get Prometheus config info"""
+get_prom_conf_info.label:
+"""Get Prometheus config info"""
+
+update_prom_conf_info.desc:
+"""Update Prometheus config"""
+update_prom_conf_info.label:
+"""Update Prometheus config"""
+
+get_prom_data.desc:
+"""Get Prometheus Data"""
+get_prom_data.label:
+"""Get Prometheus Data"""
+
+}

+ 10 - 0
rel/i18n/emqx_retainer_api.hocon

@@ -8,6 +8,8 @@ config_not_found.desc:
 
 delete_matching_api.desc:
 """Delete matching messages."""
+delete_matching_api.label:
+"""Delete matching messages"""
 
 from_clientid.desc:
 """The clientid of publisher."""
@@ -17,12 +19,18 @@ from_username.desc:
 
 get_config_api.desc:
 """View config"""
+get_config_api.label:
+"""View config"""
 
 list_retained_api.desc:
 """List retained messages."""
+list_retained_api.label:
+"""List retained messages."""
 
 lookup_api.desc:
 """Lookup a message by a topic without wildcards."""
+lookup_api.label:
+"""Lookup a message"""
 
 message_detail.desc:
 """Details of the message."""
@@ -59,5 +67,7 @@ update_config_success.desc:
 
 update_retainer_api.desc:
 """Update retainer config."""
+update_retainer_api.label:
+"""Update retainer config"""
 
 }

+ 6 - 0
rel/i18n/emqx_rewrite_api.hocon

@@ -2,11 +2,17 @@ emqx_rewrite_api {
 
 list_topic_rewrite_api.desc:
 """List all rewrite rules"""
+list_topic_rewrite_api.label:
+"""List all rewrite rules"""
 
 update_topic_rewrite_api.desc:
 """Update all rewrite rules"""
+update_topic_rewrite_api.label:
+"""Update all rewrite rules"""
 
 update_topic_rewrite_api_response413.desc:
 """Rules count exceed max limit"""
+update_topic_rewrite_api_response413.label:
+"""Rules count exceed limit"""
 
 }

+ 8 - 0
rel/i18n/emqx_slow_subs_api.hocon

@@ -2,15 +2,21 @@ emqx_slow_subs_api {
 
 clear_records_api.desc:
 """Clear current data and re count slow topic"""
+clear_records_api.label:
+"""Clear current data and re count slow topic"""
 
 clientid.desc:
 """Message clientid"""
 
 get_records_api.desc:
 """View slow topics statistics record data"""
+get_records_api.label:
+"""View slow topics statistics record data"""
 
 get_setting_api.desc:
 """View slow subs settings"""
+get_setting_api.label:
+"""View slow subs settings"""
 
 last_update_time.desc:
 """The timestamp of last update"""
@@ -26,5 +32,7 @@ topic.desc:
 
 update_setting_api.desc:
 """Update slow subs settings"""
+update_setting_api.label:
+"""Update slow subs settings"""
 
 }

+ 6 - 0
rel/i18n/emqx_telemetry_api.hocon

@@ -14,9 +14,13 @@ enable.desc:
 
 get_telemetry_data_api.desc:
 """Get telemetry data"""
+get_telemetry_data_api.label:
+"""Get telemetry data"""
 
 get_telemetry_status_api.desc:
 """Get telemetry status"""
+get_telemetry_status_api.label:
+"""Get telemetry status"""
 
 license.desc:
 """Get license information"""
@@ -47,6 +51,8 @@ up_time.desc:
 
 update_telemetry_status_api.desc:
 """Enable or disable telemetry"""
+update_telemetry_status_api.label:
+"""Enable or disable telemetry"""
 
 uuid.desc:
 """Get UUID"""

+ 68 - 0
rel/i18n/emqx_topic_metrics_api.hocon

@@ -2,104 +2,172 @@ emqx_topic_metrics_api {
 
 message_qos1_in_rate.desc:
 """QoS1 in messages rate"""
+message_qos1_in_rate.label:
+"""QoS1 in messages rate"""
 
 message_out_count.desc:
 """Out messages count"""
+message_out_count.label:
+"""Out messages count"""
 
 message_qos2_out_rate.desc:
 """QoS2 out messages rate"""
+message_qos2_out_rate.label:
+"""QoS2 out messages rate"""
 
 message_qos0_in_rate.desc:
 """QoS0 in messages rate"""
+message_qos0_in_rate.label:
+"""QoS0 in messages rate"""
 
 get_topic_metrics_api.desc:
 """List topic metrics"""
+get_topic_metrics_api.label:
+"""List topic metrics"""
 
 reset_time.desc:
 """Reset time. In rfc3339. Nullable if never reset"""
+reset_time.label:
+"""Reset time"""
 
 topic_metrics_api_response400.desc:
 """Bad request. Already exists or bad topic name"""
+topic_metrics_api_response400.label:
+"""Bad request"""
 
 reset_topic_desc.desc:
 """Topic Name. If this parameter is not present,all created topic metrics will be reset."""
+reset_topic_desc.label:
+"""Topic Name"""
 
 topic_metrics_api_response409.desc:
 """Conflict. Topic metrics exceeded max limit 512"""
+topic_metrics_api_response409.label:
+"""Conflict"""
 
 post_topic_metrics_api.desc:
 """Create topic metrics"""
+post_topic_metrics_api.label:
+"""Create topic metrics"""
 
 message_dropped_rate.desc:
 """Dropped messages rate"""
+message_dropped_rate.label:
+"""Dropped messages rate"""
 
 message_qos2_in_rate.desc:
 """QoS2 in messages rate"""
+message_qos2_in_rate.label:
+"""QoS2 in messages rate"""
 
 message_in_rate.desc:
 """In messages rate"""
+message_in_rate.label:
+"""In messages rate"""
 
 message_qos0_out_rate.desc:
 """QoS0 out messages rate"""
+message_qos0_out_rate.label:
+"""QoS0 out messages rate"""
 
 message_qos2_in_count.desc:
 """QoS2 in messages count"""
+message_qos2_in_count.label:
+"""QoS2 in messages count"""
 
 message_dropped_count.desc:
 """Dropped messages count"""
+message_dropped_count.label:
+"""Dropped messages count"""
 
 topic_metrics_api_response404.desc:
 """Not Found. Topic metrics not found"""
+topic_metrics_api_response404.label:
+"""Not Found"""
 
 topic_in_path.desc:
 """Topic string. Notice: Topic string in url path must be encoded"""
+topic_in_path.label:
+"""Topic string"""
 
 action.desc:
 """Action. Only support reset"""
+action.label:
+"""Action"""
 
 message_qos0_in_count.desc:
 """QoS0 in messages count"""
+message_qos0_in_count.label:
+"""QoS0 in messages count"""
 
 message_qos1_out_rate.desc:
 """QoS1 out messages rate"""
+message_qos1_out_rate.label:
+"""QoS1 out messages rate"""
 
 topic.desc:
 """Topic"""
+topic.label:
+"""Topic"""
 
 reset_topic_metrics_api.desc:
 """Reset telemetry status"""
+reset_topic_metrics_api.label:
+"""Reset telemetry status"""
 
 create_time.desc:
 """Create time"""
+create_time.label:
+"""Create time"""
 
 metrics.desc:
 """Metrics"""
+metrics.label:
+"""Metrics"""
 
 message_qos1_out_count.desc:
 """QoS1 out messages count"""
+message_qos1_out_count.label:
+"""QoS1 out messages count"""
 
 gat_topic_metrics_data_api.desc:
 """Get topic metrics"""
+gat_topic_metrics_data_api.label:
+"""Get topic metrics"""
 
 message_qos1_in_count.desc:
 """QoS1 in messages count"""
+message_qos1_in_count.label:
+"""QoS1 in messages count"""
 
 delete_topic_metrics_data_api.desc:
 """Delete topic metrics"""
+delete_topic_metrics_data_api.label:
+"""Delete topic metrics"""
 
 message_qos0_out_count.desc:
 """QoS0 out messages count"""
+message_qos0_out_count.label:
+"""QoS0 out messages count"""
 
 topic_in_body.desc:
 """Raw topic string"""
+topic_in_body.label:
+"""Raw topic string"""
 
 message_in_count.desc:
 """In messages count"""
+message_in_count.label:
+"""In messages count"""
 
 message_qos2_out_count.desc:
 """QoS2 out messages count"""
+message_qos2_out_count.label:
+"""QoS2 out messages count"""
 
 message_out_rate.desc:
 """Out messages rate"""
+message_out_rate.label:
+"""Out messages rate"""
 
 }