refactor(webhook): transport options refine

This commit is contained in:
Zaiming Shi 2021-03-01 12:40:59 +01:00 committed by Shawn
parent 801b3d6daf
commit 16c27663cd
1 changed files with 22 additions and 17 deletions

View File

@ -326,35 +326,40 @@ add_default_scheme(URL) ->
<<"http://", URL/binary>>. <<"http://", URL/binary>>.
pool_opts(Params = #{<<"url">> := URL}, ResId) -> pool_opts(Params = #{<<"url">> := URL}, ResId) ->
#{host := Host0, scheme := Scheme} = URIMap = uri_string:parse(binary_to_list(add_default_scheme(URL))), #{host := Host0, scheme := Scheme} = URIMap =
Port = maps:get(port, URIMap, case Scheme of uri_string:parse(binary_to_list(add_default_scheme(URL))),
"https" -> 443; DefaultPort = case is_https(Scheme) of
_ -> 80 true -> 443;
end), false -> 80
end,
Port = maps:get(port, URIMap, DefaultPort),
PoolSize = maps:get(<<"pool_size">>, Params, 32), PoolSize = maps:get(<<"pool_size">>, Params, 32),
ConnectTimeout = cuttlefish_duration:parse(str(maps:get(<<"connect_timeout">>, Params, <<"5s">>))), ConnectTimeout =
cuttlefish_duration:parse(str(maps:get(<<"connect_timeout">>, Params, <<"5s">>))),
{Inet, Host} = parse_host(Host0), {Inet, Host} = parse_host(Host0),
SslOpts0 = maybe_ssl(Params, ResId, add_default_scheme(URL)), TransportOpts =
{transport_opts, TranOpts} = lists:keyfind(transport_opts, 1, SslOpts0), case is_https(Scheme) of
SslOpts = lists:keyreplace(transport_opts, 1, true -> [Inet | get_ssl_opts(Params, ResId)];
{transport_opts, [Inet | TranOpts]}, SslOpts0), false -> [Inet]
end,
Opts = case is_https(Scheme) of
true -> [{transport_opts, TransportOpts}, {transport, ssl}];
false -> [{transport_opts, TransportOpts}]
end,
[{host, Host}, [{host, Host},
{port, Port}, {port, Port},
{pool_size, PoolSize}, {pool_size, PoolSize},
{pool_type, hash}, {pool_type, hash},
{connect_timeout, ConnectTimeout}, {connect_timeout, ConnectTimeout},
{retry, 5}, {retry, 5},
{retry_timeout, 1000} | SslOpts]. {retry_timeout, 1000} | Opts].
pool_name(ResId) -> pool_name(ResId) ->
list_to_atom("webhook:" ++ str(ResId)). list_to_atom("webhook:" ++ str(ResId)).
maybe_ssl(Config, ResId, <<"https://", _URL/binary>>) -> is_https(Scheme) when is_list(Scheme) -> is_https(list_to_binary(Scheme));
[{transport, ssl}, is_https(<<"https", _/binary>>) -> true;
{transport_opts, get_ssl_opts(Config, ResId)} is_https(_) -> false.
];
maybe_ssl(_Config, _ResId, _URL) ->
[{transport_opts, []}].
get_ssl_opts(Opts, ResId) -> get_ssl_opts(Opts, ResId) ->
Dir = filename:join([emqx:get_env(data_dir), "rule", ResId]), Dir = filename:join([emqx:get_env(data_dir), "rule", ResId]),