Merge pull request #6826 from JimMoen/refactor-event-message-api

refactor(api): event_message swagger spec
This commit is contained in:
JimMoen 2022-01-24 09:43:55 +08:00 committed by GitHub
commit 8046f3de6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 87 additions and 43 deletions

View File

@ -1,5 +1,24 @@
%%--------------------------------------------------------------------
%% Copyright (c) 2021-2022 EMQ Technologies Co., Ltd. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%--------------------------------------------------------------------
%% The destination URL for the telemetry data report %% The destination URL for the telemetry data report
-define(TELEMETRY_URL, "https://telemetry.emqx.io/api/telemetry"). -define(TELEMETRY_URL, "https://telemetry.emqx.io/api/telemetry").
%% Interval for reporting telemetry data, Default: 7d %% Interval for reporting telemetry data, Default: 7d
-define(REPORT_INTERVAR, 604800). -define(REPORT_INTERVAR, 604800).
-define(API_TAG_MQTT, [<<"mqtt">>]).
-define(API_SCHEMA_MODULE, emqx_modules_schema).

View File

@ -19,6 +19,7 @@
-behaviour(minirest_api). -behaviour(minirest_api).
-include_lib("typerefl/include/types.hrl"). -include_lib("typerefl/include/types.hrl").
-include("emqx_modules.hrl").
-import(hoconsc, [mk/2, ref/1, ref/2]). -import(hoconsc, [mk/2, ref/1, ref/2]).
@ -62,7 +63,7 @@ schema("/mqtt/delayed") ->
#{ #{
'operationId' => status, 'operationId' => status,
get => #{ get => #{
tags => [<<"mqtt">>], tags => ?API_TAG_MQTT,
description => <<"Get delayed status">>, description => <<"Get delayed status">>,
summary => <<"Get delayed status">>, summary => <<"Get delayed status">>,
responses => #{ responses => #{
@ -70,7 +71,7 @@ schema("/mqtt/delayed") ->
} }
}, },
put => #{ put => #{
tags => [<<"mqtt">>], tags => ?API_TAG_MQTT,
description => <<"Enable or disable delayed, set max delayed messages">>, description => <<"Enable or disable delayed, set max delayed messages">>,
'requestBody' => ref(emqx_modules_schema, "delayed"), 'requestBody' => ref(emqx_modules_schema, "delayed"),
responses => #{ responses => #{
@ -85,7 +86,7 @@ schema("/mqtt/delayed") ->
schema("/mqtt/delayed/messages/:msgid") -> schema("/mqtt/delayed/messages/:msgid") ->
#{'operationId' => delayed_message, #{'operationId' => delayed_message,
get => #{ get => #{
tags => [<<"mqtt">>], tags => ?API_TAG_MQTT,
description => <<"Get delayed message">>, description => <<"Get delayed message">>,
parameters => [{msgid, mk(binary(), #{in => path, desc => <<"delay message ID">>})}], parameters => [{msgid, mk(binary(), #{in => path, desc => <<"delay message ID">>})}],
responses => #{ responses => #{
@ -97,7 +98,7 @@ schema("/mqtt/delayed/messages/:msgid") ->
} }
}, },
delete => #{ delete => #{
tags => [<<"mqtt">>], tags => ?API_TAG_MQTT,
description => <<"Delete delayed message">>, description => <<"Delete delayed message">>,
parameters => [{msgid, mk(binary(), #{in => path, desc => <<"delay message ID">>})}], parameters => [{msgid, mk(binary(), #{in => path, desc => <<"delay message ID">>})}],
responses => #{ responses => #{
@ -113,7 +114,7 @@ schema("/mqtt/delayed/messages") ->
#{ #{
'operationId' => delayed_messages, 'operationId' => delayed_messages,
get => #{ get => #{
tags => [<<"mqtt">>], tags => ?API_TAG_MQTT,
description => <<"List delayed messages">>, description => <<"List delayed messages">>,
parameters => [ref(emqx_dashboard_swagger, page), ref(emqx_dashboard_swagger, limit)], parameters => [ref(emqx_dashboard_swagger, page), ref(emqx_dashboard_swagger, limit)],
responses => #{ responses => #{

View File

@ -17,37 +17,41 @@
-behaviour(minirest_api). -behaviour(minirest_api).
-export([api_spec/0]). -import(hoconsc, [mk/2, ref/2]).
-include("emqx_modules.hrl").
-export([ api_spec/0
, paths/0
, schema/1
]).
-export([event_message/2]). -export([event_message/2]).
-import(emqx_mgmt_util, [ schema/1
]).
api_spec() -> api_spec() ->
{[event_message_api()], []}. emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}).
conf_schema() -> paths() ->
emqx_mgmt_api_configs:gen_schema(emqx:get_config([event_message])). ["/mqtt/event_message"].
event_message_api() -> schema("/mqtt/event_message") ->
Path = "/mqtt/event_message", #{ 'operationId' => event_message
Metadata = #{ , get =>
get => #{ #{ description => <<"Event Message">>
description => <<"Event Message">>, , tags => ?API_TAG_MQTT
responses => #{ , responses =>
<<"200">> => schema(conf_schema()) #{200 => status_schema(<<"Get Event Message config successfully">>)}
} }
}, , put =>
put => #{ #{ description => <<"Update Event Message">>
description => <<"Update Event Message">>, , tags => ?API_TAG_MQTT
'requestBody' => schema(conf_schema()), , 'requestBody' => status_schema(<<"Update Event Message config">>)
responses => #{ , responses =>
<<"200">> => schema(conf_schema()) #{200 => status_schema(<<"Update Event Message config successfully">>)}
} }
} }.
},
{Path, Metadata, event_message}. status_schema(Desc) ->
mk(ref(?API_SCHEMA_MODULE, "event_message"), #{in => body, desc => Desc}).
event_message(get, _Params) -> event_message(get, _Params) ->
{200, emqx_event_message:list()}; {200, emqx_event_message:list()};

View File

@ -43,21 +43,41 @@ fields("delayed") ->
]; ];
fields("rewrite") -> fields("rewrite") ->
[ {action, sc(hoconsc:enum([subscribe, publish, all]), #{desc => "Action", example => publish})} [ { action
, {source_topic, sc(binary(), #{desc => "Origin Topic", example => "x/#"})} , sc( hoconsc:enum([subscribe, publish, all])
, {dest_topic, sc(binary(), #{desc => "Destination Topic", example => "z/y/$1"})} , #{desc => <<"Action">>, example => publish})}
, {re, fun regular_expression/1 } , { source_topic
, sc( binary()
, #{desc => <<"Origin Topic">>, example => "x/#"})}
, { dest_topic
, sc( binary()
, #{desc => <<"Destination Topic">>, example => "z/y/$1"})}
, { re, fun regular_expression/1 }
]; ];
fields("event_message") -> fields("event_message") ->
[ {"$event/client_connected", sc(boolean(), #{default => false})} [ { '$event/client_connected'
, {"$event/client_disconnected", sc(boolean(), #{default => false})} , sc( boolean()
, {"$event/client_subscribed", sc(boolean(), #{default => false})} , #{desc => <<"Client connected to EMQ X event">>, default => false})}
, {"$event/client_unsubscribed", sc(boolean(), #{default => false})} , { '$event/client_disconnected'
, {"$event/message_delivered", sc(boolean(), #{default => false})} , sc(boolean()
, {"$event/message_acked", sc(boolean(), #{default => false})} , #{desc => <<"Client disconnected to EMQ X event">>, default => false})}
, {"$event/message_dropped", sc(boolean(), #{default => false})} , { '$event/client_subscribed'
, sc( boolean()
, #{desc => <<"Client subscribe topic event">>, default => false})}
, { '$event/client_unsubscribed'
, sc( boolean()
, #{desc => <<"Client unsubscribe topic event">>, default => false})}
, { '$event/message_delivered'
, sc( boolean()
, #{desc => <<"Message delivered event">>, default => false})}
, { '$event/message_acked'
, sc( boolean()
, #{desc => <<"Message acked event">>, default => false})}
, { '$event/message_dropped'
, sc( boolean()
, #{desc => <<"Message dropped event">>, default => false})}
]; ];
fields("topic_metrics") -> fields("topic_metrics") ->

View File

@ -17,6 +17,7 @@
-behaviour(minirest_api). -behaviour(minirest_api).
-include_lib("typerefl/include/types.hrl"). -include_lib("typerefl/include/types.hrl").
-include("emqx_modules.hrl").
-export([api_spec/0, paths/0, schema/1]). -export([api_spec/0, paths/0, schema/1]).
@ -42,7 +43,7 @@ schema("/mqtt/topic_rewrite") ->
#{ #{
operationId => topic_rewrite, operationId => topic_rewrite,
get => #{ get => #{
tags => [mqtt], tags => ?API_TAG_MQTT,
description => <<"List rewrite topic.">>, description => <<"List rewrite topic.">>,
responses => #{ responses => #{
200 => hoconsc:mk(hoconsc:array(hoconsc:ref(emqx_modules_schema, "rewrite")), 200 => hoconsc:mk(hoconsc:array(hoconsc:ref(emqx_modules_schema, "rewrite")),
@ -51,6 +52,7 @@ schema("/mqtt/topic_rewrite") ->
}, },
put => #{ put => #{
description => <<"Update rewrite topic">>, description => <<"Update rewrite topic">>,
tags => ?API_TAG_MQTT,
requestBody => hoconsc:mk(hoconsc:array(hoconsc:ref(emqx_modules_schema, "rewrite")),#{}), requestBody => hoconsc:mk(hoconsc:array(hoconsc:ref(emqx_modules_schema, "rewrite")),#{}),
responses => #{ responses => #{
200 => hoconsc:mk(hoconsc:array(hoconsc:ref(emqx_modules_schema, "rewrite")), 200 => hoconsc:mk(hoconsc:array(hoconsc:ref(emqx_modules_schema, "rewrite")),

View File

@ -19,6 +19,7 @@
-behaviour(minirest_api). -behaviour(minirest_api).
-include_lib("typerefl/include/types.hrl"). -include_lib("typerefl/include/types.hrl").
-include("emqx_modules.hrl").
-import( hoconsc -import( hoconsc
, [ mk/2 , [ mk/2
@ -46,9 +47,6 @@
-define(BAD_RPC, 'BAD_RPC'). -define(BAD_RPC, 'BAD_RPC').
-define(BAD_REQUEST, 'BAD_REQUEST'). -define(BAD_REQUEST, 'BAD_REQUEST').
-define(API_TAG_MQTT, [<<"mqtt">>]).
api_spec() -> api_spec() ->
emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}). emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}).