fix: routes api add params (#5675)

* fix: routes api add topic query params

* fix: routes api add node query params
This commit is contained in:
DDDHuang 2021-09-07 18:31:40 +08:00 committed by GitHub
parent 35cc0d972d
commit 8b2488e099
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 43 additions and 11 deletions

View File

@ -26,8 +26,12 @@
-export([ routes/2
, route/2]).
-export([query/4]).
-define(TOPIC_NOT_FOUND, 'TOPIC_NOT_FOUND').
-define(ROUTES_QS_SCHEMA, [{<<"topic">>, binary}, {<<"node">>, atom}]).
-import(emqx_mgmt_util, [ object_schema/2
, object_array_schema/2
, error_schema/2
@ -48,7 +52,7 @@ routes_api() ->
Metadata = #{
get => #{
description => <<"EMQ X routes">>,
parameters => page_params(),
parameters => [topic_param(query) , node_param()] ++ page_params(),
responses => #{
<<"200">> => object_array_schema(properties(), <<"List route info">>)
}
@ -60,13 +64,7 @@ route_api() ->
Metadata = #{
get => #{
description => <<"EMQ X routes">>,
parameters => [#{
name => topic,
in => path,
required => true,
description => <<"Topic string, url encoding">>,
schema => #{type => string}
}],
parameters => [topic_param(path)],
responses => #{
<<"200">> =>
object_schema(properties(), <<"Route info">>),
@ -80,15 +78,15 @@ route_api() ->
%%%==============================================================================================
%% parameters trans
routes(get, #{query_string := Qs}) ->
list(Qs).
list(generate_topic(Qs)).
route(get, #{bindings := Bindings}) ->
lookup(Bindings).
lookup(generate_topic(Bindings)).
%%%==============================================================================================
%% api apply
list(Params) ->
Response = emqx_mgmt_api:paginate(emqx_route, Params, fun format/1),
Response = emqx_mgmt_api:node_query(node(), Params, emqx_route, ?ROUTES_QS_SCHEMA, {?MODULE, query}),
{200, Response}.
lookup(#{topic := Topic}) ->
@ -101,7 +99,41 @@ lookup(#{topic := Topic}) ->
%%%==============================================================================================
%% internal
generate_topic(Params = #{<<"topic">> := Topic}) ->
Params#{<<"topic">> => uri_string:percent_decode(Topic)};
generate_topic(Params = #{topic := Topic}) ->
Params#{topic => uri_string:percent_decode(Topic)};
generate_topic(Params) -> Params.
query(Tab, {Qs, _}, Start, Limit) ->
Ms = qs2ms(Qs, [{{route, '_', '_'}, [], ['$_']}]),
emqx_mgmt_api:select_table(Tab, Ms, Start, Limit, fun format/1).
qs2ms([], Res) -> Res;
qs2ms([{topic,'=:=', T} | Qs], [{{route, _, N}, [], ['$_']}]) ->
qs2ms(Qs, [{{route, T, N}, [], ['$_']}]);
qs2ms([{node,'=:=', N} | Qs], [{{route, T, _}, [], ['$_']}]) ->
qs2ms(Qs, [{{route, T, N}, [], ['$_']}]).
format(#route{topic = Topic, dest = {_, Node}}) ->
#{topic => Topic, node => Node};
format(#route{topic = Topic, dest = Node}) ->
#{topic => Topic, node => Node}.
topic_param(In) ->
#{
name => topic,
in => In,
required => In == path,
description => <<"Topic string, url encoding">>,
schema => #{type => string}
}.
node_param()->
#{
name => node,
in => query,
required => false,
description => <<"Node">>,
schema => #{type => string}
}.