refactor(topic-metrics): refactor topic_metrics api

This commit is contained in:
Turtle 2021-08-24 11:15:25 +08:00
parent ffc9846744
commit 0cb5c3e6ec
1 changed files with 58 additions and 83 deletions

View File

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