chore: api code format; fix: atom refname; update minirest version
This commit is contained in:
parent
e96bac87ce
commit
2b12fa1c05
|
@ -16,7 +16,7 @@
|
|||
|
||||
-module(emqx_mgmt_api_alarms).
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
@ -58,7 +58,7 @@ alarm_schema() ->
|
|||
alarms_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "EMQ X alarms",
|
||||
description => <<"EMQ X alarms">>,
|
||||
parameters => [#{
|
||||
name => activated,
|
||||
in => query,
|
||||
|
@ -68,9 +68,9 @@ alarms_api() ->
|
|||
}],
|
||||
responses => #{
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_array_schema(<<"List all alarms">>, <<"alarm">>)}},
|
||||
emqx_mgmt_util:response_array_schema(<<"List all alarms">>, alarm)}},
|
||||
delete => #{
|
||||
description => "Remove all deactivated alarms",
|
||||
description => <<"Remove all deactivated alarms">>,
|
||||
responses => #{
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_schema(<<"Remove all deactivated alarms ok">>)}}},
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
-module(emqx_mgmt_api_apps).
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
@ -76,17 +76,17 @@ app_without_secret_schema() ->
|
|||
apps_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "List EMQ X apps",
|
||||
description => <<"List EMQ X apps">>,
|
||||
responses => #{
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_array_schema(<<"All apps">>,
|
||||
app_without_secret_schema())}},
|
||||
post => #{
|
||||
description => "EMQ X create apps",
|
||||
description => <<"EMQ X create apps">>,
|
||||
'requestBody' => emqx_mgmt_util:request_body_schema(<<"app">>),
|
||||
responses => #{
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_schema(<<"Create apps">>, <<"app_secret">>),
|
||||
emqx_mgmt_util:response_schema(<<"Create apps">>, app_secret),
|
||||
<<"400">> =>
|
||||
emqx_mgmt_util:response_error_schema(<<"App ID already exist">>, [?BAD_APP_ID])}}},
|
||||
{"/apps", Metadata, apps}.
|
||||
|
@ -94,30 +94,29 @@ apps_api() ->
|
|||
app_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "EMQ X apps",
|
||||
description => <<"EMQ X apps">>,
|
||||
parameters => [#{
|
||||
name => app_id,
|
||||
in => path,
|
||||
required => true,
|
||||
schema => #{type => string},
|
||||
example => <<"admin">>}],
|
||||
schema => #{type => string}}],
|
||||
responses => #{
|
||||
<<"404">> =>
|
||||
emqx_mgmt_util:response_error_schema(<<"App id not found">>),
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_schema("Get App", app_without_secret_schema())}},
|
||||
emqx_mgmt_util:response_schema(<<"Get App">>, app_without_secret_schema())}},
|
||||
delete => #{
|
||||
description => "EMQ X apps",
|
||||
description => <<"EMQ X apps">>,
|
||||
parameters => [#{
|
||||
name => app_id,
|
||||
in => path,
|
||||
required => true,
|
||||
schema => #{type => string},
|
||||
example => <<"admin">>}],
|
||||
schema => #{type => string}
|
||||
}],
|
||||
responses => #{
|
||||
<<"200">> => emqx_mgmt_util:response_schema("Remove app ok")}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Remove app ok">>)}},
|
||||
put => #{
|
||||
description => "EMQ X update apps",
|
||||
description => <<"EMQ X update apps">>,
|
||||
parameters => [#{
|
||||
name => app_id,
|
||||
in => path,
|
||||
|
@ -175,23 +174,19 @@ app(put, Request) ->
|
|||
%%%==============================================================================================
|
||||
%% api apply
|
||||
list(_) ->
|
||||
Data = [format_without_app_secret(Apps) || Apps <- emqx_mgmt_auth:list_apps()],
|
||||
Response = emqx_json:encode(Data),
|
||||
{200, Response}.
|
||||
{200, [format_without_app_secret(Apps) || Apps <- emqx_mgmt_auth:list_apps()]}.
|
||||
|
||||
create(#{app_id := AppID, name := Name, secret := Secret,
|
||||
desc := Desc, status := Status, expired := Expired}) ->
|
||||
case emqx_mgmt_auth:add_app(AppID, Name, Secret, Desc, Status, Expired) of
|
||||
{ok, AppSecret} ->
|
||||
Response = emqx_json:encode(#{secret => AppSecret}),
|
||||
{200, Response};
|
||||
{200, #{secret => AppSecret}};
|
||||
{error, alread_existed} ->
|
||||
Message = list_to_binary(io_lib:format("appid ~p already existed", [AppID])),
|
||||
{400, #{code => 'BAD_APP_ID', reason => Message}};
|
||||
{400, #{code => 'BAD_APP_ID', message => Message}};
|
||||
{error, Reason} ->
|
||||
Data = #{code => 'UNKNOW_ERROR',
|
||||
reason => list_to_binary(io_lib:format("~p", [Reason]))},
|
||||
Response = emqx_json:encode(Data),
|
||||
Response = #{code => 'UNKNOW_ERROR',
|
||||
message => list_to_binary(io_lib:format("~p", [Reason]))},
|
||||
{500, Response}
|
||||
end.
|
||||
|
||||
|
@ -200,8 +195,7 @@ lookup(#{app_id := AppID}) ->
|
|||
undefined ->
|
||||
{404, ?APP_ID_NOT_FOUND};
|
||||
App ->
|
||||
Data = format_with_app_secret(App),
|
||||
Response = emqx_json:encode(Data),
|
||||
Response = format_with_app_secret(App),
|
||||
{200, Response}
|
||||
end.
|
||||
|
||||
|
@ -216,8 +210,7 @@ update(App = #{app_id := AppID, name := Name, desc := Desc, status := Status, ex
|
|||
{error, not_found} ->
|
||||
{404, ?APP_ID_NOT_FOUND};
|
||||
{error, Reason} ->
|
||||
Data = #{code => 'UNKNOW_ERROR', reason => list_to_binary(io_lib:format("~p", [Reason]))},
|
||||
Response = emqx_json:encode(Data),
|
||||
Response = #{code => 'UNKNOW_ERROR', message => list_to_binary(io_lib:format("~p", [Reason]))},
|
||||
{500, Response}
|
||||
end.
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
-module(emqx_mgmt_api_clients).
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-include_lib("emqx/include/emqx.hrl").
|
||||
|
||||
|
@ -214,112 +214,106 @@ schemas() ->
|
|||
clients_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "List clients",
|
||||
description => <<"List clients">>,
|
||||
responses => #{
|
||||
<<"200">> => emqx_mgmt_util:response_array_schema(<<"List clients 200 OK">>, <<"client">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_array_schema(<<"List clients 200 OK">>, client)}}},
|
||||
{"/clients", Metadata, clients}.
|
||||
|
||||
client_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "Get clients info by client ID",
|
||||
description => <<"Get clients info by client ID">>,
|
||||
parameters => [#{
|
||||
name => clientid,
|
||||
in => path,
|
||||
schema => #{type => string},
|
||||
required => true,
|
||||
example => 123456}],
|
||||
required => true
|
||||
}],
|
||||
responses => #{
|
||||
<<"404">> => emqx_mgmt_util:response_error_schema(<<"Client id not found">>),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List clients 200 OK">>, <<"client">>)}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List clients 200 OK">>, client)}},
|
||||
delete => #{
|
||||
description => "Kick out client by client ID",
|
||||
description => <<"Kick out client by client ID">>,
|
||||
parameters => [#{
|
||||
name => clientid,
|
||||
in => path,
|
||||
schema => #{type => string},
|
||||
required => true,
|
||||
example => 123456}],
|
||||
required => true
|
||||
}],
|
||||
responses => #{
|
||||
<<"404">> => emqx_mgmt_util:response_error_schema(<<"Client id not found">>),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List clients 200 OK">>, <<"client">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List clients 200 OK">>, client)}}},
|
||||
{"/clients/:clientid", Metadata, client}.
|
||||
|
||||
clients_acl_cache_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "Get client acl cache",
|
||||
description => <<"Get client acl cache">>,
|
||||
parameters => [#{
|
||||
name => clientid,
|
||||
in => path,
|
||||
schema => #{type => string},
|
||||
required => true,
|
||||
example => 123456}],
|
||||
required => true
|
||||
}],
|
||||
responses => #{
|
||||
<<"404">> => emqx_mgmt_util:response_error_schema(<<"Client id not found">>),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List clients 200 OK">>, <<"acl_cache">>)}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Get client acl cache">>, acl_cache)}},
|
||||
delete => #{
|
||||
description => "Clean client acl cache",
|
||||
description => <<"Clean client acl cache">>,
|
||||
parameters => [#{
|
||||
name => clientid,
|
||||
in => path,
|
||||
schema => #{type => string},
|
||||
required => true,
|
||||
example => 123456}],
|
||||
required => true
|
||||
}],
|
||||
responses => #{
|
||||
<<"404">> => emqx_mgmt_util:response_error_schema(<<"Client id not found">>),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Delete clients 200 OK">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Delete clients acl cache OK">>)}}},
|
||||
{"/clients/:clientid/acl_cache", Metadata, acl_cache}.
|
||||
|
||||
subscribe_api() ->
|
||||
Metadata = #{
|
||||
post => #{
|
||||
description => "subscribe",
|
||||
parameters => [
|
||||
#{
|
||||
description => <<"Subscribe">>,
|
||||
parameters => [#{
|
||||
name => clientid,
|
||||
in => path,
|
||||
schema => #{type => string},
|
||||
required => true,
|
||||
example => 123456
|
||||
}
|
||||
],
|
||||
required => true
|
||||
}],
|
||||
'requestBody' => emqx_mgmt_util:request_body_schema(#{
|
||||
type => object,
|
||||
properties => #{
|
||||
<<"topic">> => #{
|
||||
topic => #{
|
||||
type => string,
|
||||
example => <<"topic_1">>,
|
||||
description => <<"Topic">>},
|
||||
<<"qos">> => #{
|
||||
qos => #{
|
||||
type => integer,
|
||||
enum => [0, 1, 2],
|
||||
example => 0,
|
||||
description => <<"QoS">>}}}),
|
||||
responses => #{
|
||||
<<"404">> => emqx_mgmt_util:response_error_schema(<<"Client id not found">>),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"subscribe ok">>)}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Subscribe ok">>)}},
|
||||
delete => #{
|
||||
description => "unsubscribe",
|
||||
description => <<"Unsubscribe">>,
|
||||
parameters => [
|
||||
#{
|
||||
name => clientid,
|
||||
in => path,
|
||||
schema => #{type => string},
|
||||
required => true,
|
||||
example => 123456
|
||||
required => true
|
||||
},
|
||||
#{
|
||||
name => topic,
|
||||
in => query,
|
||||
schema => #{type => string},
|
||||
required => true,
|
||||
example => <<"topic_1">>
|
||||
required => true
|
||||
}
|
||||
],
|
||||
responses => #{
|
||||
<<"404">> => emqx_mgmt_util:response_error_schema(<<"Client id not found">>),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"unsubscribe ok">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Unsubscribe ok">>)}}},
|
||||
{"/clients/:clientid/subscribe", Metadata, subscribe}.
|
||||
|
||||
%%%==============================================================================================
|
||||
|
@ -373,17 +367,15 @@ subscribe_batch(post, Request) ->
|
|||
%% api apply
|
||||
|
||||
list(Params) ->
|
||||
Data = emqx_mgmt_api:cluster_query(maps:to_list(Params), ?CLIENT_QS_SCHEMA, ?query_fun),
|
||||
Body = emqx_json:encode(Data),
|
||||
{200, Body}.
|
||||
Response = emqx_mgmt_api:cluster_query(maps:to_list(Params), ?CLIENT_QS_SCHEMA, ?query_fun),
|
||||
{200, Response}.
|
||||
|
||||
lookup(#{clientid := ClientID}) ->
|
||||
case emqx_mgmt:lookup_client({clientid, ClientID}, ?format_fun) of
|
||||
[] ->
|
||||
{404, ?CLIENT_ID_NOT_FOUND};
|
||||
ClientInfo ->
|
||||
Response = emqx_json:encode(hd(ClientInfo)),
|
||||
{200, Response}
|
||||
{200, hd(ClientInfo)}
|
||||
end.
|
||||
|
||||
kickout(#{clientid := ClientID}) ->
|
||||
|
@ -395,9 +387,10 @@ get_acl_cache(#{clientid := ClientID})->
|
|||
{error, not_found} ->
|
||||
{404, ?CLIENT_ID_NOT_FOUND};
|
||||
{error, Reason} ->
|
||||
{500, #{code => <<"UNKNOW_ERROR">>, reason => io_lib:format("~p", [Reason])}};
|
||||
Message = list_to_binary(io_lib:format("~p", [Reason])),
|
||||
{500, #{code => <<"UNKNOW_ERROR">>, message => Message}};
|
||||
Caches ->
|
||||
Response = emqx_json:encode([format_acl_cache(Cache) || Cache <- Caches]),
|
||||
Response = [format_acl_cache(Cache) || Cache <- Caches],
|
||||
{200, Response}
|
||||
end.
|
||||
|
||||
|
@ -408,7 +401,8 @@ clean_acl_cache(#{clientid := ClientID}) ->
|
|||
{error, not_found} ->
|
||||
{404, ?CLIENT_ID_NOT_FOUND};
|
||||
{error, Reason} ->
|
||||
{500, #{code => <<"UNKNOW_ERROR">>, reason => io_lib:format("~p", [Reason])}}
|
||||
Message = list_to_binary(io_lib:format("~p", [Reason])),
|
||||
{500, #{code => <<"UNKNOW_ERROR">>, message => Message}}
|
||||
end.
|
||||
|
||||
subscribe(#{clientid := ClientID, topic := Topic, qos := Qos}) ->
|
||||
|
@ -416,8 +410,8 @@ subscribe(#{clientid := ClientID, topic := Topic, qos := Qos}) ->
|
|||
{error, channel_not_found} ->
|
||||
{404, ?CLIENT_ID_NOT_FOUND};
|
||||
{error, Reason} ->
|
||||
Body = emqx_json:encode(#{code => <<"UNKNOW_ERROR">>, reason => io_lib:format("~p", [Reason])}),
|
||||
{500, Body};
|
||||
Message = list_to_binary(io_lib:format("~p", [Reason])),
|
||||
{500, #{code => <<"UNKNOW_ERROR">>, message => Message}};
|
||||
ok ->
|
||||
{200}
|
||||
end.
|
||||
|
@ -427,8 +421,8 @@ unsubscribe(#{clientid := ClientID, topic := Topic}) ->
|
|||
{error, channel_not_found} ->
|
||||
{404, ?CLIENT_ID_NOT_FOUND};
|
||||
{error, Reason} ->
|
||||
Body = emqx_json:encode(#{code => <<"UNKNOW_ERROR">>, reason => io_lib:format("~p", [Reason])}),
|
||||
{500, Body};
|
||||
Message = list_to_binary(io_lib:format("~p", [Reason])),
|
||||
{500, #{code => <<"UNKNOW_ERROR">>, message => Message}};
|
||||
{unsubscribe, [{Topic, #{}}]} ->
|
||||
{200}
|
||||
end.
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
-module(emqx_mgmt_api_listeners).
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
@ -78,28 +78,28 @@ listener_schema() ->
|
|||
listeners_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "List listeners in cluster",
|
||||
description => <<"List listeners in cluster">>,
|
||||
responses => #{
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_array_schema(<<"List all listeners">>, <<"listener">>)}}},
|
||||
emqx_mgmt_util:response_array_schema(<<"List all listeners">>, listener)}}},
|
||||
{"/listeners", Metadata, listeners}.
|
||||
|
||||
restart_listeners_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "List listeners by listener ID",
|
||||
description => <<"List listeners by listener ID">>,
|
||||
parameters => [param_path_identifier()],
|
||||
responses => #{
|
||||
<<"404">> =>
|
||||
emqx_mgmt_util:response_error_schema(<<"Listener id not found">>, ['BAD_LISTENER_ID']),
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_array_schema(<<"List listener info ok">>, <<"listener">>)}}},
|
||||
emqx_mgmt_util:response_array_schema(<<"List listener info ok">>, listener)}}},
|
||||
{"/listeners/:identifier", Metadata, listener}.
|
||||
|
||||
manage_listeners_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "Restart listeners in cluster",
|
||||
description => <<"Restart listeners in cluster">>,
|
||||
parameters => [
|
||||
param_path_identifier(),
|
||||
param_path_operation()],
|
||||
|
@ -119,7 +119,7 @@ manage_listeners_api() ->
|
|||
manage_nodes_listeners_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "Restart listeners in cluster",
|
||||
description => <<"Restart listeners in cluster">>,
|
||||
parameters => [
|
||||
param_path_node(),
|
||||
param_path_identifier(),
|
||||
|
@ -140,26 +140,26 @@ manage_nodes_listeners_api() ->
|
|||
nodes_listeners_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "Get listener info in one node",
|
||||
description => <<"Get listener info in one node">>,
|
||||
parameters => [param_path_node(), param_path_identifier()],
|
||||
responses => #{
|
||||
<<"404">> =>
|
||||
emqx_mgmt_util:response_error_schema(<<"Node name or listener id not found">>,
|
||||
['BAD_NODE_NAME', 'BAD_LISTENER_ID']),
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_schema(<<"Get listener info ok">>, <<"listener">>)}}},
|
||||
emqx_mgmt_util:response_schema(<<"Get listener info ok">>, listener)}}},
|
||||
{"/nodes/:node/listeners/:identifier", Metadata, node_listener}.
|
||||
|
||||
nodes_listener_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "List listeners in one node",
|
||||
description => <<"List listeners in one node">>,
|
||||
parameters => [param_path_node()],
|
||||
responses => #{
|
||||
<<"404">> =>
|
||||
emqx_mgmt_util:response_error_schema(<<"Listener id not found">>),
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_schema(<<"Get listener info ok">>, <<"listener">>)}}},
|
||||
emqx_mgmt_util:response_schema(<<"Get listener info ok">>, listener)}}},
|
||||
{"/nodes/:node/listeners", Metadata, node_listeners}.
|
||||
%%%==============================================================================================
|
||||
%% parameters
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
-module(emqx_mgmt_api_metrics).
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
@ -283,13 +283,12 @@ metrics_schema() ->
|
|||
metrics_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "EMQ X metrics",
|
||||
description => <<"EMQ X metrics">>,
|
||||
responses => #{
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List all metrics">>, <<"metrics">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List all metrics">>, metrics)}}},
|
||||
{"/metrics", Metadata, list}.
|
||||
|
||||
%%%==============================================================================================
|
||||
%% api apply
|
||||
list(get, _) ->
|
||||
Response = emqx_json:encode(emqx_mgmt:get_metrics()),
|
||||
{200, Response}.
|
||||
{200, emqx_mgmt:get_metrics()}.
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
%%--------------------------------------------------------------------
|
||||
-module(emqx_mgmt_api_nodes).
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
@ -103,15 +103,15 @@ node_schema() ->
|
|||
nodes_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "List EMQ X nodes",
|
||||
description => <<"List EMQ X nodes">>,
|
||||
responses => #{
|
||||
<<"200">> => emqx_mgmt_util:response_array_schema(<<"List EMQ X Nodes">>, <<"node">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_array_schema(<<"List EMQ X Nodes">>, node)}}},
|
||||
{"/nodes", Metadata, nodes}.
|
||||
|
||||
node_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "Get node info",
|
||||
description => <<"Get node info">>,
|
||||
parameters => [#{
|
||||
name => node_name,
|
||||
in => path,
|
||||
|
@ -121,13 +121,13 @@ node_api() ->
|
|||
example => node()}],
|
||||
responses => #{
|
||||
<<"400">> => emqx_mgmt_util:response_error_schema(<<"Node error">>, ['SOURCE_ERROR']),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Get EMQ X Nodes info by name">>, <<"node">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Get EMQ X Nodes info by name">>, node)}}},
|
||||
{"/nodes/:node_name", Metadata, node}.
|
||||
|
||||
node_metrics_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "Get node metrics",
|
||||
description => <<"Get node metrics">>,
|
||||
parameters => [#{
|
||||
name => node_name,
|
||||
in => path,
|
||||
|
@ -137,13 +137,13 @@ node_metrics_api() ->
|
|||
example => node()}],
|
||||
responses => #{
|
||||
<<"400">> => emqx_mgmt_util:response_error_schema(<<"Node error">>, ['SOURCE_ERROR']),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Get EMQ X Node Metrics">>, <<"metrics">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Get EMQ X Node Metrics">>, metrics)}}},
|
||||
{"/nodes/:node_name/metrics", Metadata, node_metrics}.
|
||||
|
||||
node_stats_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "Get node stats",
|
||||
description => <<"Get node stats">>,
|
||||
parameters => [#{
|
||||
name => node_name,
|
||||
in => path,
|
||||
|
@ -153,7 +153,7 @@ node_stats_api() ->
|
|||
example => node()}],
|
||||
responses => #{
|
||||
<<"400">> => emqx_mgmt_util:response_error_schema(<<"Node error">>, ['SOURCE_ERROR']),
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Get EMQ X Node Stats">>, <<"stats">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Get EMQ X Node Stats">>, stats)}}},
|
||||
{"/nodes/:node_name/stats", Metadata, node_metrics}.
|
||||
|
||||
%%%==============================================================================================
|
||||
|
@ -177,32 +177,30 @@ node_stats(get, Request) ->
|
|||
%% api apply
|
||||
list(#{}) ->
|
||||
NodesInfo = [format(Node, NodeInfo) || {Node, NodeInfo} <- emqx_mgmt:list_nodes()],
|
||||
Response = emqx_json:encode(NodesInfo),
|
||||
{200, Response}.
|
||||
{200, NodesInfo}.
|
||||
|
||||
get_node(#{node := Node}) ->
|
||||
case emqx_mgmt:lookup_node(Node) of
|
||||
#{node_status := 'ERROR'} ->
|
||||
{400, emqx_json:encode(#{code => 'SOURCE_ERROR', reason => <<"rpc_failed">>})};
|
||||
{400, #{code => 'SOURCE_ERROR', message => <<"rpc_failed">>}};
|
||||
NodeInfo ->
|
||||
Response = emqx_json:encode(format(Node, NodeInfo)),
|
||||
{200, Response}
|
||||
{200, format(Node, NodeInfo)}
|
||||
end.
|
||||
|
||||
get_metrics(#{node := Node}) ->
|
||||
case emqx_mgmt:get_metrics(Node) of
|
||||
{error, _} ->
|
||||
{400, emqx_json:encode(#{code => 'SOURCE_ERROR', reason => <<"rpc_failed">>})};
|
||||
{400, #{code => 'SOURCE_ERROR', message => <<"rpc_failed">>}};
|
||||
Metrics ->
|
||||
{200, emqx_json:encode(Metrics)}
|
||||
{200, Metrics}
|
||||
end.
|
||||
|
||||
get_stats(#{node := Node}) ->
|
||||
case emqx_mgmt:get_stats(Node) of
|
||||
{error, _} ->
|
||||
{400, emqx_json:encode(#{code => 'SOURCE_ERROR', reason => <<"rpc_failed">>})};
|
||||
{400, #{code => 'SOURCE_ERROR', message => <<"rpc_failed">>}};
|
||||
Stats ->
|
||||
{200, emqx_json:encode(Stats)}
|
||||
{200, Stats}
|
||||
end.
|
||||
|
||||
%%============================================================================================================
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
%% API
|
||||
-include_lib("emqx/include/emqx.hrl").
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
@ -33,7 +33,7 @@ api_spec() ->
|
|||
publish_api() ->
|
||||
MeteData = #{
|
||||
post => #{
|
||||
description => "publish",
|
||||
description => <<"Publish">>,
|
||||
'requestBody' => #{
|
||||
content => #{
|
||||
'application/json' => #{
|
||||
|
@ -41,13 +41,13 @@ publish_api() ->
|
|||
type => object,
|
||||
properties => maps:with([id], message_properties())}}}},
|
||||
responses => #{
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"publish ok">>, <<"message">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"publish ok">>, message)}}},
|
||||
{"/publish", MeteData, publish}.
|
||||
|
||||
publish_batch_api() ->
|
||||
MeteData = #{
|
||||
post => #{
|
||||
description => "publish",
|
||||
description => <<"publish">>,
|
||||
'requestBody' => #{
|
||||
content => #{
|
||||
'application/json' => #{
|
||||
|
@ -57,8 +57,8 @@ publish_batch_api() ->
|
|||
type => object,
|
||||
properties => maps:with([id], message_properties())}}}}},
|
||||
responses => #{
|
||||
<<"200">> => emqx_mgmt_util:response_array_schema(<<"publish ok">>, <<"message">>)}}},
|
||||
{"/publish_batch", MeteData, publish_batch}.
|
||||
<<"200">> => emqx_mgmt_util:response_array_schema(<<"publish ok">>, message)}}},
|
||||
{"/publish/bulk", MeteData, publish_batch}.
|
||||
|
||||
message_schema() ->
|
||||
#{
|
||||
|
@ -110,14 +110,13 @@ publish(post, Request) ->
|
|||
{ok, Body, _} = cowboy_req:read_body(Request),
|
||||
Message = message(emqx_json:decode(Body, [return_maps])),
|
||||
_ = emqx_mgmt:publish(Message),
|
||||
{200, emqx_json:encode(format_message(Message))}.
|
||||
{200, format_message(Message)}.
|
||||
|
||||
publish_batch(post, Request) ->
|
||||
{ok, Body, _} = cowboy_req:read_body(Request),
|
||||
Messages = messages(emqx_json:decode(Body, [return_maps])),
|
||||
_ = [emqx_mgmt:publish(Message) || Message <- Messages],
|
||||
ResponseBody = emqx_json:encode(format_message(Messages)),
|
||||
{200, ResponseBody}.
|
||||
{200, format_message(Messages)}.
|
||||
|
||||
message(Map) ->
|
||||
From = maps:get(<<"from">>, Map, http_api),
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
-include_lib("emqx/include/emqx.hrl").
|
||||
|
||||
%% API
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
@ -48,7 +48,7 @@ route_schema() ->
|
|||
routes_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "EMQ X routes",
|
||||
description => <<"EMQ X routes">>,
|
||||
parameters => [
|
||||
#{
|
||||
name => page,
|
||||
|
@ -64,13 +64,13 @@ routes_api() ->
|
|||
}],
|
||||
responses => #{
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_array_schema("List route info", <<"route">>)}}},
|
||||
emqx_mgmt_util:response_array_schema("List route info", route)}}},
|
||||
{"/routes", Metadata, routes}.
|
||||
|
||||
route_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "EMQ X routes",
|
||||
description => <<"EMQ X routes">>,
|
||||
parameters => [#{
|
||||
name => topic,
|
||||
in => path,
|
||||
|
@ -80,7 +80,7 @@ route_api() ->
|
|||
}],
|
||||
responses => #{
|
||||
<<"200">> =>
|
||||
emqx_mgmt_util:response_schema(<<"Route info">>, <<"route">>),
|
||||
emqx_mgmt_util:response_schema(<<"Route info">>, route),
|
||||
<<"404">> =>
|
||||
emqx_mgmt_util:response_error_schema(<<"Topic not found">>, [?TOPIC_NOT_FOUND])
|
||||
}}},
|
||||
|
@ -99,20 +99,15 @@ route(get, Request) ->
|
|||
%%%==============================================================================================
|
||||
%% api apply
|
||||
list(Params) ->
|
||||
Data = emqx_mgmt_api:paginate(emqx_route, Params, fun format/1),
|
||||
Response = emqx_json:encode(Data),
|
||||
Response = emqx_mgmt_api:paginate(emqx_route, Params, fun format/1),
|
||||
{200, Response}.
|
||||
|
||||
lookup(#{topic := Topic}) ->
|
||||
case emqx_mgmt:lookup_routes(Topic) of
|
||||
[] ->
|
||||
NotFound = #{code => ?TOPIC_NOT_FOUND, reason => <<"Topic not found">>},
|
||||
Response = emqx_json:encode(NotFound),
|
||||
{404, Response};
|
||||
{404, #{code => ?TOPIC_NOT_FOUND, message => <<"Topic not found">>}};
|
||||
[Route] ->
|
||||
Data = format(Route),
|
||||
Response = emqx_json:encode(Data),
|
||||
{200, Response}
|
||||
{200, format(Route)}
|
||||
end.
|
||||
|
||||
%%%==============================================================================================
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
%%--------------------------------------------------------------------
|
||||
-module(emqx_mgmt_api_stats).
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
@ -96,13 +96,12 @@ stats_schema() ->
|
|||
stats_api() ->
|
||||
Metadata = #{
|
||||
get => #{
|
||||
description => "EMQ X stats",
|
||||
description => <<"EMQ X stats">>,
|
||||
responses => #{
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List stats ok">>, <<"stats">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_schema(<<"List stats ok">>, stats)}}},
|
||||
{"/stats", Metadata, list}.
|
||||
|
||||
%%%==============================================================================================
|
||||
%% api apply
|
||||
list(get, _Request) ->
|
||||
Response = emqx_json:encode(emqx_mgmt:get_stats()),
|
||||
{200, Response}.
|
||||
{200, emqx_mgmt:get_stats()}.
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
%%--------------------------------------------------------------------
|
||||
-module(emqx_mgmt_api_status).
|
||||
%% API
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-export([api_spec/0]).
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
-module(emqx_mgmt_api_subscriptions).
|
||||
|
||||
-behavior(minirest_api).
|
||||
-behaviour(minirest_api).
|
||||
|
||||
-include_lib("emqx/include/emqx.hrl").
|
||||
|
||||
|
@ -47,7 +47,7 @@ api_spec() ->
|
|||
subscriptions_api() ->
|
||||
MetaData = #{
|
||||
get => #{
|
||||
description => "List subscriptions",
|
||||
description => <<"List subscriptions">>,
|
||||
parameters => [
|
||||
#{
|
||||
name => page,
|
||||
|
@ -93,7 +93,7 @@ subscriptions_api() ->
|
|||
}
|
||||
],
|
||||
responses => #{
|
||||
<<"200">> => emqx_mgmt_util:response_page_schema(<<"subscription">>)}}},
|
||||
<<"200">> => emqx_mgmt_util:response_page_schema(subscription)}}},
|
||||
{"/subscriptions", MetaData, subscriptions}.
|
||||
|
||||
subscription_schema() ->
|
||||
|
|
|
@ -93,16 +93,22 @@ urldecode(S) ->
|
|||
|
||||
request_body_array_schema(Schema) when is_map(Schema) ->
|
||||
json_content_schema("", #{type => array, items => Schema});
|
||||
request_body_array_schema(Ref) when is_atom(Ref) ->
|
||||
request_body_array_schema(atom_to_binary(Ref, utf8));
|
||||
request_body_array_schema(Ref) when is_binary(Ref) ->
|
||||
json_content_schema("", #{type => array, items => minirest:ref(Ref)}).
|
||||
|
||||
request_body_schema(Schema) when is_map(Schema) ->
|
||||
json_content_schema("", Schema);
|
||||
request_body_schema(Ref) when is_atom(Ref) ->
|
||||
request_body_schema(atom_to_binary(Ref));
|
||||
request_body_schema(Ref) when is_binary(Ref) ->
|
||||
json_content_schema("", minirest:ref(Ref)).
|
||||
|
||||
response_array_schema(Description, Schema) when is_map(Schema) ->
|
||||
json_content_schema(Description, #{type => array, items => Schema});
|
||||
response_array_schema(Description, Ref) when is_atom(Ref) ->
|
||||
response_array_schema(Description, atom_to_binary(Ref, utf8));
|
||||
response_array_schema(Description, Ref) when is_binary(Ref) ->
|
||||
json_content_schema(Description, #{type => array, items => minirest:ref(Ref)}).
|
||||
|
||||
|
@ -111,6 +117,8 @@ response_schema(Description) ->
|
|||
|
||||
response_schema(Description, Schema) when is_map(Schema) ->
|
||||
json_content_schema(Description, Schema);
|
||||
response_schema(Description, Ref) when is_atom(Ref) ->
|
||||
response_schema(Description, atom_to_binary(Ref, utf8));
|
||||
response_schema(Description, Ref) when is_binary(Ref) ->
|
||||
json_content_schema(Description, minirest:ref(Ref)).
|
||||
|
||||
|
@ -125,10 +133,12 @@ response_error_schema(Description, Enum) ->
|
|||
code => #{
|
||||
type => string,
|
||||
enum => Enum},
|
||||
reason => #{
|
||||
message => #{
|
||||
type => string}}},
|
||||
json_content_schema(Description, Schema).
|
||||
|
||||
response_page_schema(Def) when is_atom(Def) ->
|
||||
response_page_schema(atom_to_binary(Def, utf8));
|
||||
response_page_schema(Def) when is_binary(Def) ->
|
||||
Schema = #{
|
||||
type => object,
|
||||
|
@ -147,6 +157,8 @@ response_page_schema(Def) when is_binary(Def) ->
|
|||
items => minirest:ref(Def)}}},
|
||||
json_content_schema("", Schema).
|
||||
|
||||
response_batch_schema(DefName) when is_atom(DefName) ->
|
||||
response_batch_schema(atom_to_binary(DefName, utf8));
|
||||
response_batch_schema(DefName) when is_binary(DefName) ->
|
||||
Schema = #{
|
||||
type => object,
|
||||
|
|
|
@ -83,6 +83,7 @@ t_clients(_) ->
|
|||
%% delete /clients/:clientid kickout
|
||||
Client2Path = emqx_mgmt_api_test_util:api_path(["clients", binary_to_list(ClientId2)]),
|
||||
{ok, _} = emqx_mgmt_api_test_util:request_api(delete, Client2Path),
|
||||
timer:sleep(300),
|
||||
AfterKickoutResponse = emqx_mgmt_api_test_util:request_api(get, Client2Path),
|
||||
?assertEqual({error, {"HTTP/1.1", 404, "Not Found"}}, AfterKickoutResponse),
|
||||
|
||||
|
|
|
@ -60,13 +60,13 @@ t_publish_api(_) ->
|
|||
?assertEqual(receive_assert(?TOPIC1, 0, Payload), ok),
|
||||
emqtt:disconnect(Client).
|
||||
|
||||
t_publish_batch_api(_) ->
|
||||
t_publish_bulk_api(_) ->
|
||||
{ok, Client} = emqtt:start_link(#{username => <<"api_username">>, clientid => <<"api_clientid">>}),
|
||||
{ok, _} = emqtt:connect(Client),
|
||||
{ok, _, [0]} = emqtt:subscribe(Client, ?TOPIC1),
|
||||
{ok, _, [0]} = emqtt:subscribe(Client, ?TOPIC2),
|
||||
Payload = <<"hello">>,
|
||||
Path = emqx_mgmt_api_test_util:api_path(["publish_batch"]),
|
||||
Path = emqx_mgmt_api_test_util:api_path(["publish", "bulk"]),
|
||||
Auth = emqx_mgmt_api_test_util:auth_header_(),
|
||||
Body =[#{topic => ?TOPIC1, payload => Payload}, #{topic => ?TOPIC2, payload => Payload}],
|
||||
{ok, Response} = emqx_mgmt_api_test_util:request_api(post, Path, "", Auth, Body),
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
, {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.8.2"}}}
|
||||
, {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.10.4"}}}
|
||||
, {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.5.1"}}}
|
||||
, {minirest, {git, "https://github.com/emqx/minirest", {tag, "1.1.2"}}}
|
||||
, {minirest, {git, "https://github.com/emqx/minirest", {tag, "1.1.4"}}}
|
||||
, {ecpool, {git, "https://github.com/emqx/ecpool", {tag, "0.5.1"}}}
|
||||
, {replayq, {git, "https://github.com/emqx/replayq", {tag, "0.3.2"}}}
|
||||
, {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}}
|
||||
|
|
Loading…
Reference in New Issue