diff options
author | Hubert Plociniczak <hubert@lshift.net> | 2008-12-01 22:03:53 +0000 |
---|---|---|
committer | Hubert Plociniczak <hubert@lshift.net> | 2008-12-01 22:03:53 +0000 |
commit | 73e3e76fdb574e0cedc102293a8664ee7303e0fa (patch) | |
tree | 7a777b7a0631bc672a53847d1d43abae4a6e9ec1 | |
parent | 0833b811241a9332828e1bbf7368a42b1012bd7a (diff) | |
parent | 3ba0c46184409a604fbec31e17fadf3cb33202de (diff) | |
download | rabbitmq-server-73e3e76fdb574e0cedc102293a8664ee7303e0fa.tar.gz |
Merge bug19912 into default
-rw-r--r-- | src/rabbit_control.erl | 71 | ||||
-rw-r--r-- | src/rabbit_multi.erl | 24 |
2 files changed, 56 insertions, 39 deletions
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl index 2f7e58e0..b082841e 100644 --- a/src/rabbit_control.erl +++ b/src/rabbit_control.erl @@ -35,23 +35,40 @@ start() -> FullCommand = init:get_plain_arguments(), #params{quiet = Quiet, node = Node, command = Command, args = Args} = - parse_args(FullCommand, #params{quiet = false, node = rabbit_misc:localnode(rabbit)}), - Inform = case Quiet of - true -> fun(_Format, _Data) -> ok end; - false -> fun io:format/2 + parse_args(FullCommand, #params{quiet = false, + node = rabbit_misc:localnode(rabbit)}), + Inform = case Quiet of + true -> fun(_Format, _Args1) -> ok end; + false -> fun(Format, Args1) -> + io:format(Format ++ " ...~n", Args1) + end end, + %% The reason we don't use a try/catch here is that rpc:call turns + %% thrown errors into normal return values case catch action(Command, Node, Args, Inform) of ok -> - Inform("done.~n", []), + case Quiet of + true -> ok; + false -> io:format("...done.~n") + end, init:stop(); {'EXIT', {function_clause, [{?MODULE, action, _} | _]}} -> - io:format("Error~nInvalid command ~p~n", [FullCommand]), + error("invalid command '~s'", + [lists:flatten( + rabbit_misc:intersperse( + " ", [atom_to_list(Command) | Args]))]), usage(); + {error, Reason} -> + error("~p", [Reason]), + halt(2); Other -> - io:format("Error~nrabbit_control action ~p failed:~n~p~n", [Command, Other]), + error("~p", [Other]), halt(2) end. +error(Format, Args) -> + io:format("Error: " ++ Format ++ "~n", Args). + parse_args(["-n", NodeS | Args], Params) -> Node = case lists:member($@, NodeS) of true -> list_to_atom(NodeS); @@ -109,86 +126,86 @@ output of hostname -s is usually the correct suffix to use after the \"@\" sign. halt(1). action(stop, Node, [], Inform) -> - Inform("Stopping and halting node ~p ...~n", [Node]), + Inform("Stopping and halting node ~p", [Node]), call(Node, {rabbit, stop_and_halt, []}); action(stop_app, Node, [], Inform) -> - Inform("Stopping node ~p ...~n", [Node]), + Inform("Stopping node ~p", [Node]), call(Node, {rabbit, stop, []}); action(start_app, Node, [], Inform) -> - Inform("Starting node ~p ...~n", [Node]), + Inform("Starting node ~p", [Node]), call(Node, {rabbit, start, []}); action(reset, Node, [], Inform) -> - Inform("Resetting node ~p ...~n", [Node]), + Inform("Resetting node ~p", [Node]), call(Node, {rabbit_mnesia, reset, []}); action(force_reset, Node, [], Inform) -> - Inform("Forcefully resetting node ~p ...~n", [Node]), + Inform("Forcefully resetting node ~p", [Node]), call(Node, {rabbit_mnesia, force_reset, []}); action(cluster, Node, ClusterNodeSs, Inform) -> ClusterNodes = lists:map(fun list_to_atom/1, ClusterNodeSs), - Inform("Clustering node ~p with ~p ...~n", + Inform("Clustering node ~p with ~p", [Node, ClusterNodes]), rpc_call(Node, rabbit_mnesia, cluster, [ClusterNodes]); action(status, Node, [], Inform) -> - Inform("Status of node ~p ...~n", [Node]), + Inform("Status of node ~p", [Node]), Res = call(Node, {rabbit, status, []}), io:format("~p~n", [Res]), ok; action(rotate_logs, Node, [], Inform) -> - Inform("Reopening logs for node ~p ...~n", [Node]), + Inform("Reopening logs for node ~p", [Node]), call(Node, {rabbit, rotate_logs, [""]}); action(rotate_logs, Node, Args = [Suffix], Inform) -> - Inform("Rotating logs to files with suffix ~p ...~n", [Suffix]), + Inform("Rotating logs to files with suffix ~p", [Suffix]), call(Node, {rabbit, rotate_logs, Args}); action(add_user, Node, Args = [Username, _Password], Inform) -> - Inform("Creating user ~p ...~n", [Username]), + Inform("Creating user ~p", [Username]), call(Node, {rabbit_access_control, add_user, Args}); action(delete_user, Node, Args = [_Username], Inform) -> - Inform("Deleting user ~p ...~n", Args), + Inform("Deleting user ~p", Args), call(Node, {rabbit_access_control, delete_user, Args}); action(change_password, Node, Args = [Username, _Newpassword], Inform) -> - Inform("Changing password for user ~p ...~n", [Username]), + Inform("Changing password for user ~p", [Username]), call(Node, {rabbit_access_control, change_password, Args}); action(list_users, Node, [], Inform) -> - Inform("Listing users ...~n", []), + Inform("Listing users", []), display_list(call(Node, {rabbit_access_control, list_users, []})); action(add_vhost, Node, Args = [_VHostPath], Inform) -> - Inform("Creating vhost ~p ...~n", Args), + Inform("Creating vhost ~p", Args), call(Node, {rabbit_access_control, add_vhost, Args}); action(delete_vhost, Node, Args = [_VHostPath], Inform) -> - Inform("Deleting vhost ~p ...~n", Args), + Inform("Deleting vhost ~p", Args), call(Node, {rabbit_access_control, delete_vhost, Args}); action(list_vhosts, Node, [], Inform) -> - Inform("Listing vhosts ...~n", []), + Inform("Listing vhosts", []), display_list(call(Node, {rabbit_access_control, list_vhosts, []})); action(map_user_vhost, Node, Args = [_Username, _VHostPath], Inform) -> - Inform("Mapping user ~p to vhost ~p ...~n", Args), + Inform("Mapping user ~p to vhost ~p", Args), call(Node, {rabbit_access_control, map_user_vhost, Args}); action(unmap_user_vhost, Node, Args = [_Username, _VHostPath], Inform) -> - Inform("Unmapping user ~p from vhost ~p ...~n", Args), + Inform("Unmapping user ~p from vhost ~p", Args), call(Node, {rabbit_access_control, unmap_user_vhost, Args}); action(list_user_vhosts, Node, Args = [_Username], Inform) -> - Inform("Listing vhosts for user ~p...~n", Args), + Inform("Listing vhosts for user ~p", Args), display_list(call(Node, {rabbit_access_control, list_user_vhosts, Args})); action(list_vhost_users, Node, Args = [_VHostPath], Inform) -> - Inform("Listing users for vhosts ~p...~n", Args), + Inform("Listing users for vhosts ~p", Args), display_list(call(Node, {rabbit_access_control, list_vhost_users, Args})). display_list(L) when is_list(L) -> diff --git a/src/rabbit_multi.erl b/src/rabbit_multi.erl index c6a7e920..aa780ad5 100644 --- a/src/rabbit_multi.erl +++ b/src/rabbit_multi.erl @@ -46,18 +46,22 @@ start() -> io:format("done.~n"), init:stop(); {'EXIT', {function_clause, [{?MODULE, action, _} | _]}} -> - io:format("Invalid command ~p~n", [FullCommand]), + error("invalid command '~s'", + [lists:flatten( + rabbit_misc:intersperse(" ", FullCommand))]), usage(); timeout -> - io:format("timeout starting some nodes.~n"), + error("timeout starting some nodes.", []), halt(1); Other -> - io:format("~nrabbit_multi action ~p failed:~n~p~n", - [Command, Other]), + error("~p", [Other]), halt(2) end end. +error(Format, Args) -> + io:format("Error: " ++ Format ++ "~n", Args). + parse_args([Command | Args]) -> {list_to_atom(Command), Args}. @@ -223,8 +227,7 @@ write_pids_file(Pids) -> {ok, Device} -> Device; {error, Reason} -> - throw({error, {cannot_create_pids_file, - FileName, Reason}}) + throw({cannot_create_pids_file, FileName, Reason}) end, try ok = io:write(Handle, Pids), @@ -233,8 +236,7 @@ write_pids_file(Pids) -> case file:close(Handle) of ok -> ok; {error, Reason1} -> - throw({error, {cannot_create_pids_file, - FileName, Reason1}}) + throw({cannot_create_pids_file, FileName, Reason1}) end end, ok. @@ -244,8 +246,7 @@ delete_pids_file() -> case file:delete(FileName) of ok -> ok; {error, enoent} -> ok; - {error, Reason} -> throw({error, {cannot_delete_pids_file, - FileName, Reason}}) + {error, Reason} -> throw({cannot_delete_pids_file, FileName, Reason}) end. read_pids_file() -> @@ -253,8 +254,7 @@ read_pids_file() -> case file:consult(FileName) of {ok, [Pids]} -> Pids; {error, enoent} -> []; - {error, Reason} -> throw({error, {cannot_read_pids_file, - FileName, Reason}}) + {error, Reason} -> throw({cannot_read_pids_file, FileName, Reason}) end. kill_wait(Pid, TimeLeft, Forceful) when TimeLeft < 0 -> |