refactor(pluglib): move connectivity checks to `emqx_connector_lib`
This commit is contained in:
parent
8919a6ef93
commit
e6fb0203b4
|
@ -47,6 +47,8 @@ fields(config) ->
|
||||||
%% `emqx_resource' API
|
%% `emqx_resource' API
|
||||||
%%========================================================================================
|
%%========================================================================================
|
||||||
|
|
||||||
|
-define(HTTP_CONNECT_TIMEOUT, 1000).
|
||||||
|
|
||||||
callback_mode() -> always_sync.
|
callback_mode() -> always_sync.
|
||||||
|
|
||||||
is_buffer_supported() -> false.
|
is_buffer_supported() -> false.
|
||||||
|
@ -171,7 +173,7 @@ opentsdb_connectivity(Server) ->
|
||||||
<<"https://", _/binary>> -> Server;
|
<<"https://", _/binary>> -> Server;
|
||||||
_ -> "http://" ++ Server
|
_ -> "http://" ++ Server
|
||||||
end,
|
end,
|
||||||
emqx_plugin_libs_rule:http_connectivity(SvrUrl).
|
emqx_connector_lib:http_connectivity(SvrUrl, ?HTTP_CONNECT_TIMEOUT).
|
||||||
|
|
||||||
format_opentsdb_msg(Msg) ->
|
format_opentsdb_msg(Msg) ->
|
||||||
maps:with(
|
maps:with(
|
||||||
|
|
|
@ -15,8 +15,39 @@
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
-module(emqx_connector_lib).
|
-module(emqx_connector_lib).
|
||||||
|
|
||||||
|
%% connectivity check
|
||||||
|
-export([
|
||||||
|
http_connectivity/2,
|
||||||
|
tcp_connectivity/3
|
||||||
|
]).
|
||||||
|
|
||||||
-export([resolve_dns/2]).
|
-export([resolve_dns/2]).
|
||||||
|
|
||||||
|
-spec http_connectivity(uri_string:uri_string(), timeout()) ->
|
||||||
|
ok | {error, Reason :: term()}.
|
||||||
|
http_connectivity(Url, Timeout) ->
|
||||||
|
case emqx_http_lib:uri_parse(Url) of
|
||||||
|
{ok, #{host := Host, port := Port}} ->
|
||||||
|
tcp_connectivity(Host, Port, Timeout);
|
||||||
|
{error, Reason} ->
|
||||||
|
{error, Reason}
|
||||||
|
end.
|
||||||
|
|
||||||
|
-spec tcp_connectivity(
|
||||||
|
Host :: inet:socket_address() | inet:hostname(),
|
||||||
|
Port :: inet:port_number(),
|
||||||
|
timeout()
|
||||||
|
) ->
|
||||||
|
ok | {error, Reason :: term()}.
|
||||||
|
tcp_connectivity(Host, Port, Timeout) ->
|
||||||
|
case gen_tcp:connect(Host, Port, emqx_utils:ipv6_probe([]), Timeout) of
|
||||||
|
{ok, Sock} ->
|
||||||
|
gen_tcp:close(Sock),
|
||||||
|
ok;
|
||||||
|
{error, Reason} ->
|
||||||
|
{error, Reason}
|
||||||
|
end.
|
||||||
|
|
||||||
%% @doc Mostly for meck.
|
%% @doc Mostly for meck.
|
||||||
resolve_dns(DNS, Type) ->
|
resolve_dns(DNS, Type) ->
|
||||||
inet_res:lookup(DNS, in, Type).
|
inet_res:lookup(DNS, in, Type).
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Copyright (c) 2023 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_connector_lib_tests).
|
||||||
|
|
||||||
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
|
||||||
|
http_connectivity_ok_test() ->
|
||||||
|
{ok, Socket} = gen_tcp:listen(0, []),
|
||||||
|
{ok, Port} = inet:port(Socket),
|
||||||
|
?assertEqual(
|
||||||
|
ok,
|
||||||
|
emqx_connector_lib:http_connectivity("http://127.0.0.1:" ++ integer_to_list(Port), 1000)
|
||||||
|
),
|
||||||
|
gen_tcp:close(Socket).
|
||||||
|
|
||||||
|
http_connectivity_error_test() ->
|
||||||
|
{ok, Socket} = gen_tcp:listen(0, []),
|
||||||
|
{ok, Port} = inet:port(Socket),
|
||||||
|
ok = gen_tcp:close(Socket),
|
||||||
|
?assertEqual(
|
||||||
|
{error, econnrefused},
|
||||||
|
emqx_connector_lib:http_connectivity("http://127.0.0.1:" ++ integer_to_list(Port), 1000)
|
||||||
|
).
|
||||||
|
|
||||||
|
tcp_connectivity_ok_test() ->
|
||||||
|
{ok, Socket} = gen_tcp:listen(0, []),
|
||||||
|
{ok, Port} = inet:port(Socket),
|
||||||
|
?assertEqual(
|
||||||
|
ok,
|
||||||
|
emqx_connector_lib:tcp_connectivity("127.0.0.1", Port, 1000)
|
||||||
|
),
|
||||||
|
ok = gen_tcp:close(Socket).
|
||||||
|
|
||||||
|
tcp_connectivity_error_test() ->
|
||||||
|
{ok, Socket} = gen_tcp:listen(0, []),
|
||||||
|
{ok, Port} = inet:port(Socket),
|
||||||
|
ok = gen_tcp:close(Socket),
|
||||||
|
?assertEqual(
|
||||||
|
{error, econnrefused},
|
||||||
|
emqx_connector_lib:tcp_connectivity("127.0.0.1", Port, 1000)
|
||||||
|
).
|
|
@ -21,26 +21,8 @@
|
||||||
|
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
|
||||||
-define(PORT, 9876).
|
|
||||||
|
|
||||||
all() -> emqx_common_test_helpers:all(?MODULE).
|
all() -> emqx_common_test_helpers:all(?MODULE).
|
||||||
|
|
||||||
t_http_connectivity(_) ->
|
|
||||||
{ok, Socket} = gen_tcp:listen(?PORT, []),
|
|
||||||
ok = emqx_plugin_libs_rule:http_connectivity(
|
|
||||||
"http://127.0.0.1:" ++ integer_to_list(?PORT), 1000
|
|
||||||
),
|
|
||||||
gen_tcp:close(Socket),
|
|
||||||
{error, _} = emqx_plugin_libs_rule:http_connectivity(
|
|
||||||
"http://127.0.0.1:" ++ integer_to_list(?PORT), 1000
|
|
||||||
).
|
|
||||||
|
|
||||||
t_tcp_connectivity(_) ->
|
|
||||||
{ok, Socket} = gen_tcp:listen(?PORT, []),
|
|
||||||
ok = emqx_plugin_libs_rule:tcp_connectivity("127.0.0.1", ?PORT, 1000),
|
|
||||||
gen_tcp:close(Socket),
|
|
||||||
{error, _} = emqx_plugin_libs_rule:tcp_connectivity("127.0.0.1", ?PORT, 1000).
|
|
||||||
|
|
||||||
t_atom_key(_) ->
|
t_atom_key(_) ->
|
||||||
_ = erlang,
|
_ = erlang,
|
||||||
_ = port,
|
_ = port,
|
||||||
|
|
Loading…
Reference in New Issue