From 88797062a459a08bd1bc12989f87be7e198c8d72 Mon Sep 17 00:00:00 2001 From: turtled Date: Sat, 1 Jul 2017 17:51:55 +0800 Subject: [PATCH 01/14] Add function restart_listener --- src/emqttd_app.erl | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/emqttd_app.erl b/src/emqttd_app.erl index 7709d134f..ad52416df 100644 --- a/src/emqttd_app.erl +++ b/src/emqttd_app.erl @@ -27,7 +27,7 @@ %% Application callbacks -export([start/2, stop/1]). --export([start_listener/1, stop_listener/1]). +-export([start_listener/1, stop_listener/1, restart_listener/1]). -type(listener() :: {atom(), esockd:listen_on(), [esockd:option()]}). @@ -205,6 +205,21 @@ stop_listener({Proto, ListenOn, _Opts}) when Proto == api -> stop_listener({Proto, ListenOn, _Opts}) -> esockd:close(Proto, ListenOn). +%% @doc Restart Listeners +restart_listener({tcp, ListenOn, _Opts}) -> + esockd:reopen('mqtt:tcp', ListenOn); +restart_listener({ssl, ListenOn, _Opts}) -> + esockd:reopen('mqtt:ssl', ListenOn); +restart_listener({Proto, ListenOn, _Opts}) when Proto == http; Proto == ws -> + mochiweb:restart_http('mqtt:ws', ListenOn); +restart_listener({Proto, ListenOn, _Opts}) when Proto == https; Proto == wss -> + mochiweb:restart_http('mqtt:wss', ListenOn); +restart_listener({Proto, ListenOn, _Opts}) when Proto == api -> + mochiweb:restart_http('mqtt:api', ListenOn); +restart_listener({Proto, ListenOn, _Opts}) -> + esockd:reopen(Proto, ListenOn). + + -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). merge_sockopts_test_() -> From 934287b926a35f9d37c0525d3cc11912d2772c40 Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 6 Jul 2017 10:52:27 +0800 Subject: [PATCH 02/14] 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 03/14] 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 04/14] 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; [] -> From f9cf00804f973cd7124811b50695d153c061bec0 Mon Sep 17 00:00:00 2001 From: HuangDan Date: Thu, 6 Jul 2017 15:54:03 +0800 Subject: [PATCH 05/14] Add dialyze dependencies --- Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Makefile b/Makefile index 5841ef611..20420cf73 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,11 @@ CT_OPTS = -cover test/ct.cover.spec -erl_args -name emqttd_ct@127.0.0.1 COVER = true +PLT_APPS = sasl asn1 ssl syntax_tools runtime_tools crypto xmerl os_mon inets public_key ssl lager compiler mnesia +DIALYZER_DIRS := ebin/ +DIALYZER_OPTS := --verbose --statistics -Werror_handling \ + -Wrace_conditions #-Wunmatched_returns + include erlang.mk app:: rebar.config From 7054d2c57590e610910d7bb1d3e093343149ffc6 Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 6 Jul 2017 16:05:02 +0800 Subject: [PATCH 06/14] Rename reopen -> restart --- src/emqttd_cli.erl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index 2ebe43f13..e812875da 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -477,38 +477,38 @@ listeners([]) -> end, Info) end, esockd:listeners()); -listeners(["reopen", Proto, ListenOn1]) -> +listeners(["restart", 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", + io:format("Restart ~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", + io:format("Failed to restart ~p listen on ~p, error:~p~n", [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error]) end; -listeners(["close", Proto, ListenOn1]) -> +listeners(["stop", 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", + io:format("Stop ~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", + io:format("Failed to stop ~p on ~p, error:~p~n", [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error]) end; listeners(_) -> - ?USAGE([{"listeners", "List listeners"}, - {"listeners reopen ", "Reopen a listener port"}, - {"listeners close ", "Close a listener port"}]). + ?USAGE([{"listeners", "List listeners"}, + {"listeners restart ", "Restart a listener port"}, + {"listeners stop ", "Stop a listener port"}]). %%-------------------------------------------------------------------- %% Dump ETS From 87d2a7ca85f8c3749693ac5b13019e222d156464 Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 6 Jul 2017 16:17:36 +0800 Subject: [PATCH 07/14] Review code --- src/emqttd_cli.erl | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index e812875da..fe62b66d7 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -477,32 +477,32 @@ listeners([]) -> end, Info) end, esockd:listeners()); -listeners(["restart", Proto, ListenOn1]) -> - ListenOn = case string:tokens(ListenOn1, ":") of +listeners(["restart", Proto, ListenOn]) -> + ListenOn1 = case string:tokens(ListenOn, ":") 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 + case emqttd_app:restart_listener({list_to_atom(Proto), ListenOn1, []}) of {ok, _Pid} -> - io:format("Restart ~p listen on ~p successfully.~n", - [list_to_atom(Proto), list_to_atom(ListenOn1)]); + io:format("Restart ~s listen on ~s successfully.~n", + [list_to_atom(Proto), list_to_atom(ListenOn)]); {error, Error} -> - io:format("Failed to restart ~p listen on ~p, error:~p~n", - [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error]) + io:format("Failed to restart ~s listen on ~s, error:~p~n", + [list_to_atom(Proto), list_to_atom(ListenOn) ,Error]) end; -listeners(["stop", Proto, ListenOn1]) -> - ListenOn = case string:tokens(ListenOn1, ":") of +listeners(["stop", Proto, ListenOn]) -> + ListenOn1 = case string:tokens(ListenOn, ":") 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 + case emqttd_app:stop_listener({list_to_atom(Proto), ListenOn1, []}) of ok -> - io:format("Stop ~p on ~p successfully.~n", - [list_to_atom(Proto), list_to_atom(ListenOn1)]); + io:format("Stop ~s on ~s successfully.~n", + [list_to_atom(Proto), list_to_atom(ListenOn)]); {error, Error} -> - io:format("Failed to stop ~p on ~p, error:~p~n", - [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error]) + io:format("Failed to stop ~s on ~s, error:~p~n", + [list_to_atom(Proto), list_to_atom(ListenOn) ,Error]) end; listeners(_) -> From 53145bbbbabb7edb6c6e97c6937337f413402470 Mon Sep 17 00:00:00 2001 From: HuangDan Date: Thu, 6 Jul 2017 17:01:27 +0800 Subject: [PATCH 08/14] Update subscriptions/1 function spec --- src/emqttd.erl | 2 +- src/emqttd_server.erl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/emqttd.erl b/src/emqttd.erl index 037c0de1a..c60f8d590 100644 --- a/src/emqttd.erl +++ b/src/emqttd.erl @@ -122,7 +122,7 @@ topics() -> emqttd_router:topics(). subscribers(Topic) -> emqttd_server:subscribers(iolist_to_binary(Topic)). --spec(subscriptions(subscriber()) -> [{binary(), suboption()}]). +-spec(subscriptions(subscriber()) -> [{binary(), binary(), list(suboption())}]). subscriptions(Subscriber) -> emqttd_server:subscriptions(Subscriber). diff --git a/src/emqttd_server.erl b/src/emqttd_server.erl index ec57f2802..ee79ac4fb 100644 --- a/src/emqttd_server.erl +++ b/src/emqttd_server.erl @@ -130,7 +130,7 @@ async_unsubscribe(Topic, Subscriber) when is_binary(Topic) -> setqos(Topic, Subscriber, Qos) when is_binary(Topic) -> call(pick(Subscriber), {setqos, Topic, Subscriber, Qos}). --spec(subscriptions(emqttd:subscriber()) -> [{binary(), list(emqttd:suboption())}]). +-spec(subscriptions(emqttd:subscriber()) -> [{binary(), binary(), list(emqttd:suboption())}]). subscriptions(Subscriber) -> lists:map(fun({_, {_Share, Topic}}) -> subscription(Topic, Subscriber); From e675959d571e2bfdd2a25caa907b160ac4ffc58c Mon Sep 17 00:00:00 2001 From: HuangDan Date: Thu, 6 Jul 2017 17:28:49 +0800 Subject: [PATCH 09/14] Fix received/1 and sent/1 function spec --- src/emqttd_cli.erl | 2 -- src/emqttd_metrics.erl | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index 2ebe43f13..d14e30aa3 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -249,8 +249,6 @@ subscriptions(["add", ClientId, Topic, QoS]) -> case emqttd:subscribe(bin(Topic), bin(ClientId), [{qos, IntQos}]) of ok -> ?PRINT_MSG("ok~n"); - {error, already_existed} -> - ?PRINT_MSG("Error: already existed~n"); {error, Reason} -> ?PRINT("Error: ~p~n", [Reason]) end diff --git a/src/emqttd_metrics.erl b/src/emqttd_metrics.erl index 2c0e42ea0..c21d274a0 100644 --- a/src/emqttd_metrics.erl +++ b/src/emqttd_metrics.erl @@ -102,7 +102,7 @@ start_link() -> gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). %% @doc Count packets received. --spec(received(mqtt_packet()) -> ok). +-spec(received(mqtt_packet()) -> ignore | non_neg_integer()). received(Packet) -> inc('packets/received'), received1(Packet). @@ -140,7 +140,7 @@ qos_received(?QOS_2) -> inc('messages/qos2/received'). %% @doc Count packets received. Will not count $SYS PUBLISH. --spec(sent(mqtt_packet()) -> ok). +-spec(sent(mqtt_packet()) -> ignore | non_neg_integer()). sent(?PUBLISH_PACKET(_Qos, <<"$SYS/", _/binary>>, _, _)) -> ignore; sent(Packet) -> @@ -169,7 +169,7 @@ sent2(?UNSUBACK) -> sent2(?PINGRESP) -> inc('packets/pingresp'); sent2(_Type) -> - ingore. + ignore. qos_sent(?QOS_0) -> inc('messages/qos0/sent'); qos_sent(?QOS_1) -> From 3488d14776a9c6161595d33960b98ce5a9be8b9f Mon Sep 17 00:00:00 2001 From: HuangDan Date: Thu, 6 Jul 2017 18:59:54 +0800 Subject: [PATCH 10/14] Add 'undefined' from a record field's type --- src/emqttd_session.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/emqttd_session.erl b/src/emqttd_session.erl index 02d23567f..864905b05 100644 --- a/src/emqttd_session.erl +++ b/src/emqttd_session.erl @@ -120,7 +120,7 @@ retry_interval = 20000 :: timeout(), %% Retry Timer - retry_timer :: reference(), + retry_timer :: reference() | undefined, %% All QoS1, QoS2 messages published to when client is disconnected. %% QoS 1 and QoS 2 messages pending transmission to the Client. @@ -138,13 +138,13 @@ await_rel_timeout = 20000 :: timeout(), %% Awaiting PUBREL timer - await_rel_timer :: reference(), + await_rel_timer :: reference() | undefined, %% Session Expiry Interval expiry_interval = 7200000 :: timeout(), %% Expired Timer - expiry_timer :: reference(), + expiry_timer :: reference() | undefined, %% Enable Stats enable_stats :: boolean(), From 4b63b2c098b8e07e36ae99ba05a59d4f7f9aa90a Mon Sep 17 00:00:00 2001 From: HuangDan Date: Thu, 6 Jul 2017 22:15:34 +0800 Subject: [PATCH 11/14] Format code --- src/emqttd_cli.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index bc25f780d..4132569e0 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -486,7 +486,7 @@ listeners(["restart", Proto, ListenOn]) -> [list_to_atom(Proto), list_to_atom(ListenOn)]); {error, Error} -> io:format("Failed to restart ~s listen on ~s, error:~p~n", - [list_to_atom(Proto), list_to_atom(ListenOn) ,Error]) + [list_to_atom(Proto), list_to_atom(ListenOn), Error]) end; listeners(["stop", Proto, ListenOn]) -> @@ -500,13 +500,13 @@ listeners(["stop", Proto, ListenOn]) -> [list_to_atom(Proto), list_to_atom(ListenOn)]); {error, Error} -> io:format("Failed to stop ~s on ~s, error:~p~n", - [list_to_atom(Proto), list_to_atom(ListenOn) ,Error]) + [list_to_atom(Proto), list_to_atom(ListenOn), Error]) end; listeners(_) -> ?USAGE([{"listeners", "List listeners"}, {"listeners restart ", "Restart a listener port"}, - {"listeners stop ", "Stop a listener port"}]). + {"listeners stop ", "Stop a listener port"}]). %%-------------------------------------------------------------------- %% Dump ETS From e42e71dcf733d1d1efe7c33000b56f57ea3cf864 Mon Sep 17 00:00:00 2001 From: turtled Date: Fri, 7 Jul 2017 08:56:07 +0800 Subject: [PATCH 12/14] Format code --- src/emqttd_cli.erl | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index 4132569e0..c73624493 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -482,11 +482,9 @@ listeners(["restart", Proto, ListenOn]) -> end, case emqttd_app:restart_listener({list_to_atom(Proto), ListenOn1, []}) of {ok, _Pid} -> - io:format("Restart ~s listen on ~s successfully.~n", - [list_to_atom(Proto), list_to_atom(ListenOn)]); + io:format("Restart ~s listen on ~s successfully.~n", [Proto, ListenOn]); {error, Error} -> - io:format("Failed to restart ~s listen on ~s, error:~p~n", - [list_to_atom(Proto), list_to_atom(ListenOn), Error]) + io:format("Failed to restart ~s listen on ~s, error:~p~n", [Proto, ListenOn, Error]) end; listeners(["stop", Proto, ListenOn]) -> @@ -496,11 +494,9 @@ listeners(["stop", Proto, ListenOn]) -> end, case emqttd_app:stop_listener({list_to_atom(Proto), ListenOn1, []}) of ok -> - io:format("Stop ~s on ~s successfully.~n", - [list_to_atom(Proto), list_to_atom(ListenOn)]); + io:format("Stop ~s on ~s successfully.~n", [Proto, ListenOn]); {error, Error} -> - io:format("Failed to stop ~s on ~s, error:~p~n", - [list_to_atom(Proto), list_to_atom(ListenOn), Error]) + io:format("Failed to stop ~s on ~s, error:~p~n", [Proto, ListenOn, Error]) end; listeners(_) -> From e3d414089f589c90088eb17ad12e26033581f205 Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Fri, 7 Jul 2017 09:19:30 +0800 Subject: [PATCH 13/14] Fix the usage of listeners restart/stop CLI --- src/emqttd_cli.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index c73624493..ece99309d 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -501,8 +501,8 @@ listeners(["stop", Proto, ListenOn]) -> listeners(_) -> ?USAGE([{"listeners", "List listeners"}, - {"listeners restart ", "Restart a listener port"}, - {"listeners stop ", "Stop a listener port"}]). + {"listeners restart ", "Restart a listener"}, + {"listeners stop ", "Stop a listener"}]). %%-------------------------------------------------------------------- %% Dump ETS From 081f5dbe6ee50b6b9cf0ae661a718e25b25e0e20 Mon Sep 17 00:00:00 2001 From: turtled Date: Sat, 8 Jul 2017 08:51:44 +0800 Subject: [PATCH 14/14] Format code --- src/emqttd_cli.erl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index ece99309d..369053909 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -482,9 +482,9 @@ listeners(["restart", Proto, ListenOn]) -> end, case emqttd_app:restart_listener({list_to_atom(Proto), ListenOn1, []}) of {ok, _Pid} -> - io:format("Restart ~s listen on ~s successfully.~n", [Proto, ListenOn]); + io:format("Restart ~s listener on ~s successfully.~n", [Proto, ListenOn]); {error, Error} -> - io:format("Failed to restart ~s listen on ~s, error:~p~n", [Proto, ListenOn, Error]) + io:format("Failed to restart ~s listener on ~s, error:~p~n", [Proto, ListenOn, Error]) end; listeners(["stop", Proto, ListenOn]) -> @@ -494,9 +494,9 @@ listeners(["stop", Proto, ListenOn]) -> end, case emqttd_app:stop_listener({list_to_atom(Proto), ListenOn1, []}) of ok -> - io:format("Stop ~s on ~s successfully.~n", [Proto, ListenOn]); + io:format("Stop ~s listener on ~s successfully.~n", [Proto, ListenOn]); {error, Error} -> - io:format("Failed to stop ~s on ~s, error:~p~n", [Proto, ListenOn, Error]) + io:format("Failed to stop ~s listener on ~s, error:~p~n", [Proto, ListenOn, Error]) end; listeners(_) ->