mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-02 21:17:12 +02:00
* src/ejabberd_ctl.erl: Partially rewritten
SVN Revision: 505
This commit is contained in:
parent
73073d4af5
commit
3eb1b59e64
|
@ -1,3 +1,7 @@
|
||||||
|
2006-02-13 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/ejabberd_ctl.erl: Partially rewritten
|
||||||
|
|
||||||
2006-02-12 Alexey Shchepin <alexey@sevcom.net>
|
2006-02-12 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
* src/mod_roster_odbc.erl: Bugfix
|
* src/mod_roster_odbc.erl: Bugfix
|
||||||
|
|
|
@ -9,18 +9,23 @@
|
||||||
-module(ejabberd_ctl).
|
-module(ejabberd_ctl).
|
||||||
-author('alexey@sevcom.net').
|
-author('alexey@sevcom.net').
|
||||||
|
|
||||||
-export([start/0, dump_to_textfile/1]).
|
-export([start/0,
|
||||||
|
process/1]).
|
||||||
|
|
||||||
-define(STATUS_SUCCESS, 0).
|
-include("ejabberd_ctl.hrl").
|
||||||
-define(STATUS_ERROR, 1).
|
|
||||||
-define(STATUS_USAGE, 2).
|
|
||||||
-define(STATUS_BADRPC, 3).
|
|
||||||
|
|
||||||
start() ->
|
start() ->
|
||||||
case init:get_plain_arguments() of
|
case init:get_plain_arguments() of
|
||||||
[SNode | Args] ->
|
[SNode | Args] ->
|
||||||
Node = list_to_atom(SNode),
|
Node = list_to_atom(SNode),
|
||||||
Status = process(Node, Args),
|
Status = case rpc:call(Node, ?MODULE, process, [Args]) of
|
||||||
|
{badrpc, Reason} ->
|
||||||
|
io:format("RPC call failed on the node ~p: ~p~n",
|
||||||
|
[Node, Reason]),
|
||||||
|
?STATUS_BADRPC;
|
||||||
|
S ->
|
||||||
|
S
|
||||||
|
end,
|
||||||
halt(Status);
|
halt(Status);
|
||||||
_ ->
|
_ ->
|
||||||
print_usage(),
|
print_usage(),
|
||||||
|
@ -28,181 +33,120 @@ start() ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
process(Node, ["status"]) ->
|
process(["status"]) ->
|
||||||
case rpc:call(Node, init, get_status, []) of
|
{InternalStatus, ProvidedStatus} = init:get_status(),
|
||||||
{badrpc, Reason} ->
|
io:format("Node ~p is ~p. Status: ~p~n",
|
||||||
io:format("Can't get node ~p status: ~p~n",
|
[node(), InternalStatus, ProvidedStatus]),
|
||||||
[Node, Reason]),
|
?STATUS_SUCCESS;
|
||||||
?STATUS_BADRPC;
|
|
||||||
{InternalStatus, ProvidedStatus} ->
|
|
||||||
io:format("Node ~p is ~p. Status: ~p~n",
|
|
||||||
[Node, InternalStatus, ProvidedStatus]),
|
|
||||||
?STATUS_SUCCESS
|
|
||||||
end;
|
|
||||||
|
|
||||||
process(Node, ["stop"]) ->
|
process(["stop"]) ->
|
||||||
case rpc:call(Node, init, stop, []) of
|
init:stop(),
|
||||||
{badrpc, Reason} ->
|
?STATUS_SUCCESS;
|
||||||
io:format("Can't stop node ~p: ~p~n",
|
|
||||||
[Node, Reason]),
|
|
||||||
?STATUS_BADRPC;
|
|
||||||
_ ->
|
|
||||||
?STATUS_SUCCESS
|
|
||||||
end;
|
|
||||||
|
|
||||||
process(Node, ["restart"]) ->
|
process(["restart"]) ->
|
||||||
case rpc:call(Node, init, restart, []) of
|
init:restart(),
|
||||||
{badrpc, Reason} ->
|
?STATUS_SUCCESS;
|
||||||
io:format("Can't restart node ~p: ~p~n",
|
|
||||||
[Node, Reason]),
|
|
||||||
?STATUS_BADRPC;
|
|
||||||
_ ->
|
|
||||||
?STATUS_SUCCESS
|
|
||||||
end;
|
|
||||||
|
|
||||||
process(Node, ["reopen-log"]) ->
|
process(["reopen-log"]) ->
|
||||||
case rpc:call(Node, ejabberd_logger_h, reopen_log, []) of
|
ejabberd_logger_h:reopen_log(),
|
||||||
{badrpc, Reason} ->
|
?STATUS_SUCCESS;
|
||||||
io:format("Can't reopen node ~p log: ~p~n",
|
|
||||||
[Node, Reason]),
|
|
||||||
?STATUS_BADRPC;
|
|
||||||
_ ->
|
|
||||||
?STATUS_SUCCESS
|
|
||||||
end;
|
|
||||||
|
|
||||||
process(Node, ["register", User, Server, Password]) ->
|
process(["register", User, Server, Password]) ->
|
||||||
case rpc:call(Node, ejabberd_auth, try_register, [User, Server, Password]) of
|
case ejabberd_auth:try_register(User, Server, Password) of
|
||||||
{atomic, ok} ->
|
{atomic, ok} ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{atomic, exists} ->
|
{atomic, exists} ->
|
||||||
io:format("User ~p already registered at node ~p~n",
|
io:format("User ~p already registered at node ~p~n",
|
||||||
[User ++ "@" ++ Server, Node]),
|
[User ++ "@" ++ Server, node()]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't register user ~p at node ~p: ~p~n",
|
io:format("Can't register user ~p at node ~p: ~p~n",
|
||||||
[User ++ "@" ++ Server, Node, Reason]),
|
[User ++ "@" ++ Server, node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't register user ~p at node ~p: ~p~n",
|
|
||||||
[User ++ "@" ++ Server, Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["unregister", User, Server]) ->
|
process(["unregister", User, Server]) ->
|
||||||
case rpc:call(Node, ejabberd_auth, remove_user, [User, Server]) of
|
case ejabberd_auth:remove_user(User, Server) of
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't unregister user ~p at node ~p: ~p~n",
|
io:format("Can't unregister user ~p at node ~p: ~p~n",
|
||||||
[User ++ "@" ++ Server, Node, Reason]),
|
[User ++ "@" ++ Server, node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR;
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't unregister user ~p at node ~p: ~p~n",
|
|
||||||
[User ++ "@" ++ Server, Node, Reason]),
|
|
||||||
?STATUS_BADRPC;
|
|
||||||
_ ->
|
_ ->
|
||||||
?STATUS_SUCCESS
|
?STATUS_SUCCESS
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["backup", Path]) ->
|
process(["backup", Path]) ->
|
||||||
case rpc:call(Node, mnesia, backup, [Path]) of
|
case mnesia:backup(Path) of
|
||||||
ok ->
|
ok ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't store backup in ~p at node ~p: ~p~n",
|
io:format("Can't store backup in ~p at node ~p: ~p~n",
|
||||||
[filename:absname(Path), Node, Reason]),
|
[filename:absname(Path), node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't store backup in ~p at node ~p: ~p~n",
|
|
||||||
[filename:absname(Path), Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["dump", Path]) ->
|
process(["dump", Path]) ->
|
||||||
case rpc:call(Node, ejabberd_ctl, dump_to_textfile, [Path]) of
|
case dump_to_textfile(Path) of
|
||||||
ok ->
|
ok ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't store dump in ~p at node ~p: ~p~n",
|
io:format("Can't store dump in ~p at node ~p: ~p~n",
|
||||||
[filename:absname(Path), Node, Reason]),
|
[filename:absname(Path), node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't store dump in ~p at node ~p: ~p~n",
|
|
||||||
[filename:absname(Path), Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["load", Path]) ->
|
process(["load", Path]) ->
|
||||||
case rpc:call(Node, mnesia, load_textfile, [Path]) of
|
case mnesia:load_textfile(Path) of
|
||||||
{atomic, ok} ->
|
{atomic, ok} ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't load dump in ~p at node ~p: ~p~n",
|
io:format("Can't load dump in ~p at node ~p: ~p~n",
|
||||||
[filename:absname(Path), Node, Reason]),
|
[filename:absname(Path), node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't load dump in ~p at node ~p: ~p~n",
|
|
||||||
[filename:absname(Path), Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["restore", Path]) ->
|
process(["restore", Path]) ->
|
||||||
case rpc:call(Node,
|
case mnesia:restore(Path, [{default_op, keep_tables}]) of
|
||||||
mnesia, restore, [Path, [{default_op, keep_tables}]]) of
|
|
||||||
{atomic, _} ->
|
{atomic, _} ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't restore backup from ~p at node ~p: ~p~n",
|
io:format("Can't restore backup from ~p at node ~p: ~p~n",
|
||||||
[filename:absname(Path), Node, Reason]),
|
[filename:absname(Path), node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't restore backup from ~p at node ~p: ~p~n",
|
|
||||||
[filename:absname(Path), Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["install-fallback", Path]) ->
|
process(["install-fallback", Path]) ->
|
||||||
case rpc:call(Node, mnesia, install_fallback, [Path]) of
|
case mnesia:install_fallback(Path) of
|
||||||
ok ->
|
ok ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't install fallback from ~p at node ~p: ~p~n",
|
io:format("Can't install fallback from ~p at node ~p: ~p~n",
|
||||||
[filename:absname(Path), Node, Reason]),
|
[filename:absname(Path), node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't install fallback from ~p at node ~p: ~p~n",
|
|
||||||
[filename:absname(Path), Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["import-file", Path]) ->
|
process(["import-file", Path]) ->
|
||||||
case rpc:call(Node, jd2ejd, import_file, [Path]) of
|
case jd2ejd:import_file(Path) of
|
||||||
ok ->
|
ok ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't import jabberd 1.4 spool file ~p at node ~p: ~p~n",
|
io:format("Can't import jabberd 1.4 spool file ~p at node ~p: ~p~n",
|
||||||
[filename:absname(Path), Node, Reason]),
|
[filename:absname(Path), node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't import jabberd 1.4 spool file ~p at node ~p: ~p~n",
|
|
||||||
[filename:absname(Path), Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["import-dir", Path]) ->
|
process(["import-dir", Path]) ->
|
||||||
case rpc:call(Node, jd2ejd, import_dir, [Path]) of
|
case jd2ejd:import_dir(Path) of
|
||||||
ok ->
|
ok ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't import jabberd 1.4 spool dir ~p at node ~p: ~p~n",
|
io:format("Can't import jabberd 1.4 spool dir ~p at node ~p: ~p~n",
|
||||||
[filename:absname(Path), Node, Reason]),
|
[filename:absname(Path), node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't import jabberd 1.4 spool dir ~p at node ~p: ~p~n",
|
|
||||||
[filename:absname(Path), Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["registered-users"]) ->
|
process(["registered-users"]) ->
|
||||||
case rpc:call(Node, ejabberd_auth, dirty_get_registered_users, []) of
|
case ejabberd_auth:dirty_get_registered_users() of
|
||||||
Users when is_list(Users) ->
|
Users when is_list(Users) ->
|
||||||
NewLine = io_lib:format("~n", []),
|
NewLine = io_lib:format("~n", []),
|
||||||
SUsers = lists:sort(Users),
|
SUsers = lists:sort(Users),
|
||||||
|
@ -211,25 +155,15 @@ process(Node, ["registered-users"]) ->
|
||||||
?STATUS_SUCCESS;
|
?STATUS_SUCCESS;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
io:format("Can't get list of registered users at node ~p: ~p~n",
|
io:format("Can't get list of registered users at node ~p: ~p~n",
|
||||||
[Node, Reason]),
|
[node(), Reason]),
|
||||||
?STATUS_ERROR;
|
?STATUS_ERROR
|
||||||
{badrpc, Reason} ->
|
|
||||||
io:format("Can't get list of registered users at node ~p: ~p~n",
|
|
||||||
[Node, Reason]),
|
|
||||||
?STATUS_BADRPC
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process(Node, ["delete-expired-messages"]) ->
|
process(["delete-expired-messages"]) ->
|
||||||
case rpc:call(Node, mod_offline, remove_expired_messages, []) of
|
mod_offline:remove_expired_messages(),
|
||||||
{badrpc, Reason} ->
|
?STATUS_SUCCESS;
|
||||||
io:format("Can't delete expired messages at node ~p: ~p~n",
|
|
||||||
[Node, Reason]),
|
|
||||||
?STATUS_BADRPC;
|
|
||||||
_ ->
|
|
||||||
?STATUS_SUCCESS
|
|
||||||
end;
|
|
||||||
|
|
||||||
process(_Node, _Args) ->
|
process(_Args) ->
|
||||||
print_usage(),
|
print_usage(),
|
||||||
?STATUS_USAGE.
|
?STATUS_USAGE.
|
||||||
|
|
||||||
|
@ -286,7 +220,7 @@ dump_to_textfile(_, {ok, F}) ->
|
||||||
dump_to_textfile(_, {error, Reason}) ->
|
dump_to_textfile(_, {error, Reason}) ->
|
||||||
{error, Reason}.
|
{error, Reason}.
|
||||||
|
|
||||||
|
|
||||||
dump_tab(F, T) ->
|
dump_tab(F, T) ->
|
||||||
W = mnesia:table_info(T, wild_pattern),
|
W = mnesia:table_info(T, wild_pattern),
|
||||||
{atomic,All} = mnesia:transaction(
|
{atomic,All} = mnesia:transaction(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user