From e22d01d25fa2be87673021b35aa31f7a1b80b46f Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Thu, 14 Apr 2022 17:07:52 +0800
Subject: [PATCH 1/9] fix: page & limit & pool_size pos_integer; some bad
spelling
---
apps/emqx_authn/src/emqx_authn_api.erl | 12 +--
.../src/emqx_connector_http.erl | 2 +-
.../src/emqx_connector_mongo.erl | 10 +--
.../src/emqx_connector_schema_lib.erl | 4 +-
.../src/mqtt/emqx_connector_mqtt_schema.erl | 2 +-
.../src/emqx_dashboard_swagger.erl | 2 +-
apps/emqx_exhook/src/emqx_exhook_schema.erl | 79 +++++++------------
.../src/emqx_gateway_api_authn.erl | 4 +-
.../src/emqx_gateway_api_clients.erl | 4 +-
.../src/emqx_gateway_api_listeners.erl | 8 +-
apps/emqx_modules/src/emqx_delayed_api.erl | 6 +-
.../emqx_slow_subs/src/emqx_slow_subs_api.erl | 4 +-
.../test/emqx_slow_subs_api_SUITE.erl | 2 +-
rebar.config | 2 +-
14 files changed, 59 insertions(+), 82 deletions(-)
diff --git a/apps/emqx_authn/src/emqx_authn_api.erl b/apps/emqx_authn/src/emqx_authn_api.erl
index d053b1c4b..19ec71ec3 100644
--- a/apps/emqx_authn/src/emqx_authn_api.erl
+++ b/apps/emqx_authn/src/emqx_authn_api.erl
@@ -149,8 +149,8 @@ fields(response_users) ->
paginated_list_type(ref(response_user));
fields(pagination_meta) ->
[
- {page, non_neg_integer()},
- {limit, non_neg_integer()},
+ {page, pos_integer()},
+ {limit, pos_integer()},
{count, non_neg_integer()}
].
@@ -431,8 +431,8 @@ schema("/authentication/:id/users") ->
description => <<"List users in authenticator in global authentication chain">>,
parameters => [
param_auth_id(),
- {page, mk(integer(), #{in => query, desc => <<"Page Index">>, required => false})},
- {limit, mk(integer(), #{in => query, desc => <<"Page Limit">>, required => false})},
+ {page, mk(pos_integer(), #{in => query, desc => <<"Page Index">>, required => false})},
+ {limit, mk(pos_integer(), #{in => query, desc => <<"Page Limit">>, required => false})},
{like_username,
mk(binary(), #{
in => query,
@@ -481,8 +481,8 @@ schema("/listeners/:listener_id/authentication/:id/users") ->
parameters => [
param_listener_id(),
param_auth_id(),
- {page, mk(integer(), #{in => query, desc => <<"Page Index">>, required => false})},
- {limit, mk(integer(), #{in => query, desc => <<"Page Limit">>, required => false})}
+ {page, mk(pos_integer(), #{in => query, desc => <<"Page Index">>, required => false})},
+ {limit, mk(pos_integer(), #{in => query, desc => <<"Page Limit">>, required => false})}
],
responses => #{
200 => emqx_dashboard_swagger:schema_with_example(
diff --git a/apps/emqx_connector/src/emqx_connector_http.erl b/apps/emqx_connector/src/emqx_connector_http.erl
index 0e1cc3344..f53fa17e5 100644
--- a/apps/emqx_connector/src/emqx_connector_http.erl
+++ b/apps/emqx_connector/src/emqx_connector_http.erl
@@ -95,7 +95,7 @@ For example: `http://localhost:9901/`
, desc => "The type of the pool. Can be one of `random`, `hash`."
})}
, {pool_size,
- sc(non_neg_integer(),
+ sc(pos_integer(),
#{ default => 8
, desc => "The pool size."
})}
diff --git a/apps/emqx_connector/src/emqx_connector_mongo.erl b/apps/emqx_connector/src/emqx_connector_mongo.erl
index fbf42ba75..391075800 100644
--- a/apps/emqx_connector/src/emqx_connector_mongo.erl
+++ b/apps/emqx_connector/src/emqx_connector_mongo.erl
@@ -76,7 +76,9 @@ fields(sharded) ->
, {w_mode, fun w_mode/1}
] ++ mongo_fields();
fields(topology) ->
- [ {pool_size, fun internal_pool_size/1}
+ [ {pool_size, fun emqx_connector_schema_lib:pool_size/1}
+ %% TODO: what is this
+ %% 'max_overflow'
, {max_overflow, fun emqx_connector_schema_lib:pool_size/1}
, {overflow_ttl, fun duration/1}
, {overflow_check_period, fun duration/1}
@@ -114,12 +116,6 @@ mongo_fields() ->
] ++
emqx_connector_schema_lib:ssl_fields().
-internal_pool_size(type) -> integer();
-internal_pool_size(desc) -> "Pool size on start.";
-internal_pool_size(default) -> 1;
-internal_pool_size(validator) -> [?MIN(1)];
-internal_pool_size(_) -> undefined.
-
%% ===================================================================
on_start(InstId, Config = #{mongo_type := Type,
diff --git a/apps/emqx_connector/src/emqx_connector_schema_lib.erl b/apps/emqx_connector/src/emqx_connector_schema_lib.erl
index 7ad058e64..53fae8d31 100644
--- a/apps/emqx_connector/src/emqx_connector_schema_lib.erl
+++ b/apps/emqx_connector/src/emqx_connector_schema_lib.erl
@@ -34,7 +34,7 @@
]).
-type database() :: binary().
--type pool_size() :: integer().
+-type pool_size() :: pos_integer().
-type username() :: binary().
-type password() :: binary().
@@ -72,7 +72,7 @@ database(required) -> true;
database(validator) -> [?NOT_EMPTY("the value of the field 'database' cannot be empty")];
database(_) -> undefined.
-pool_size(type) -> integer();
+pool_size(type) -> pos_integer();
pool_size(desc) -> "Size of the connection pool.";
pool_size(default) -> 8;
pool_size(validator) -> [?MIN(1)];
diff --git a/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl b/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl
index 355b86aaf..25291059d 100644
--- a/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl
+++ b/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl
@@ -93,7 +93,7 @@ topic filters for 'remote_topic' of ingress connections.
"messages in case of ACK not received.",
#{default => "15s"})}
, {max_inflight,
- sc(integer(),
+ sc(non_neg_integer(),
#{ default => 32
, desc => "Max inflight (sent, but un-acked) messages of the MQTT protocol"
})}
diff --git a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl
index 7ef374ec3..8630803ec 100644
--- a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl
+++ b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl
@@ -127,7 +127,7 @@ namespace() -> "public".
fields(page) ->
Desc = <<"Page number of the results to fetch.">>,
Meta = #{in => query, desc => Desc, default => 1, example => 1},
- [{page, hoconsc:mk(integer(), Meta)}];
+ [{page, hoconsc:mk(pos_integer(), Meta)}];
fields(limit) ->
Desc = iolist_to_binary([
<<"Results per page(max ">>,
diff --git a/apps/emqx_exhook/src/emqx_exhook_schema.erl b/apps/emqx_exhook/src/emqx_exhook_schema.erl
index 06a98e920..81d6ef33b 100644
--- a/apps/emqx_exhook/src/emqx_exhook_schema.erl
+++ b/apps/emqx_exhook/src/emqx_exhook_schema.erl
@@ -50,55 +50,36 @@ fields(exhook) ->
)}
];
fields(server) ->
- [
- {name,
- sc(
- binary(),
- #{desc => "Name of the exhook server."}
- )},
- {enable,
- sc(
- boolean(),
- #{
- default => true,
- desc => "Enable the exhook server."
- }
- )},
- {url,
- sc(
- binary(),
- #{desc => "URL of the gRPC server."}
- )},
- {request_timeout,
- sc(
- duration(),
- #{
- default => "5s",
- desc => "The timeout to request gRPC server."
- }
- )},
- {failed_action, failed_action()},
- {ssl, sc(ref(ssl_conf), #{})},
- {auto_reconnect,
- sc(
- hoconsc:union([false, duration()]),
- #{
- default => "60s",
- desc =>
- "Whether to automatically reconnect (initialize) the gRPC server.
"
- "When gRPC is not available, exhook tries to request the gRPC service at "
- "that interval and reinitialize the list of mounted hooks."
- }
- )},
- {pool_size,
- sc(
- integer(),
- #{
- default => 8,
- example => 8,
- desc => "The process pool size for gRPC client."
- }
- )}
+ [ {name, sc(binary(),
+ #{ desc => "Name of the exhook server."
+ })}
+ , {enable, sc(boolean(),
+ #{ default => true
+ , desc => "Enable the exhook server."
+ })}
+ , {url, sc(binary(),
+ #{ desc => "URL of the gRPC server."
+ })}
+ , {request_timeout, sc(duration(),
+ #{ default => "5s"
+ , desc => "The timeout to request gRPC server."
+ })}
+ , {failed_action, failed_action()}
+ , {ssl,
+ sc(ref(ssl_conf), #{})}
+ , {auto_reconnect,
+ sc(hoconsc:union([false, duration()]),
+ #{ default => "60s"
+ , desc => "Whether to automatically reconnect (initialize) the gRPC server.
"
+ "When gRPC is not available, exhook tries to request the gRPC service at "
+ "that interval and reinitialize the list of mounted hooks."
+ })}
+ , {pool_size,
+ sc(pos_integer(),
+ #{ default => 8
+ , example => 8
+ , desc => "The process pool size for gRPC client."
+ })}
];
fields(ssl_conf) ->
Schema = emqx_schema:client_ssl_opts_schema(#{}),
diff --git a/apps/emqx_gateway/src/emqx_gateway_api_authn.erl b/apps/emqx_gateway/src/emqx_gateway_api_authn.erl
index 644b44574..9b37145f8 100644
--- a/apps/emqx_gateway/src/emqx_gateway_api_authn.erl
+++ b/apps/emqx_gateway/src/emqx_gateway_api_authn.erl
@@ -384,7 +384,7 @@ params_paging_in_qs() ->
[
{page,
mk(
- integer(),
+ pos_integer(),
#{
in => query,
required => false,
@@ -394,7 +394,7 @@ params_paging_in_qs() ->
)},
{limit,
mk(
- integer(),
+ pos_integer(),
#{
in => query,
required => false,
diff --git a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl
index dfeceb24e..c9870d828 100644
--- a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl
+++ b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl
@@ -664,7 +664,7 @@ params_paging() ->
[
{page,
mk(
- integer(),
+ pos_integer(),
#{
in => query,
required => false,
@@ -674,7 +674,7 @@ params_paging() ->
)},
{limit,
mk(
- integer(),
+ pos_integer(),
#{
in => query,
desc => <<"Page Limit">>,
diff --git a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl
index 44d938c60..77e4b48aa 100644
--- a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl
+++ b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl
@@ -191,7 +191,7 @@ users(get, #{bindings := #{name := Name0, id := Id}, query_string := Qs}) ->
Name0,
Id,
fun(_GwName, #{id := AuthId, chain_name := ChainName}) ->
- emqx_authn_api:list_users(ChainName, AuthId, page_pramas(Qs))
+ emqx_authn_api:list_users(ChainName, AuthId, page_params(Qs))
end
);
users(post, #{
@@ -261,7 +261,7 @@ import_users(post, #{
%%--------------------------------------------------------------------
%% Utils
-page_pramas(Qs) ->
+page_params(Qs) ->
maps:with([<<"page">>, <<"limit">>], Qs).
%%--------------------------------------------------------------------
@@ -555,7 +555,7 @@ params_paging_in_qs() ->
[
{page,
mk(
- integer(),
+ pos_integer(),
#{
in => query,
required => false,
@@ -565,7 +565,7 @@ params_paging_in_qs() ->
)},
{limit,
mk(
- integer(),
+ pos_integer(),
#{
in => query,
required => false,
diff --git a/apps/emqx_modules/src/emqx_delayed_api.erl b/apps/emqx_modules/src/emqx_delayed_api.erl
index 4029646af..47c714037 100644
--- a/apps/emqx_modules/src/emqx_delayed_api.erl
+++ b/apps/emqx_modules/src/emqx_delayed_api.erl
@@ -149,9 +149,9 @@ schema("/mqtt/delayed/messages") ->
[
{data, mk(hoconsc:array(ref("message")), #{})},
{meta, [
- {page, mk(integer(), #{})},
- {limit, mk(integer(), #{})},
- {count, mk(integer(), #{})}
+ {page, mk(pos_integer(), #{})},
+ {limit, mk(pos_integer(), #{})},
+ {count, mk(non_neg_integer(), #{})}
]}
]
}
diff --git a/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl b/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl
index 98072ba9c..801c5ff51 100644
--- a/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl
+++ b/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl
@@ -50,8 +50,8 @@ schema(("/slow_subscriptions")) ->
},
get => #{tags => [<<"slow subs">>],
description => <<"Get slow topics statistics record data">>,
- parameters => [ {page, mk(integer(), #{in => query})}
- , {limit, mk(integer(), #{in => query})}
+ parameters => [ {page, mk(pos_integer(), #{in => query})}
+ , {limit, mk(pos_integer(), #{in => query})}
],
'requestBody' => [],
responses => #{200 => [{data, mk(hoconsc:array(ref(record)), #{})}]}
diff --git a/apps/emqx_slow_subs/test/emqx_slow_subs_api_SUITE.erl b/apps/emqx_slow_subs/test/emqx_slow_subs_api_SUITE.erl
index 7cefbac21..fec10839d 100644
--- a/apps/emqx_slow_subs/test/emqx_slow_subs_api_SUITE.erl
+++ b/apps/emqx_slow_subs/test/emqx_slow_subs_api_SUITE.erl
@@ -96,7 +96,7 @@ t_get_history(_) ->
lists:foreach(Each, lists:seq(1, 5)),
- {ok, Data} = request_api(get, api_path(["slow_subscriptions"]), "_page=1&_limit=10",
+ {ok, Data} = request_api(get, api_path(["slow_subscriptions"]), "page=1&limit=10",
auth_header_()),
#{<<"data">> := [First | _]} = emqx_json:decode(Data, [return_maps]),
diff --git a/rebar.config b/rebar.config
index 75a5da56a..75d156e01 100644
--- a/rebar.config
+++ b/rebar.config
@@ -47,7 +47,7 @@
[ {lc, {git, "https://github.com/emqx/lc.git", {tag, "0.2.1"}}}
, {redbug, "2.0.7"}
, {gpb, "4.11.2"} %% gpb only used to build, but not for release, pin it here to avoid fetching a wrong version due to rebar plugins scattered in all the deps
- , {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.8.6"}}}
+ , {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.9.0"}}}
, {ehttpc, {git, "https://github.com/emqx/ehttpc", {tag, "0.1.12"}}}
, {gproc, {git, "https://github.com/uwiger/gproc", {tag, "0.8.0"}}}
, {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}}
From 92eaf403f190b5a4ddb485076ea572f2daa084ce Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Thu, 14 Apr 2022 17:15:46 +0800
Subject: [PATCH 2/9] fix: mongo connector bad schema
---
apps/emqx_connector/src/emqx_connector_mongo.erl | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/apps/emqx_connector/src/emqx_connector_mongo.erl b/apps/emqx_connector/src/emqx_connector_mongo.erl
index 391075800..bd02ccc02 100644
--- a/apps/emqx_connector/src/emqx_connector_mongo.erl
+++ b/apps/emqx_connector/src/emqx_connector_mongo.erl
@@ -77,9 +77,7 @@ fields(sharded) ->
] ++ mongo_fields();
fields(topology) ->
[ {pool_size, fun emqx_connector_schema_lib:pool_size/1}
- %% TODO: what is this
- %% 'max_overflow'
- , {max_overflow, fun emqx_connector_schema_lib:pool_size/1}
+ , {max_overflow, fun max_overflow/1}
, {overflow_ttl, fun duration/1}
, {overflow_check_period, fun duration/1}
, {local_threshold_ms, fun duration/1}
@@ -330,6 +328,11 @@ duration(desc) -> "Time interval, such as timeout or TTL.";
duration(required) -> false;
duration(_) -> undefined.
+max_overflow(type) -> non_neg_integer();
+max_overflow(desc) -> "Max Overflow.";
+max_overflow(default) -> 0;
+max_overflow(_) -> undefined.
+
replica_set_name(type) -> binary();
replica_set_name(desc) -> "Name of the replica set.";
replica_set_name(required) -> false;
From 82ce6ae9f9f4e7cd80d1b7cde7d54c63ee62266c Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Thu, 14 Apr 2022 18:56:03 +0800
Subject: [PATCH 3/9] fix: bad integer, bad qos; TODO: gateway api * 2
---
.../src/emqx_dashboard_monitor_api.erl | 2 +-
apps/emqx_gateway/src/emqx_gateway_api.erl | 8 +-
.../src/emqx_gateway_api_clients.erl | 20 ++--
.../src/emqx_gateway_api_listeners.erl | 6 +-
apps/emqx_gateway/src/emqx_gateway_schema.erl | 10 +-
.../src/emqx_mgmt_api_metrics.erl | 2 +-
.../src/emqx_mgmt_api_stats.erl | 91 +++++--------------
apps/emqx_modules/src/emqx_delayed_api.erl | 6 +-
.../src/emqx_rule_api_schema.erl | 22 ++---
.../src/emqx_slow_subs_schema.erl | 2 +-
10 files changed, 65 insertions(+), 104 deletions(-)
diff --git a/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl b/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl
index 35597c9ec..b9ffc7cd1 100644
--- a/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl
+++ b/apps/emqx_dashboard/src/emqx_dashboard_monitor_api.erl
@@ -107,7 +107,7 @@ fields(sampler) ->
Samplers =
[{SamplerName, hoconsc:mk(integer(), #{desc => swagger_desc(SamplerName)})}
|| SamplerName <- ?SAMPLER_LIST],
- [{time_stamp, hoconsc:mk(integer(), #{desc => <<"Timestamp">>})} | Samplers];
+ [{time_stamp, hoconsc:mk(non_neg_integer(), #{desc => <<"Timestamp">>})} | Samplers];
fields(sampler_current) ->
[{SamplerName, hoconsc:mk(integer(), #{desc => swagger_desc(SamplerName)})}
diff --git a/apps/emqx_gateway/src/emqx_gateway_api.erl b/apps/emqx_gateway/src/emqx_gateway_api.erl
index 771a2879c..b8a8d9902 100644
--- a/apps/emqx_gateway/src/emqx_gateway_api.erl
+++ b/apps/emqx_gateway/src/emqx_gateway_api.erl
@@ -284,12 +284,12 @@ fields(gateway_overview) ->
)},
{max_connections,
mk(
- integer(),
+ pos_integer(),
#{desc => <<"The Gateway allowed maximum connections/clients">>}
)},
{current_connections,
mk(
- integer(),
+ non_neg_integer(),
#{desc => <<"The Gateway current connected connections/clients">>}
)},
{listeners,
@@ -410,11 +410,11 @@ convert_listener_struct(Schema) ->
),
lists:keystore(listeners, 1, Schema1, {listeners, ListenerSchema}).
-remove_listener_and_authn(Schmea) ->
+remove_listener_and_authn(Schema) ->
lists:keydelete(
authentication,
1,
- lists:keydelete(listeners, 1, Schmea)
+ lists:keydelete(listeners, 1, Schema)
).
listeners_schema(?R_REF(_Mod, tcp_listeners)) ->
diff --git a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl
index c9870d828..0c5120818 100644
--- a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl
+++ b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl
@@ -392,21 +392,21 @@ format_channel_info({_, Infos, Stats} = R) ->
{heap_size, Stats, 0},
{reductions, Stats, 0}
],
- eval(FetchX ++ extra_feilds(R)).
+ eval(FetchX ++ extra_fields(R)).
-extra_feilds({_, Infos, _Stats} = R) ->
- extra_feilds(
+extra_fields({_, Infos, _Stats} = R) ->
+ extra_fields(
maps:get(protocol, maps:get(clientinfo, Infos)),
R
).
-extra_feilds(lwm2m, {_, Infos, _Stats}) ->
+extra_fields(lwm2m, {_, Infos, _Stats}) ->
ClientInfo = maps:get(clientinfo, Infos, #{}),
[
{endpoint_name, ClientInfo},
{lifetime, ClientInfo}
];
-extra_feilds(_, _) ->
+extra_fields(_, _) ->
[].
eval(Ls) ->
@@ -495,7 +495,7 @@ schema("/gateway/:name/clients/:clientid/subscriptions") ->
#{
200 => emqx_dashboard_swagger:schema_with_examples(
hoconsc:array(ref(subscription)),
- examples_subsctiption_list()
+ examples_subscription_list()
)
}
)
@@ -506,14 +506,14 @@ schema("/gateway/:name/clients/:clientid/subscriptions") ->
parameters => params_client_insta(),
'requestBody' => emqx_dashboard_swagger:schema_with_examples(
ref(subscription),
- examples_subsctiption()
+ examples_subscription()
),
responses =>
?STANDARD_RESP(
#{
201 => emqx_dashboard_swagger:schema_with_examples(
ref(subscription),
- examples_subsctiption()
+ examples_subscription()
)
}
)
@@ -1089,7 +1089,7 @@ examples_client() ->
}
}.
-examples_subsctiption_list() ->
+examples_subscription_list() ->
#{
general_subscription_list =>
#{
@@ -1103,7 +1103,7 @@ examples_subsctiption_list() ->
}
}.
-examples_subsctiption() ->
+examples_subscription() ->
#{
general_subscription =>
#{
diff --git a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl
index 77e4b48aa..aebe77a7c 100644
--- a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl
+++ b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl
@@ -627,10 +627,12 @@ fields(tcp_listener_opts) ->
{high_watermark, mk(binary(), #{})},
{nodelay, mk(boolean(), #{})},
{reuseaddr, boolean()},
+ %% TODO: duri
{send_timeout, binary()},
{send_timeout_close, boolean()}
];
fields(ssl_listener_opts) ->
+ %% TODO: maybe use better ssl options schema from emqx_ssl_lib or somewhere
[
{cacertfile, binary()},
{certfile, binary()},
@@ -762,7 +764,7 @@ common_listener_opts() ->
required => false,
desc =>
<<
- "The Mounpoint for clients of the listener. "
+ "The Mountpoint for clients of the listener. "
"The gateway-level mountpoint configuration can be overloaded "
"when it is not null or empty string"
>>
@@ -774,7 +776,7 @@ common_listener_opts() ->
emqx_authn_schema:authenticator_type(),
#{
required => {false, recursively},
- desc => <<"The authenticatior for this listener">>
+ desc => <<"The authenticator for this listener">>
}
)}
] ++ emqx_gateway_schema:proxy_protocol_opts().
diff --git a/apps/emqx_gateway/src/emqx_gateway_schema.erl b/apps/emqx_gateway/src/emqx_gateway_schema.erl
index 0f64fecfc..385be93ad 100644
--- a/apps/emqx_gateway/src/emqx_gateway_schema.erl
+++ b/apps/emqx_gateway/src/emqx_gateway_schema.erl
@@ -28,9 +28,9 @@
-include_lib("typerefl/include/types.hrl").
-type ip_port() :: tuple().
--type duration() :: integer().
--type duration_s() :: integer().
--type bytesize() :: integer().
+-type duration() :: non_neg_integer().
+-type duration_s() :: non_neg_integer().
+-type bytesize() :: pos_integer().
-type comma_separated_list() :: list().
-typerefl_from_string({ip_port/0, emqx_schema, to_ip_port}).
@@ -117,7 +117,7 @@ fields(stomp_frame) ->
[
{max_headers,
sc(
- integer(),
+ non_neg_integer(),
#{
default => 10,
desc => "The maximum number of Header"
@@ -125,7 +125,7 @@ fields(stomp_frame) ->
)},
{max_headers_length,
sc(
- integer(),
+ non_neg_integer(),
#{
default => 1024,
desc => "The maximum string length of the Header Value"
diff --git a/apps/emqx_management/src/emqx_mgmt_api_metrics.erl b/apps/emqx_management/src/emqx_mgmt_api_metrics.erl
index ee087efa9..96f3176b0 100644
--- a/apps/emqx_management/src/emqx_mgmt_api_metrics.erl
+++ b/apps/emqx_management/src/emqx_mgmt_api_metrics.erl
@@ -264,4 +264,4 @@ properties() ->
].
m(K, Desc) ->
- {K, mk(integer(), #{desc => Desc})}.
+ {K, mk(non_neg_integer(), #{desc => Desc})}.
diff --git a/apps/emqx_management/src/emqx_mgmt_api_stats.erl b/apps/emqx_management/src/emqx_mgmt_api_stats.erl
index af233ef17..e67f142ac 100644
--- a/apps/emqx_management/src/emqx_mgmt_api_stats.erl
+++ b/apps/emqx_management/src/emqx_mgmt_api_stats.erl
@@ -63,72 +63,29 @@ fields(aggregate) ->
, example => false})}
];
fields(node_stats_data) ->
- [ { 'channels.count'
- , mk( integer(), #{ desc => <<"sessions.count">>
- , example => 0})}
- , { 'channels.max'
- , mk( integer(), #{ desc => <<"session.max">>
- , example => 0})}
- , { 'connections.count'
- , mk( integer(), #{ desc => <<"Number of current connections">>
- , example => 0})}
- , { 'connections.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of connections">>
- , example => 0})}
- , { 'delayed.count'
- , mk( integer(), #{ desc => <<"Number of delayed messages">>
- , example => 0})}
- , { 'delayed.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of delayed messages">>
- , example => 0})}
- , { 'live_connections.count'
- , mk( integer(), #{ desc => <<"Number of current live connections">>
- , example => 0})}
- , { 'live_connections.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of live connections">>
- , example => 0})}
- , { 'retained.count'
- , mk( integer(), #{ desc => <<"Number of currently retained messages">>
- , example => 0})}
- , { 'retained.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of retained messages">>
- , example => 0})}
- , { 'sessions.count'
- , mk( integer(), #{ desc => <<"Number of current sessions">>
- , example => 0})}
- , { 'sessions.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of sessions">>
- , example => 0})}
- , { 'suboptions.count'
- , mk( integer(), #{ desc => <<"subscriptions.count">>
- , example => 0})}
- , { 'suboptions.max'
- , mk( integer(), #{ desc => <<"subscriptions.max">>
- , example => 0})}
- , { 'subscribers.count'
- , mk( integer(), #{ desc => <<"Number of current subscribers">>
- , example => 0})}
- , { 'subscribers.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of subscribers">>
- , example => 0})}
- , { 'subscriptions.count'
- , mk( integer(), #{ desc => <<"Number of current subscriptions, including shared subscriptions">>
- , example => 0})}
- , { 'subscriptions.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of subscriptions">>
- , example => 0})}
- , { 'subscriptions.shared.count'
- , mk( integer(), #{ desc => <<"Number of current shared subscriptions">>
- , example => 0})}
- , { 'subscriptions.shared.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of shared subscriptions">>
- , example => 0})}
- , { 'topics.count'
- , mk( integer(), #{ desc => <<"Number of current topics">>
- , example => 0})}
- , { 'topics.max'
- , mk( integer(), #{ desc => <<"Historical maximum number of topics">>
- , example => 0})}
+ [
+ stats_schema('channels.count', <<"sessions.count">>),
+ stats_schema('channels.max', <<"session.max">>),
+ stats_schema('connections.count', <<"Number of current connections">>),
+ stats_schema('connections.max', <<"Historical maximum number of connections">>),
+ stats_schema('delayed.count', <<"Number of delayed messages">>),
+ stats_schema('delayed.max', <<"Historical maximum number of delayed messages">>),
+ stats_schema('live_connections.count', <<"Number of current live connections">>),
+ stats_schema('live_connections.max', <<"Historical maximum number of live connections">>),
+ stats_schema('retained.count', <<"Number of currently retained messages">>),
+ stats_schema('retained.max', <<"Historical maximum number of retained messages">>),
+ stats_schema('sessions.count', <<"Number of current sessions">>),
+ stats_schema('sessions.max', <<"Historical maximum number of sessions">>),
+ stats_schema('suboptions.count', <<"subscriptions.count">>),
+ stats_schema('suboptions.max', <<"subscriptions.max">>),
+ stats_schema('subscribers.count', <<"Number of current subscribers">>),
+ stats_schema('subscribers.max', <<"Historical maximum number of subscribers">>),
+ stats_schema('subscriptions.count', <<"Number of current subscriptions, including shared subscriptions">>),
+ stats_schema('subscriptions.max', <<"Historical maximum number of subscriptions">>),
+ stats_schema('subscriptions.shared.count', <<"Number of current shared subscriptions">>),
+ stats_schema('subscriptions.shared.max', <<"Historical maximum number of shared subscriptions">>),
+ stats_schema('topics.count', <<"Number of current topics">>),
+ stats_schema('topics.max', <<"Historical maximum number of topics">>)
];
fields(aggergate_data) ->
[ { node
@@ -136,6 +93,8 @@ fields(aggergate_data) ->
, example => <<"emqx@127.0.0.1">>})}
] ++ fields(node_stats_data).
+stats_schema(Name, Desc) ->
+ {Name, mk(non_neg_integer(), #{desc => Desc, example => 0})}.
%%%==============================================================================================
%% api apply
diff --git a/apps/emqx_modules/src/emqx_delayed_api.erl b/apps/emqx_modules/src/emqx_delayed_api.erl
index 47c714037..c1347922c 100644
--- a/apps/emqx_modules/src/emqx_delayed_api.erl
+++ b/apps/emqx_modules/src/emqx_delayed_api.erl
@@ -163,11 +163,11 @@ fields("message_without_payload") ->
{msgid, mk(integer(), #{desc => <<"Message Id (MQTT message id hash)">>})},
{node, mk(binary(), #{desc => <<"The node where message from">>})},
{publish_at, mk(binary(), #{desc => <<"Client publish message time, rfc 3339">>})},
- {delayed_interval, mk(integer(), #{desc => <<"Delayed interval, second">>})},
- {delayed_remaining, mk(integer(), #{desc => <<"Delayed remaining, second">>})},
+ {delayed_interval, mk(pos_integer(), #{desc => <<"Delayed interval, second">>})},
+ {delayed_remaining, mk(non_neg_integer(), #{desc => <<"Delayed remaining, second">>})},
{expected_at, mk(binary(), #{desc => <<"Expect publish time, rfc 3339">>})},
{topic, mk(binary(), #{desc => <<"Topic">>, example => <<"/sys/#">>})},
- {qos, mk(binary(), #{desc => <<"QoS">>})},
+ {qos, mk(emqx_schema:qos(), #{desc => <<"QoS">>})},
{from_clientid, mk(binary(), #{desc => <<"From ClientId">>})},
{from_username, mk(binary(), #{desc => <<"From Username">>})}
];
diff --git a/apps/emqx_rule_engine/src/emqx_rule_api_schema.erl b/apps/emqx_rule_engine/src/emqx_rule_api_schema.erl
index 32c53d5cd..02a1610fb 100644
--- a/apps/emqx_rule_engine/src/emqx_rule_api_schema.erl
+++ b/apps/emqx_rule_engine/src/emqx_rule_api_schema.erl
@@ -53,7 +53,7 @@ fields("rule_info") ->
})}
] ++ fields("rule_creation");
-%% TODO: we can delete this API if the Dashboard not denpends on it
+%% TODO: we can delete this API if the Dashboard not depends on it
fields("rule_events") ->
ETopics = [binary_to_atom(emqx_rule_events:event_topic(E)) || E <- emqx_rule_events:event_names()],
[ {"event", sc(hoconsc:enum(ETopics), #{desc => "The event topics", required => true})}
@@ -83,39 +83,39 @@ fields("rule_test") ->
];
fields("metrics") ->
- [ {"sql.matched", sc(integer(), #{
+ [ {"sql.matched", sc(non_neg_integer(), #{
desc => "How much times the FROM clause of the SQL is matched."
})}
, {"sql.matched.rate", sc(float(), #{desc => "The rate of matched, times/second"})}
, {"sql.matched.rate.max", sc(float(), #{desc => "The max rate of matched, times/second"})}
, {"sql.matched.rate.last5m", sc(float(),
#{desc => "The average rate of matched in last 5 minutes, times/second"})}
- , {"sql.passed", sc(integer(), #{desc => "How much times the SQL is passed"})}
- , {"sql.failed", sc(integer(), #{desc => "How much times the SQL is failed"})}
- , {"sql.failed.exception", sc(integer(), #{
+ , {"sql.passed", sc(non_neg_integer(), #{desc => "How much times the SQL is passed"})}
+ , {"sql.failed", sc(non_neg_integer(), #{desc => "How much times the SQL is failed"})}
+ , {"sql.failed.exception", sc(non_neg_integer(), #{
desc => "How much times the SQL is failed due to exceptions. "
"This may because of a crash when calling a SQL function, or "
"trying to do arithmetic operation on undefined variables"
})}
- , {"sql.failed.unknown", sc(integer(), #{
+ , {"sql.failed.unknown", sc(non_neg_integer(), #{
desc => "How much times the SQL is failed due to an unknown error."
})}
- , {"outputs.total", sc(integer(), #{
+ , {"outputs.total", sc(non_neg_integer(), #{
desc => "How much times the outputs are called by the rule. "
"This value may several times of 'sql.matched', depending on the "
"number of the outputs of the rule."
})}
- , {"outputs.success", sc(integer(), #{
+ , {"outputs.success", sc(non_neg_integer(), #{
desc => "How much times the rule success to call the outputs."
})}
- , {"outputs.failed", sc(integer(), #{
+ , {"outputs.failed", sc(non_neg_integer(), #{
desc => "How much times the rule failed to call the outputs."
})}
- , {"outputs.failed.out_of_service", sc(integer(), #{
+ , {"outputs.failed.out_of_service", sc(non_neg_integer(), #{
desc => "How much times the rule failed to call outputs due to the output is "
"out of service. For example, a bridge is disabled or stopped."
})}
- , {"outputs.failed.unknown", sc(integer(), #{
+ , {"outputs.failed.unknown", sc(non_neg_integer(), #{
desc => "How much times the rule failed to call outputs due to to an unknown error."
})}
];
diff --git a/apps/emqx_slow_subs/src/emqx_slow_subs_schema.erl b/apps/emqx_slow_subs/src/emqx_slow_subs_schema.erl
index 1d54edd6b..e9fe2fec3 100644
--- a/apps/emqx_slow_subs/src/emqx_slow_subs_schema.erl
+++ b/apps/emqx_slow_subs/src/emqx_slow_subs_schema.erl
@@ -19,7 +19,7 @@ fields("slow_subs") ->
"300s",
"The eviction time of the record, which in the statistics record table.")}
, {top_k_num,
- sc(integer(),
+ sc(pos_integer(),
10,
"The maximum number of records in the slow subscription statistics record table.")}
, {stats_type,
From 1121c6a47e1522fdf52c62a783cdac1e9460ff72 Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Sat, 16 Apr 2022 12:53:18 +0800
Subject: [PATCH 4/9] fix: code format3
---
apps/emqx_dashboard/src/emqx_dashboard_swagger.erl | 2 ++
1 file changed, 2 insertions(+)
diff --git a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl
index 8630803ec..89682f33e 100644
--- a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl
+++ b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl
@@ -582,6 +582,8 @@ typename_to_spec("float()", _Mod) ->
typename_to_spec("integer()", _Mod) ->
#{type => integer, example => 100};
typename_to_spec("non_neg_integer()", _Mod) ->
+ #{type => integer, minimum => 0, example => 100};
+typename_to_spec("pos_integer()", _Mod) ->
#{type => integer, minimum => 1, example => 100};
typename_to_spec("number()", _Mod) ->
#{type => number, example => 42};
From 034fa3b9be6512860dc6e451d2c7a14514c70319 Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Fri, 15 Apr 2022 09:38:50 +0800
Subject: [PATCH 5/9] fix: update mix dep version
---
mix.exs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mix.exs b/mix.exs
index 86a76615e..95b74c11c 100644
--- a/mix.exs
+++ b/mix.exs
@@ -48,7 +48,7 @@ defmodule EMQXUmbrella.MixProject do
[
{:lc, github: "emqx/lc", tag: "0.2.1"},
{:redbug, "2.0.7"},
- {:typerefl, github: "ieQu1/typerefl", tag: "0.8.6", override: true},
+ {:typerefl, github: "ieQu1/typerefl", tag: "0.9.0", override: true},
{:ehttpc, github: "emqx/ehttpc", tag: "0.1.12"},
{:gproc, github: "uwiger/gproc", tag: "0.8.0", override: true},
{:jiffy, github: "emqx/jiffy", tag: "1.0.5", override: true},
From a1ef677e33b6cfd8a36c44aaf2e7fd568db98fb0 Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Fri, 15 Apr 2022 10:22:13 +0800
Subject: [PATCH 6/9] fix: remove duplicate references
---
apps/emqx/rebar.config | 1 -
apps/emqx_dashboard/rebar.config | 5 +----
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/apps/emqx/rebar.config b/apps/emqx/rebar.config
index 4221bd80d..f3295fc1c 100644
--- a/apps/emqx/rebar.config
+++ b/apps/emqx/rebar.config
@@ -24,7 +24,6 @@
{deps, [
{lc, {git, "https://github.com/emqx/lc.git", {tag, "0.2.1"}}},
{gproc, {git, "https://github.com/uwiger/gproc", {tag, "0.8.0"}}},
- {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.8.6"}}},
{jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}},
{cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.0"}}},
{esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.1"}}},
diff --git a/apps/emqx_dashboard/rebar.config b/apps/emqx_dashboard/rebar.config
index 8a44ace37..df2158467 100644
--- a/apps/emqx_dashboard/rebar.config
+++ b/apps/emqx_dashboard/rebar.config
@@ -1,9 +1,6 @@
%% -*- mode: erlang -*-
-{deps,
- [ {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.8.6"}}}
- , {emqx, {path, "../emqx"}}
- ]}.
+{deps, [{emqx, {path, "../emqx"}}]}.
{edoc_opts, [{preprocess, true}]}.
{erl_opts, [warn_unused_vars,
From 402d3d97aee6ce3a6419e091a5e0762c9e3cbf22 Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Fri, 15 Apr 2022 14:00:32 +0800
Subject: [PATCH 7/9] fix: dashboard swagger SUITE
---
apps/emqx_dashboard/test/emqx_swagger_parameter_SUITE.erl | 2 +-
apps/emqx_dashboard/test/emqx_swagger_response_SUITE.erl | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/apps/emqx_dashboard/test/emqx_swagger_parameter_SUITE.erl b/apps/emqx_dashboard/test/emqx_swagger_parameter_SUITE.erl
index 614b3064e..82723469d 100644
--- a/apps/emqx_dashboard/test/emqx_swagger_parameter_SUITE.erl
+++ b/apps/emqx_dashboard/test/emqx_swagger_parameter_SUITE.erl
@@ -101,7 +101,7 @@ t_public_ref(_Config) ->
minimum => 1,type => integer}}},
#{<<"public.page">> => #{description => <<"Page number of the results to fetch.">>,
example => 1,in => query,name => page,
- schema => #{default => 1,example => 100,type => integer}}}],
+ schema => #{default => 1,example => 100,minimum => 1,type => integer}}}],
?assertEqual(ExpectRefs, emqx_dashboard_swagger:components(Refs,#{})),
ok.
diff --git a/apps/emqx_dashboard/test/emqx_swagger_response_SUITE.erl b/apps/emqx_dashboard/test/emqx_swagger_response_SUITE.erl
index 1444370fb..8c748fae0 100644
--- a/apps/emqx_dashboard/test/emqx_swagger_response_SUITE.erl
+++ b/apps/emqx_dashboard/test/emqx_swagger_response_SUITE.erl
@@ -185,7 +185,7 @@ t_complicated_type(_Config) ->
Object = #{<<"content">> => #{<<"application/json">> =>
#{<<"schema">> => #{<<"properties">> =>
[
- {<<"no_neg_integer">>, #{example => 100, minimum => 1, type => integer}},
+ {<<"no_neg_integer">>, #{example => 100, minimum => 0, type => integer}},
{<<"url">>, #{example => <<"http://127.0.0.1">>, type => string}},
{<<"server">>, #{example => <<"127.0.0.1:80">>, type => string}},
{<<"connect_timeout">>, #{example => infinity, <<"oneOf">> => [
From c77775970744c82b9aca66cee86c96c5eea69aae Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Fri, 15 Apr 2022 14:32:51 +0800
Subject: [PATCH 8/9] chore: some code format
---
apps/emqx_authn/src/emqx_authn_api.erl | 12 ++--
apps/emqx_exhook/src/emqx_exhook_schema.erl | 79 +++++++++++++--------
2 files changed, 57 insertions(+), 34 deletions(-)
diff --git a/apps/emqx_authn/src/emqx_authn_api.erl b/apps/emqx_authn/src/emqx_authn_api.erl
index 19ec71ec3..5c2cc8a6a 100644
--- a/apps/emqx_authn/src/emqx_authn_api.erl
+++ b/apps/emqx_authn/src/emqx_authn_api.erl
@@ -431,8 +431,10 @@ schema("/authentication/:id/users") ->
description => <<"List users in authenticator in global authentication chain">>,
parameters => [
param_auth_id(),
- {page, mk(pos_integer(), #{in => query, desc => <<"Page Index">>, required => false})},
- {limit, mk(pos_integer(), #{in => query, desc => <<"Page Limit">>, required => false})},
+ {page,
+ mk(pos_integer(), #{in => query, desc => <<"Page Index">>, required => false})},
+ {limit,
+ mk(pos_integer(), #{in => query, desc => <<"Page Limit">>, required => false})},
{like_username,
mk(binary(), #{
in => query,
@@ -481,8 +483,10 @@ schema("/listeners/:listener_id/authentication/:id/users") ->
parameters => [
param_listener_id(),
param_auth_id(),
- {page, mk(pos_integer(), #{in => query, desc => <<"Page Index">>, required => false})},
- {limit, mk(pos_integer(), #{in => query, desc => <<"Page Limit">>, required => false})}
+ {page,
+ mk(pos_integer(), #{in => query, desc => <<"Page Index">>, required => false})},
+ {limit,
+ mk(pos_integer(), #{in => query, desc => <<"Page Limit">>, required => false})}
],
responses => #{
200 => emqx_dashboard_swagger:schema_with_example(
diff --git a/apps/emqx_exhook/src/emqx_exhook_schema.erl b/apps/emqx_exhook/src/emqx_exhook_schema.erl
index 81d6ef33b..101a08fa2 100644
--- a/apps/emqx_exhook/src/emqx_exhook_schema.erl
+++ b/apps/emqx_exhook/src/emqx_exhook_schema.erl
@@ -50,36 +50,55 @@ fields(exhook) ->
)}
];
fields(server) ->
- [ {name, sc(binary(),
- #{ desc => "Name of the exhook server."
- })}
- , {enable, sc(boolean(),
- #{ default => true
- , desc => "Enable the exhook server."
- })}
- , {url, sc(binary(),
- #{ desc => "URL of the gRPC server."
- })}
- , {request_timeout, sc(duration(),
- #{ default => "5s"
- , desc => "The timeout to request gRPC server."
- })}
- , {failed_action, failed_action()}
- , {ssl,
- sc(ref(ssl_conf), #{})}
- , {auto_reconnect,
- sc(hoconsc:union([false, duration()]),
- #{ default => "60s"
- , desc => "Whether to automatically reconnect (initialize) the gRPC server.
"
- "When gRPC is not available, exhook tries to request the gRPC service at "
- "that interval and reinitialize the list of mounted hooks."
- })}
- , {pool_size,
- sc(pos_integer(),
- #{ default => 8
- , example => 8
- , desc => "The process pool size for gRPC client."
- })}
+ [
+ {name,
+ sc(
+ binary(),
+ #{desc => "Name of the exhook server."}
+ )},
+ {enable,
+ sc(
+ boolean(),
+ #{
+ default => true,
+ desc => "Enable the exhook server."
+ }
+ )},
+ {url,
+ sc(
+ binary(),
+ #{desc => "URL of the gRPC server."}
+ )},
+ {request_timeout,
+ sc(
+ duration(),
+ #{
+ default => "5s",
+ desc => "The timeout to request gRPC server."
+ }
+ )},
+ {failed_action, failed_action()},
+ {ssl, sc(ref(ssl_conf), #{})},
+ {auto_reconnect,
+ sc(
+ hoconsc:union([false, duration()]),
+ #{
+ default => "60s",
+ desc =>
+ "Whether to automatically reconnect (initialize) the gRPC server.
"
+ "When gRPC is not available, exhook tries to request the gRPC service at "
+ "that interval and reinitialize the list of mounted hooks."
+ }
+ )},
+ {pool_size,
+ sc(
+ pos_integer(),
+ #{
+ default => 8,
+ example => 8,
+ desc => "The process pool size for gRPC client."
+ }
+ )}
];
fields(ssl_conf) ->
Schema = emqx_schema:client_ssl_opts_schema(#{}),
From ea6b3c7b51404cc8abf1ac56ceb345f3209e13f2 Mon Sep 17 00:00:00 2001
From: DDDHuang <44492639+DDDHuang@users.noreply.github.com>
Date: Sat, 16 Apr 2022 11:41:41 +0800
Subject: [PATCH 9/9] fix: format code
---
.../src/emqx_plugin_libs_metrics.erl | 10 ++++++----
.../src/emqx_rule_engine_api.erl | 16 ++++++++--------
apps/emqx_rule_engine/src/emqx_rule_runtime.erl | 14 +++++++-------
3 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs_metrics.erl b/apps/emqx_plugin_libs/src/emqx_plugin_libs_metrics.erl
index 98c4490ee..da0d0ab4f 100644
--- a/apps/emqx_plugin_libs/src/emqx_plugin_libs_metrics.erl
+++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs_metrics.erl
@@ -307,17 +307,19 @@ calculate_rate(CurrVal, #rate{max = MaxRate0, last_v = LastVal,
%% calculate the max rate since the emqx startup
MaxRate =
- if MaxRate0 >= CurrRate -> MaxRate0;
- true -> CurrRate
+ case MaxRate0 >= CurrRate of
+ true -> MaxRate0;
+ false -> CurrRate
end,
%% calculate the average rate in last 5 mins
{Last5MinSamples, Acc5Min, Last5Min} =
- if Tick =< ?SAMPCOUNT_5M ->
+ case Tick =< ?SAMPCOUNT_5M of
+ true ->
Acc = AccRate5Min0 + CurrRate,
{lists:reverse([CurrRate | lists:reverse(Last5MinSamples0)]),
Acc, Acc / Tick};
- true ->
+ false ->
[FirstRate | Rates] = Last5MinSamples0,
Acc = AccRate5Min0 + CurrRate - FirstRate,
{lists:reverse([CurrRate | lists:reverse(Rates)]),
diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl b/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl
index 0c83c8ccd..ff2415d5c 100644
--- a/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl
+++ b/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl
@@ -99,7 +99,7 @@ rule_info_schema() ->
schema("/rules") ->
#{
- operationId => '/rules',
+ 'operationId' => '/rules',
get => #{
tags => [<<"rules">>],
description => <<"List all rules">>,
@@ -111,7 +111,7 @@ schema("/rules") ->
tags => [<<"rules">>],
description => <<"Create a new rule using given Id">>,
summary => <<"Create a Rule">>,
- requestBody => rule_creation_schema(),
+ 'requestBody' => rule_creation_schema(),
responses => #{
400 => error_schema('BAD_REQUEST', "Invalid Parameters"),
201 => rule_info_schema()
@@ -120,7 +120,7 @@ schema("/rules") ->
schema("/rule_events") ->
#{
- operationId => '/rule_events',
+ 'operationId' => '/rule_events',
get => #{
tags => [<<"rules">>],
description => <<"List all events can be used in rules">>,
@@ -133,7 +133,7 @@ schema("/rule_events") ->
schema("/rules/:id") ->
#{
- operationId => '/rules/:id',
+ 'operationId' => '/rules/:id',
get => #{
tags => [<<"rules">>],
description => <<"Get a rule by given Id">>,
@@ -149,7 +149,7 @@ schema("/rules/:id") ->
description => <<"Update a rule by given Id to all nodes in the cluster">>,
summary => <<"Update a Rule">>,
parameters => param_path_id(),
- requestBody => rule_creation_schema(),
+ 'requestBody' => rule_creation_schema(),
responses => #{
400 => error_schema('BAD_REQUEST', "Invalid Parameters"),
200 => rule_info_schema()
@@ -168,7 +168,7 @@ schema("/rules/:id") ->
schema("/rules/:id/reset_metrics") ->
#{
- operationId => '/rules/:id/reset_metrics',
+ 'operationId' => '/rules/:id/reset_metrics',
put => #{
tags => [<<"rules">>],
description => <<"Reset a rule metrics">>,
@@ -183,12 +183,12 @@ schema("/rules/:id/reset_metrics") ->
schema("/rule_test") ->
#{
- operationId => '/rule_test',
+ 'operationId' => '/rule_test',
post => #{
tags => [<<"rules">>],
description => <<"Test a rule">>,
summary => <<"Test a Rule">>,
- requestBody => rule_test_schema(),
+ 'requestBody' => rule_test_schema(),
responses => #{
400 => error_schema('BAD_REQUEST', "Invalid Parameters"),
412 => error_schema('NOT_MATCH', "SQL Not Match"),
diff --git a/apps/emqx_rule_engine/src/emqx_rule_runtime.erl b/apps/emqx_rule_engine/src/emqx_rule_runtime.erl
index 906a219b2..8211426ab 100644
--- a/apps/emqx_rule_engine/src/emqx_rule_runtime.erl
+++ b/apps/emqx_rule_engine/src/emqx_rule_runtime.erl
@@ -48,9 +48,9 @@
-spec(apply_rules(list(rule()), input()) -> ok).
apply_rules([], _Input) ->
ok;
-apply_rules([#{enable := false}|More], Input) ->
+apply_rules([#{enable := false} | More], Input) ->
apply_rules(More, Input);
-apply_rules([Rule|More], Input) ->
+apply_rules([Rule | More], Input) ->
apply_rule_discard_result(Rule, Input),
apply_rules(More, Input).
@@ -150,14 +150,14 @@ select_and_transform(Fields, Input) ->
select_and_transform([], _Input, Output) ->
Output;
-select_and_transform(['*'|More], Input, Output) ->
+select_and_transform(['*' | More], Input, Output) ->
select_and_transform(More, Input, maps:merge(Output, Input));
-select_and_transform([{as, Field, Alias}|More], Input, Output) ->
+select_and_transform([{as, Field, Alias} | More], Input, Output) ->
Val = eval(Field, Input),
select_and_transform(More,
nested_put(Alias, Val, Input),
nested_put(Alias, Val, Output));
-select_and_transform([Field|More], Input, Output) ->
+select_and_transform([Field | More], Input, Output) ->
Val = eval(Field, Input),
Key = alias(Field),
select_and_transform(More,
@@ -172,7 +172,7 @@ select_and_collect(Fields, Input) ->
select_and_collect([{as, Field, {_, A} = Alias}], Input, {Output, _}) ->
Val = eval(Field, Input),
{nested_put(Alias, Val, Output), {A, ensure_list(Val)}};
-select_and_collect([{as, Field, Alias}|More], Input, {Output, LastKV}) ->
+select_and_collect([{as, Field, Alias} | More], Input, {Output, LastKV}) ->
Val = eval(Field, Input),
select_and_collect(More,
nested_put(Alias, Val, Input),
@@ -181,7 +181,7 @@ select_and_collect([Field], Input, {Output, _}) ->
Val = eval(Field, Input),
Key = alias(Field),
{nested_put(Key, Val, Output), {'item', ensure_list(Val)}};
-select_and_collect([Field|More], Input, {Output, LastKV}) ->
+select_and_collect([Field | More], Input, {Output, LastKV}) ->
Val = eval(Field, Input),
Key = alias(Field),
select_and_collect(More,