diff --git a/ChangeLog b/ChangeLog index 760e4ff3b..04cac4db0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2008-10-12 Badlop + * src/ejabberd_sm.erl: Update from ctl to commands (EJAB-694) + * src/ejabberd_s2s.erl: Likewise + * src/ejabberd_auth.erl: Update from ctl to commands (EJAB-694) * src/ejabberd_auth_internal.erl: Likewise * src/ejabberd_auth_ldap.erl: Likewise diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl index d2672ca84..c970564d8 100644 --- a/src/ejabberd_s2s.erl +++ b/src/ejabberd_s2s.erl @@ -39,7 +39,8 @@ remove_connection/3, dirty_get_connections/0, allow_host/2, - ctl_process/2 + incoming_s2s_number/0, + outgoing_s2s_number/0 ]). %% gen_server callbacks @@ -48,7 +49,7 @@ -include("ejabberd.hrl"). -include("jlib.hrl"). --include("ejabberd_ctl.hrl"). +-include("ejabberd_commands.hrl"). -define(DEFAULT_MAX_S2S_CONNECTIONS_NUMBER, 1). -define(DEFAULT_MAX_S2S_CONNECTIONS_NUMBER_PER_NODE, 1). @@ -164,10 +165,7 @@ init([]) -> {attributes, record_info(fields, s2s)}]), mnesia:add_table_copy(s2s, node(), ram_copies), mnesia:subscribe(system), - ejabberd_ctl:register_commands( - [{"incoming-s2s-number", "print number of incoming s2s connections on the node"}, - {"outgoing-s2s-number", "print number of outgoing s2s connections on the node"}], - ?MODULE, ctl_process), + ejabberd_commands:register_commands(commands()), {ok, #state{}}. %%-------------------------------------------------------------------- @@ -221,6 +219,7 @@ handle_info(_Info, State) -> %% The return value is ignored. %%-------------------------------------------------------------------- terminate(_Reason, _State) -> + ejabberd_commands:unregister_commands(commands()), ok. %%-------------------------------------------------------------------- @@ -427,16 +426,35 @@ is_subdomain(Domain1, Domain2) -> send_element(Pid, El) -> Pid ! {send_element, El}. -ctl_process(_Val, ["incoming-s2s-number"]) -> - N = length(supervisor:which_children(ejabberd_s2s_in_sup)), - ?PRINT("~p~n", [N]), - {stop, ?STATUS_SUCCESS}; -ctl_process(_Val, ["outgoing-s2s-number"]) -> - N = length(supervisor:which_children(ejabberd_s2s_out_sup)), - ?PRINT("~p~n", [N]), - {stop, ?STATUS_SUCCESS}; -ctl_process(Val, _Args) -> - Val. + +%%%---------------------------------------------------------------------- +%%% ejabberd commands + +commands() -> + [ + #ejabberd_commands{name = incoming_s2s_number, + tags = [stats, s2s], + desc = "Number of incoming s2s connections on the node", + module = ?MODULE, function = incoming_s2s_number, + args = [], + result = {s2s_incoming, integer}}, + #ejabberd_commands{name = outgoing_s2s_number, + tags = [stats, s2s], + desc = "Number of outgoing s2s connections on the node", + module = ?MODULE, function = outgoing_s2s_number, + args = [], + result = {s2s_outgoing, integer}} + ]. + +incoming_s2s_number() -> + length(supervisor:which_children(ejabberd_s2s_in_sup)). + +outgoing_s2s_number() -> + length(supervisor:which_children(ejabberd_s2s_out_sup)). + + +%%%---------------------------------------------------------------------- +%%% Update Mnesia tables update_tables() -> case catch mnesia:table_info(s2s, type) of diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl index c601f9442..4e49ad5a0 100644 --- a/src/ejabberd_sm.erl +++ b/src/ejabberd_sm.erl @@ -46,7 +46,9 @@ register_iq_handler/4, register_iq_handler/5, unregister_iq_handler/2, - ctl_process/2, + connected_users/0, + connected_users_number/0, + user_resources/2, get_session_pid/3, get_user_info/3, get_user_ip/3 @@ -58,7 +60,7 @@ -include("ejabberd.hrl"). -include("jlib.hrl"). --include("ejabberd_ctl.hrl"). +-include("ejabberd_commands.hrl"). -record(session, {sid, usr, us, priority, info}). -record(state, {}). @@ -251,11 +253,7 @@ init([]) -> ejabberd_hooks:add(remove_user, Host, ejabberd_sm, disconnect_removed_user, 100) end, ?MYHOSTS), - ejabberd_ctl:register_commands( - [{"connected-users", "list all established sessions"}, - {"connected-users-number", "print a number of established sessions"}, - {"user-resources user server", "print user's connected resources"}], - ?MODULE, ctl_process), + ejabberd_commands:register_commands(commands()), {ok, #state{}}. @@ -325,6 +323,7 @@ handle_info(_Info, State) -> %% The return value is ignored. %%-------------------------------------------------------------------- terminate(_Reason, _State) -> + ejabberd_commands:unregister_commands(commands()), ok. %%-------------------------------------------------------------------- @@ -647,27 +646,46 @@ process_iq(From, To, Packet) -> end. -ctl_process(_Val, ["connected-users"]) -> - USRs = dirty_get_sessions_list(), - NewLine = io_lib:format("~n", []), - SUSRs = lists:sort(USRs), - FUSRs = lists:map(fun({U, S, R}) -> [U, $@, S, $/, R, NewLine] end, SUSRs), - ?PRINT("~s", [FUSRs]), - {stop, ?STATUS_SUCCESS}; -ctl_process(_Val, ["connected-users-number"]) -> - N = length(dirty_get_sessions_list()), - ?PRINT("~p~n", [N]), - {stop, ?STATUS_SUCCESS}; -ctl_process(_Val, ["user-resources", User, Server]) -> - Resources = get_user_resources(User, Server), - NewLine = io_lib:format("~n", []), - SResources = lists:sort(Resources), - FResources = lists:map(fun(R) -> [R, NewLine] end, SResources), - ?PRINT("~s", [FResources]), - {stop, ?STATUS_SUCCESS}; -ctl_process(Val, _Args) -> - Val. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% ejabberd commands +commands() -> + [ + #ejabberd_commands{name = connected_users, + tags = [session], + desc = "List all established sessions", + module = ?MODULE, function = connected_users, + args = [], + result = {connected_users, {list, {sessions, string}}}}, + #ejabberd_commands{name = connected_users_number, + tags = [session, stats], + desc = "Get the number of established sessions", + module = ?MODULE, function = connected_users_number, + args = [], + result = {num_sessions, integer}}, + #ejabberd_commands{name = user_resources, + tags = [session], + desc = "List user's connected resources", + module = ?MODULE, function = user_resources, + args = [{user, string}, {host, string}], + result = {resources, {list, {resource, string}}}} + ]. + +connected_users() -> + USRs = dirty_get_sessions_list(), + SUSRs = lists:sort(USRs), + lists:map(fun({U, S, R}) -> [U, $@, S, $/, R] end, SUSRs). + +connected_users_number() -> + length(dirty_get_sessions_list()). + +user_resources(User, Server) -> + Resources = get_user_resources(User, Server), + lists:sort(Resources). + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Update Mnesia tables update_tables() -> case catch mnesia:table_info(session, attributes) of