feat(mgmt): add http listener restart support (#4301)

This commit is contained in:
wwhai 2021-03-11 00:29:37 +08:00 committed by GitHub
parent b400571dbb
commit 1ddb300a56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 0 deletions

View File

@ -61,6 +61,8 @@ restart(#{node := Node, identifier := Identifier}, _Params) ->
end; end;
%% Restart listeners in the cluster. %% Restart listeners in the cluster.
restart(#{identifier := <<"http", _/binary>>}, _Params) ->
{403, <<"http_listener_restart_unsupported">>};
restart(#{identifier := Identifier}, _Params) -> restart(#{identifier := Identifier}, _Params) ->
Results = [{Node, emqx_mgmt:restart_listener(Node, Identifier)} || {Node, _Info} <- emqx_mgmt:list_nodes()], Results = [{Node, emqx_mgmt:restart_listener(Node, Identifier)} || {Node, _Info} <- emqx_mgmt:list_nodes()],
case lists:filter(fun({_, Result}) -> Result =/= ok end, Results) of case lists:filter(fun({_, Result}) -> Result =/= ok end, Results) of

View File

@ -509,6 +509,18 @@ listeners(["stop", _Proto, ListenOn]) ->
end, end,
stop_listener(emqx_listeners:find_by_listen_on(ListenOn1), ListenOn1); stop_listener(emqx_listeners:find_by_listen_on(ListenOn1), ListenOn1);
listeners(["restart", "http:management"]) ->
restart_http_listener(http, emqx_management);
listeners(["restart", "https:management"]) ->
restart_http_listener(https, emqx_management);
listeners(["restart", "http:dashboard"]) ->
restart_http_listener(http, emqx_dashboard);
listeners(["restart", "https:dashboard"]) ->
restart_http_listener(https, emqx_dashboard);
listeners(["restart", Identifier]) -> listeners(["restart", Identifier]) ->
case emqx_listeners:restart_listener(Identifier) of case emqx_listeners:restart_listener(Identifier) of
ok -> ok ->
@ -661,3 +673,17 @@ listener_identifier(Protocol, ListenOn) ->
ID -> ID ->
ID ID
end. end.
restart_http_listener(Scheme, AppName) ->
Listeners = application:get_env(AppName, listeners, []),
case lists:keyfind(Scheme, 1, Listeners) of
false ->
emqx_ctl:print("Listener ~s not exists!~n", [AppName]);
{Scheme, Port, Options} ->
ModName = http_mod_name(AppName),
ModName:stop_listener({Scheme, Port, Options}),
ModName:start_listener({Scheme, Port, Options})
end.
http_mod_name(emqx_management) -> emqx_mgmt_http;
http_mod_name(Name) -> Name.

View File

@ -21,6 +21,8 @@
-export([ start_listeners/0 -export([ start_listeners/0
, handle_request/2 , handle_request/2
, stop_listeners/0 , stop_listeners/0
, start_listener/1
, stop_listener/1
]). ]).
-export([init/2]). -export([init/2]).

View File

@ -23,6 +23,8 @@
-export([ start_listeners/0 -export([ start_listeners/0
, stop_listeners/0 , stop_listeners/0
, start_listener/1
, stop_listener/1
]). ]).
%% for minirest %% for minirest