From 824e7c4662e185e0bbcf6ee579d960b4d0dcf3ac Mon Sep 17 00:00:00 2001 From: JimMoen Date: Wed, 19 Jan 2022 14:49:40 +0800 Subject: [PATCH] refactor(api): statsd api swagger spec --- apps/emqx_statsd/src/emqx_statsd_api.erl | 71 ++++++++++++++------- apps/emqx_statsd/src/emqx_statsd_schema.erl | 18 +++++- 2 files changed, 65 insertions(+), 24 deletions(-) diff --git a/apps/emqx_statsd/src/emqx_statsd_api.erl b/apps/emqx_statsd/src/emqx_statsd_api.erl index 6fa657dcb..3b0142bd0 100644 --- a/apps/emqx_statsd/src/emqx_statsd_api.erl +++ b/apps/emqx_statsd/src/emqx_statsd_api.erl @@ -20,36 +20,61 @@ -include("emqx_statsd.hrl"). --import(emqx_mgmt_util, [ schema/1 - , bad_request/0]). +-include_lib("typerefl/include/types.hrl"). --export([api_spec/0]). +-import(hoconsc, [mk/2, ref/2]). --export([ statsd/2 +-export([statsd/2]). + +-export([ api_spec/0 + , paths/0 + , schema/1 ]). +-define(API_TAG_STATSD, [<<"statsd">>]). +-define(SCHEMA_MODULE, emqx_statsd_schema). + +-define(INTERNAL_ERROR, 'INTERNAL_ERROR'). + + api_spec() -> - {statsd_api(), []}. + emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}). -conf_schema() -> - emqx_mgmt_api_configs:gen_schema(emqx:get_raw_config([statsd])). +paths() -> + ["/statsd"]. -statsd_api() -> - Metadata = #{ - get => #{ - description => <<"Get statsd info">>, - responses => #{<<"200">> => schema(conf_schema())} - }, - put => #{ - description => <<"Update Statsd">>, - 'requestBody' => schema(conf_schema()), - responses => #{ - <<"200">> => schema(conf_schema()), - <<"400">> => bad_request() +schema("/statsd") -> + #{ 'operationId' => statsd + , get => + #{ description => <<"Get statsd config">> + , tags => ?API_TAG_STATSD + , responses => + #{200 => statsd_config_schema()} } - } - }, - [{"/statsd", Metadata, statsd}]. + , put => + #{ description => <<"Set statsd config">> + , tags => ?API_TAG_STATSD + , 'requestBody' => statsd_config_schema() + , responses => + #{200 => statsd_config_schema()} + } + }. + +%%-------------------------------------------------------------------- +%% Helper funcs +%%-------------------------------------------------------------------- + +statsd_config_schema() -> + emqx_dashboard_swagger:schema_with_example( + ref(?SCHEMA_MODULE, "statsd"), + statsd_example()). + +statsd_example() -> + #{ enable => true + , flush_time_interval => "32s" + , sample_time_interval => "32s" + , server => "127.0.0.1:8125" + }. statsd(get, _Params) -> {200, emqx:get_raw_config([<<"statsd">>], #{})}; @@ -60,5 +85,5 @@ statsd(put, #{body := Body}) -> {200, NewConfig}; {error, Reason} -> Message = list_to_binary(io_lib:format("Update config failed ~p", [Reason])), - {500, 'INTERNAL_ERROR', Message} + {500, ?INTERNAL_ERROR, Message} end. diff --git a/apps/emqx_statsd/src/emqx_statsd_schema.erl b/apps/emqx_statsd/src/emqx_statsd_schema.erl index 72b245f4a..6190f9e66 100644 --- a/apps/emqx_statsd/src/emqx_statsd_schema.erl +++ b/apps/emqx_statsd/src/emqx_statsd_schema.erl @@ -1,3 +1,19 @@ +%%-------------------------------------------------------------------- +%% 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. +%%-------------------------------------------------------------------- + -module(emqx_statsd_schema). -include_lib("typerefl/include/types.hrl"). @@ -17,7 +33,7 @@ namespace() -> "statsd". roots() -> ["statsd"]. fields("statsd") -> - [ {enable, hoconsc:mk(boolean(), #{default => false})} + [ {enable, hoconsc:mk(boolean(), #{default => false, nullable => false})} , {server, fun server/1} , {sample_time_interval, fun duration_ms/1} , {flush_time_interval, fun duration_ms/1}