From 934287b926a35f9d37c0525d3cc11912d2772c40 Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 6 Jul 2017 10:52:27 +0800 Subject: [PATCH 1/3] Fix error exit code from emqttd_ctl --- src/emqttd_ctl.erl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/emqttd_ctl.erl b/src/emqttd_ctl.erl index 0aa8ce353..aefad69e5 100644 --- a/src/emqttd_ctl.erl +++ b/src/emqttd_ctl.erl @@ -70,7 +70,7 @@ run(["help"]) -> usage(); run([CmdS|Args]) -> case lookup(list_to_atom(CmdS)) of - [{Mod, Fun}] -> Mod:Fun(Args); + [{Mod, Fun}] -> Mod:Fun(Args), ok; [] -> usage() end. @@ -86,7 +86,8 @@ lookup(Cmd) -> usage() -> ?PRINT("Usage: ~s~n", [?MODULE]), [begin ?PRINT("~80..-s~n", [""]), Mod:Cmd(usage) end - || {_, {Mod, Cmd}, _} <- ets:tab2list(?CMD_TAB)]. + || {_, {Mod, Cmd}, _} <- ets:tab2list(?CMD_TAB)], + ok. %%-------------------------------------------------------------------- %% gen_server callbacks From a427a53a30d6876ac2c5cac55e60142cc3ba1eda Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 6 Jul 2017 11:25:05 +0800 Subject: [PATCH 2/3] Fix error exit code from emqttd_ctl --- src/emqttd_ctl.erl | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/emqttd_ctl.erl b/src/emqttd_ctl.erl index aefad69e5..b309c5c6a 100644 --- a/src/emqttd_ctl.erl +++ b/src/emqttd_ctl.erl @@ -64,14 +64,22 @@ cast(Msg) -> gen_server:cast(?SERVER, Msg). %% @doc Run a command -spec(run([string()]) -> any()). -run([]) -> usage(); +run([]) -> usage(), ok; -run(["help"]) -> usage(); +run(["help"]) -> usage(), ok; run([CmdS|Args]) -> case lookup(list_to_atom(CmdS)) of - [{Mod, Fun}] -> Mod:Fun(Args), ok; - [] -> usage() + [{Mod, Fun}] -> + try Mod:Fun(Args) of + _ -> ok + catch + _:Reason -> + {error, Reason} + end; + [] -> + usage(), + {error, cmd_not_found} end. %% @doc Lookup a command @@ -86,8 +94,7 @@ lookup(Cmd) -> usage() -> ?PRINT("Usage: ~s~n", [?MODULE]), [begin ?PRINT("~80..-s~n", [""]), Mod:Cmd(usage) end - || {_, {Mod, Cmd}, _} <- ets:tab2list(?CMD_TAB)], - ok. + || {_, {Mod, Cmd}, _} <- ets:tab2list(?CMD_TAB)]. %%-------------------------------------------------------------------- %% gen_server callbacks From 5433af4c92da84f22a905c2cc32a1200a773153e Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 6 Jul 2017 14:49:17 +0800 Subject: [PATCH 3/3] Add reopen/close ctl command --- src/emqttd_cli.erl | 32 +++++++++++++++++++++++++++++++- src/emqttd_ctl.erl | 2 ++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index 6ff94893c..2ebe43f13 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -477,8 +477,38 @@ listeners([]) -> end, Info) end, esockd:listeners()); +listeners(["reopen", Proto, ListenOn1]) -> + ListenOn = case string:tokens(ListenOn1, ":") of + [Port] -> list_to_integer(Port); + [IP, Port] -> {IP, list_to_integer(Port)} + end, + case emqttd_app:restart_listener({list_to_atom(Proto), ListenOn, []}) of + {ok, _Pid} -> + io:format("Reopen ~p listen on ~p successfully.~n", + [list_to_atom(Proto), list_to_atom(ListenOn1)]); + {error, Error} -> + io:format("Failed to reopen ~p listen on ~p, error:~p~n", + [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error]) + end; + +listeners(["close", Proto, ListenOn1]) -> + ListenOn = case string:tokens(ListenOn1, ":") of + [Port] -> list_to_integer(Port); + [IP, Port] -> {IP, list_to_integer(Port)} + end, + case emqttd_app:stop_listener({list_to_atom(Proto), ListenOn, []}) of + ok -> + io:format("Close ~p on ~p successfully.~n", + [list_to_atom(Proto), list_to_atom(ListenOn1)]); + {error, Error} -> + io:format("Failed to close ~p on ~p, error:~p~n", + [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error]) + end; + listeners(_) -> - ?PRINT_CMD("listeners", "List listeners"). + ?USAGE([{"listeners", "List listeners"}, + {"listeners reopen ", "Reopen a listener port"}, + {"listeners close ", "Close a listener port"}]). %%-------------------------------------------------------------------- %% Dump ETS diff --git a/src/emqttd_ctl.erl b/src/emqttd_ctl.erl index b309c5c6a..195d3dea0 100644 --- a/src/emqttd_ctl.erl +++ b/src/emqttd_ctl.erl @@ -75,6 +75,8 @@ run([CmdS|Args]) -> _ -> ok catch _:Reason -> + io:format("Reason:~p, get_stacktrace:~p~n", + [Reason, erlang:get_stacktrace()]), {error, Reason} end; [] ->