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