diff --git a/apps/emqx_bridge/src/emqx_bridge.erl b/apps/emqx_bridge/src/emqx_bridge.erl
index a6f86cfd6..e56b694d5 100644
--- a/apps/emqx_bridge/src/emqx_bridge.erl
+++ b/apps/emqx_bridge/src/emqx_bridge.erl
@@ -224,7 +224,8 @@ create(BridgeId, Conf) ->
create(Type, Name, Conf) ->
?SLOG(info, #{msg => "create bridge", type => Type, name => Name,
config => Conf}),
- case emqx_resource:create_local(resource_id(Type, Name), <<"emqx_bridge">>, emqx_bridge:resource_type(Type),
+ case emqx_resource:create_local(resource_id(Type, Name), <<"emqx_bridge">>,
+ emqx_bridge:resource_type(Type),
parse_confs(Type, Name, Conf), #{async_create => true}) of
{ok, already_created} -> maybe_disable_bridge(Type, Name, Conf);
{ok, _} -> maybe_disable_bridge(Type, Name, Conf);
diff --git a/apps/emqx_bridge/src/emqx_bridge_api.erl b/apps/emqx_bridge/src/emqx_bridge_api.erl
index 01a583f4e..6a0b1a16a 100644
--- a/apps/emqx_bridge/src/emqx_bridge_api.erl
+++ b/apps/emqx_bridge/src/emqx_bridge_api.erl
@@ -134,35 +134,31 @@ info_example(Type, Direction, Method) ->
maps:merge(info_example_basic(Type, Direction),
method_example(Type, Direction, Method)).
-method_example(Type, Direction, get) ->
+method_example(Type, Direction, Method) when Method == get; Method == post ->
SType = atom_to_list(Type),
SDir = atom_to_list(Direction),
SName = case Type of
http -> "my_" ++ SType ++ "_bridge";
_ -> "my_" ++ SDir ++ "_" ++ SType ++ "_bridge"
end,
- #{
+ TypeNameExamp = #{
type => bin(SType),
- name => bin(SName),
+ name => bin(SName)
+ },
+ maybe_with_metrics_example(TypeNameExamp, Method);
+method_example(_Type, _Direction, put) ->
+ #{}.
+
+maybe_with_metrics_example(TypeNameExamp, get) ->
+ TypeNameExamp#{
metrics => ?METRICS(0, 0, 0, 0, 0, 0),
node_metrics => [
#{node => node(),
- metrics => ?METRICS(0, 0, 0, 0, 0, 0)}
+ metrics => ?METRICS(0, 0, 0, 0, 0, 0)}
]
};
-method_example(Type, Direction, post) ->
- SType = atom_to_list(Type),
- SDir = atom_to_list(Direction),
- SName = case Type of
- http -> "my_" ++ SType ++ "_bridge";
- _ -> "my_" ++ SDir ++ "_" ++ SType ++ "_bridge"
- end,
- #{
- type => bin(SType),
- name => bin(SName)
- };
-method_example(_Type, _Direction, put) ->
- #{}.
+maybe_with_metrics_example(TypeNameExamp, _) ->
+ TypeNameExamp.
info_example_basic(http, _) ->
#{
@@ -203,7 +199,7 @@ info_example_basic(mqtt, egress) ->
schema("/bridges") ->
#{
- operationId => '/bridges',
+ 'operationId' => '/bridges',
get => #{
tags => [<<"bridges">>],
summary => <<"List Bridges">>,
@@ -218,7 +214,7 @@ schema("/bridges") ->
tags => [<<"bridges">>],
summary => <<"Create Bridge">>,
description => <<"Create a new bridge by type and name">>,
- requestBody => emqx_dashboard_swagger:schema_with_examples(
+ 'requestBody' => emqx_dashboard_swagger:schema_with_examples(
emqx_bridge_schema:post_request(),
bridge_info_examples(post)),
responses => #{
@@ -230,7 +226,7 @@ schema("/bridges") ->
schema("/bridges/:id") ->
#{
- operationId => '/bridges/:id',
+ 'operationId' => '/bridges/:id',
get => #{
tags => [<<"bridges">>],
summary => <<"Get Bridge">>,
@@ -246,7 +242,7 @@ schema("/bridges/:id") ->
summary => <<"Update Bridge">>,
description => <<"Update a bridge by Id">>,
parameters => [param_path_id()],
- requestBody => emqx_dashboard_swagger:schema_with_examples(
+ 'requestBody' => emqx_dashboard_swagger:schema_with_examples(
emqx_bridge_schema:put_request(),
bridge_info_examples(put)),
responses => #{
@@ -268,7 +264,7 @@ schema("/bridges/:id") ->
schema("/bridges/:id/operation/:operation") ->
#{
- operationId => '/bridges/:id/operation/:operation',
+ 'operationId' => '/bridges/:id/operation/:operation',
post => #{
tags => [<<"bridges">>],
summary => <<"Start/Stop/Restart Bridge">>,
diff --git a/apps/emqx_bridge/src/emqx_bridge_http_schema.erl b/apps/emqx_bridge/src/emqx_bridge_http_schema.erl
index 76a30f871..2cd6b13e3 100644
--- a/apps/emqx_bridge/src/emqx_bridge_http_schema.erl
+++ b/apps/emqx_bridge/src/emqx_bridge_http_schema.erl
@@ -27,8 +27,9 @@ is not allowed.
#{ desc =>"""
The MQTT topic filter to be forwarded to the HTTP server. All MQTT 'PUBLISH' messages with the topic
matching the local_topic will be forwarded.
-NOTE: if this bridge is used as the output of a rule (EMQX rule engine), and also local_topic is configured, then both the data got from the rule and the MQTT messages that match
-local_topic will be forwarded.
+NOTE: if this bridge is used as the output of a rule (EMQX rule engine), and also local_topic is
+configured, then both the data got from the rule and the MQTT messages that match local_topic
+will be forwarded.
"""
})}
, {method, mk(method(),
diff --git a/apps/emqx_bridge/src/emqx_bridge_schema.erl b/apps/emqx_bridge/src/emqx_bridge_schema.erl
index 012cdca8a..1c9f848b9 100644
--- a/apps/emqx_bridge/src/emqx_bridge_schema.erl
+++ b/apps/emqx_bridge/src/emqx_bridge_schema.erl
@@ -53,7 +53,8 @@ common_bridge_fields() ->
, desc =>"""
The connector ID to be used for this bridge. Connector IDs must be of format:
{type}:{name}
.
-In config files, you can find the corresponding config entry for a connector by such path: 'connectors.{type}.{name}'.
+In config files, you can find the corresponding config entry for a connector by such path:
+'connectors.{type}.{name}'.
"""
})}
].
@@ -63,7 +64,7 @@ metrics_status_fields() ->
, {"node_metrics", mk(hoconsc:array(ref(?MODULE, "node_metrics")),
#{ desc => "The metrics of the bridge for each node"
})}
- , {"status", mk(ref(?MODULE, "status"), #{desc => "The status of the bridge"})}
+ , {"status", mk(status(), #{desc => "The status of the bridge"})}
, {"node_status", mk(hoconsc:array(ref(?MODULE, "node_status")),
#{ desc => "The status of the bridge for each node"
})}
@@ -103,21 +104,14 @@ fields("node_metrics") ->
, {"metrics", mk(ref(?MODULE, "metrics"), #{})}
];
-fields("status") ->
- [ {"matched", mk(integer(), #{desc => "Count of this bridge is queried"})}
- , {"success", mk(integer(), #{desc => "Count of query success"})}
- , {"failed", mk(integer(), #{desc => "Count of query failed"})}
- , {"rate", mk(float(), #{desc => "The rate of matched, times/second"})}
- , {"rate_max", mk(float(), #{desc => "The max rate of matched, times/second"})}
- , {"rate_last5m", mk(float(),
- #{desc => "The average rate of matched in the last 5 minutes, times/second"})}
- ];
-
fields("node_status") ->
[ node_name()
- , {"status", mk(ref(?MODULE, "status"), #{})}
+ , {"status", mk(status(), #{})}
].
+status() ->
+ hoconsc:enum([connected, disconnected, connecting]).
+
node_name() ->
{"node", mk(binary(), #{desc => "The node name", example => "emqx@127.0.0.1"})}.
diff --git a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl
index 117912275..65a369a3d 100644
--- a/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl
+++ b/apps/emqx_bridge/test/emqx_bridge_api_SUITE.erl
@@ -55,7 +55,8 @@ init_per_suite(Config) ->
%% some testcases (may from other app) already get emqx_connector started
_ = application:stop(emqx_resource),
_ = application:stop(emqx_connector),
- ok = emqx_common_test_helpers:start_apps([emqx_bridge, emqx_dashboard], fun set_special_configs/1),
+ ok = emqx_common_test_helpers:start_apps([emqx_bridge, emqx_dashboard],
+ fun set_special_configs/1),
ok = emqx_common_test_helpers:load_config(emqx_bridge_schema, ?CONF_DEFAULT),
Config.
diff --git a/apps/emqx_connector/src/emqx_connector_api.erl b/apps/emqx_connector/src/emqx_connector_api.erl
index c9f9509c9..5262aded3 100644
--- a/apps/emqx_connector/src/emqx_connector_api.erl
+++ b/apps/emqx_connector/src/emqx_connector_api.erl
@@ -122,13 +122,13 @@ param_path_id() ->
schema("/connectors_test") ->
#{
- operationId => '/connectors_test',
+ 'operationId' => '/connectors_test',
post => #{
tags => [<<"connectors">>],
description => <<"Test creating a new connector by given Id
"
"The ID must be of format '{type}:{name}'">>,
summary => <<"Test creating connector">>,
- requestBody => post_request_body_schema(),
+ 'requestBody' => post_request_body_schema(),
responses => #{
204 => <<"Test connector OK">>,
400 => error_schema(['TEST_FAILED'], "connector test failed")
@@ -138,7 +138,7 @@ schema("/connectors_test") ->
schema("/connectors") ->
#{
- operationId => '/connectors',
+ 'operationId' => '/connectors',
get => #{
tags => [<<"connectors">>],
description => <<"List all connectors">>,
@@ -153,7 +153,7 @@ schema("/connectors") ->
tags => [<<"connectors">>],
description => <<"Create a new connector">>,
summary => <<"Create connector">>,
- requestBody => post_request_body_schema(),
+ 'requestBody' => post_request_body_schema(),
responses => #{
201 => get_response_body_schema(),
400 => error_schema(['ALREADY_EXISTS'], "connector already exists")
@@ -163,7 +163,7 @@ schema("/connectors") ->
schema("/connectors/:id") ->
#{
- operationId => '/connectors/:id',
+ 'operationId' => '/connectors/:id',
get => #{
tags => [<<"connectors">>],
description => <<"Get the connector by Id">>,
@@ -179,7 +179,7 @@ schema("/connectors/:id") ->
description => <<"Update an existing connector by Id">>,
summary => <<"Update connector">>,
parameters => param_path_id(),
- requestBody => put_request_body_schema(),
+ 'requestBody' => put_request_body_schema(),
responses => #{
200 => get_response_body_schema(),
404 => error_schema(['NOT_FOUND'], "Connector not found")
diff --git a/apps/emqx_connector/test/emqx_connector_api_SUITE.erl b/apps/emqx_connector/test/emqx_connector_api_SUITE.erl
index 438341978..e119189b8 100644
--- a/apps/emqx_connector/test/emqx_connector_api_SUITE.erl
+++ b/apps/emqx_connector/test/emqx_connector_api_SUITE.erl
@@ -91,12 +91,14 @@ init_per_suite(Config) ->
ok = emqx_common_test_helpers:start_apps([emqx_rule_engine, emqx_connector,
emqx_bridge, emqx_dashboard], fun set_special_configs/1),
ok = emqx_common_test_helpers:load_config(emqx_connector_schema, <<"connectors: {}">>),
- ok = emqx_common_test_helpers:load_config(emqx_rule_engine_schema, <<"rule_engine {rules {}}">>),
+ ok = emqx_common_test_helpers:load_config(emqx_rule_engine_schema,
+ <<"rule_engine {rules {}}">>),
ok = emqx_common_test_helpers:load_config(emqx_bridge_schema, ?BRIDGE_CONF_DEFAULT),
Config.
end_per_suite(_Config) ->
- emqx_common_test_helpers:stop_apps([emqx_rule_engine, emqx_connector, emqx_bridge, emqx_dashboard]),
+ emqx_common_test_helpers:stop_apps([emqx_rule_engine, emqx_connector, emqx_bridge,
+ emqx_dashboard]),
ok.
set_special_configs(emqx_dashboard) ->
diff --git a/apps/emqx_management/src/emqx_mgmt_api_trace.erl b/apps/emqx_management/src/emqx_mgmt_api_trace.erl
index 2890262de..a6e392a0f 100644
--- a/apps/emqx_management/src/emqx_mgmt_api_trace.erl
+++ b/apps/emqx_management/src/emqx_mgmt_api_trace.erl
@@ -343,7 +343,8 @@ group_trace_file(ZipDir, TraceLog, TraceFiles) ->
_ -> Acc
end;
{error, Node, Reason} ->
- ?SLOG(error, #{msg => "download_trace_log_error", node => Node, log => TraceLog, reason => Reason}),
+ ?SLOG(error, #{msg => "download_trace_log_error", node => Node,
+ log => TraceLog, reason => Reason}),
Acc
end
end, [], TraceFiles).
@@ -375,7 +376,8 @@ stream_log_file(get, #{bindings := #{name := Name}, query_string := Query}) ->
{200, #{meta => Meta, items => <<"">>}};
{error, Reason} ->
?SLOG(error, #{msg => "read_file_failed",
- node => Node, name => Name, reason => Reason, position => Position, bytes => Bytes}),
+ node => Node, name => Name, reason => Reason,
+ position => Position, bytes => Bytes}),
{400, #{code => 'READ_FILE_ERROR', message => Reason}};
{badrpc, nodedown} ->
{400, #{code => 'RPC_ERROR', message => "BadRpc node down"}}
diff --git a/elvis.config b/elvis.config
index 9387b8fc2..dff44c31d 100644
--- a/elvis.config
+++ b/elvis.config
@@ -9,6 +9,8 @@
filter => "*.erl",
ruleset => erl_files,
rules => [
+ {elvis_style, macro_names, disable},
+ {elvis_style, function_naming_convention, disable},
{elvis_style, state_record_and_type, disable},
{elvis_style, no_common_caveats_call, #{}},
{elvis_style, no_debug_call, #{ debug_functions => [ {ct, pal}
@@ -19,15 +21,15 @@
{right, "||"},
{left, "||"}]}},
{elvis_style, dont_repeat_yourself, #{ min_complexity => 20 }},
- {elvis_style, god_modules, #{ignore => [emqx_authentication,
- emqx_resource]}}
+ {elvis_style, god_modules, #{limit => 100}}
]
},
#{dirs => ["test", "apps/**/test"],
filter => "*.erl",
rules => [
{elvis_text_style, line_length, #{ limit => 100
- , skip_comments => false }},
+ , skip_comments => false
+ }},
{elvis_style, dont_repeat_yourself, #{ min_complexity => 100 }}
]
},