diff --git a/apps/emqx_modules/src/emqx_topic_metrics_api.erl b/apps/emqx_modules/src/emqx_topic_metrics_api.erl index 1f16b3759..323363b72 100644 --- a/apps/emqx_modules/src/emqx_topic_metrics_api.erl +++ b/apps/emqx_modules/src/emqx_topic_metrics_api.erl @@ -18,11 +18,11 @@ -behavior(minirest_api). --import(emqx_mgmt_util, [ request_body_schema/1 - , response_schema/1 - , response_schema/2 - , response_array_schema/2 - , response_error_schema/2 +-import(emqx_mgmt_util, [ properties/1 + , schema/1 + , object_schema/2 + , object_array_schema/2 + , error_schema/2 ]). -export([api_spec/0]). @@ -49,113 +49,88 @@ api_spec() -> reset_all_topic_metrics_api(), reset_topic_metrics_api() ], - [ - topic_metrics_schema() - ] + [] }. -topic_metrics_schema() -> - #{ - topic_metrics => #{ - type => object, - properties => #{ - topic => #{type => string}, - create_time => #{ - type => string, - description => <<"Date time, rfc3339">> - }, - reset_time => #{ - type => string, - description => <<"Nullable. Date time, rfc3339.">> - }, - metrics => #{ - type => object, - properties => #{ - 'messages.dropped.count' => #{type => integer}, - 'messages.dropped.rate' => #{type => number}, - 'messages.in.count' => #{type => integer}, - 'messages.in.rate' => #{type => number}, - 'messages.out.count' => #{type => integer}, - 'messages.out.rate' => #{type => number}, - 'messages.qos0.in.count' => #{type => integer}, - 'messages.qos0.in.rate' => #{type => number}, - 'messages.qos0.out.count' => #{type => integer}, - 'messages.qos0.out.rate' => #{type => number}, - 'messages.qos1.in.count' => #{type => integer}, - 'messages.qos1.in.rate' => #{type => number}, - 'messages.qos1.out.count' => #{type => integer}, - 'messages.qos1.out.rate' => #{type => number}, - 'messages.qos2.in.count' => #{type => integer}, - 'messages.qos2.in.rate' => #{type => number}, - 'messages.qos2.out.count' => #{type => integer}, - 'messages.qos2.out.rate' => #{type => number} - } - } - } - } - }. +properties() -> + properties([ + {topic, string}, + {create_time, string, <<"Date time, rfc3339">>}, + {reset_time, string, <<"Nullable. Date time, rfc3339.">>}, + {metrics, object, [{'messages.dropped.count', integer}, + {'messages.dropped.rate', number}, + {'messages.in.count', integer}, + {'messages.in.rate', number}, + {'messages.out.count', integer}, + {'messages.out.rate', number}, + {'messages.qos0.in.count', integer}, + {'messages.qos0.in.rate', number}, + {'messages.qos0.out.count', integer}, + {'messages.qos0.out.rate', number}, + {'messages.qos1.in.count', integer}, + {'messages.qos1.in.rate', number}, + {'messages.qos1.out.count', integer}, + {'messages.qos1.out.rate', number}, + {'messages.qos2.in.count', integer}, + {'messages.qos2.in.rate', number}, + {'messages.qos2.out.count', integer}, + {'messages.qos2.out.rate', number}]} + ]). + list_topic_api() -> - Path = "/mqtt/topic_metrics", - TopicSchema = #{ - type => object, - properties => #{ - topic => #{ - type => string}}}, + Props = properties([{topic, string}]), MetaData = #{ get => #{ description => <<"List topic">>, - responses => #{ - <<"200">> => - response_array_schema(<<"List topic">>, TopicSchema)}}}, - {Path, MetaData, list_topic}. + responses => #{<<"200">> => object_array_schema(Props, <<"List topic">>)} + } + }, + {"/mqtt/topic_metrics", MetaData, list_topic}. list_topic_metrics_api() -> - Path = "/mqtt/topic_metrics/metrics", MetaData = #{ get => #{ description => <<"List topic metrics">>, responses => #{ - <<"200">> => - response_array_schema(<<"List topic metrics">>, topic_metrics)}}}, - {Path, MetaData, list_topic_metrics}. + <<"200">> => object_array_schema(properties(), <<"List topic metrics">>) + } + } + }, + {"/mqtt/topic_metrics/metrics", MetaData, list_topic_metrics}. get_topic_metrics_api() -> - Path = "/mqtt/topic_metrics/metrics/:topic", MetaData = #{ get => #{ description => <<"List topic metrics">>, parameters => [topic_param()], responses => #{ - <<"200">> => - response_schema(<<"List topic metrics">>, topic_metrics)}}, + <<"200">> => object_schema(properties(), <<"List topic metrics">>)}}, put => #{ description => <<"Register topic metrics">>, parameters => [topic_param()], responses => #{ - <<"200">> => - response_schema(<<"Register topic metrics">>), - <<"409">> => - response_error_schema(<<"Topic metrics max limit">>, [?EXCEED_LIMIT]), - <<"400">> => - response_error_schema(<<"Topic metrics already exist">>, [?BAD_REQUEST])}}, + <<"200">> => schema(<<"Register topic metrics">>), + <<"409">> => error_schema(<<"Topic metrics max limit">>, [?EXCEED_LIMIT]), + <<"400">> => error_schema(<<"Topic metrics already exist">>, [?BAD_REQUEST]) + } + }, delete => #{ description => <<"Deregister topic metrics">>, parameters => [topic_param()], - responses => #{ - <<"200">> => - response_schema(<<"Deregister topic metrics">>)}}}, - {Path, MetaData, operate_topic_metrics}. + responses => #{ <<"200">> => schema(<<"Deregister topic metrics">>)} + } + }, + {"/mqtt/topic_metrics/metrics/:topic", MetaData, operate_topic_metrics}. reset_all_topic_metrics_api() -> - Path = "/mqtt/topic_metrics/reset", MetaData = #{ put => #{ description => <<"Reset all topic metrics">>, - responses => #{ - <<"200">> => - response_schema(<<"Reset all topic metrics">>)}}}, - {Path, MetaData, reset_all_topic_metrics}. + responses => #{<<"200">> => schema(<<"Reset all topic metrics">>)} + } + }, + {"/mqtt/topic_metrics/reset", MetaData, reset_all_topic_metrics}. reset_topic_metrics_api() -> Path = "/mqtt/topic_metrics/reset/:topic", @@ -163,9 +138,9 @@ reset_topic_metrics_api() -> put => #{ description => <<"Reset topic metrics">>, parameters => [topic_param()], - responses => #{ - <<"200">> => - response_schema(<<"Reset topic metrics">>)}}}, + responses => #{<<"200">> => schema(<<"Reset topic metrics">>)} + } + }, {Path, MetaData, reset_topic_metrics}. topic_param() ->