remove_connection/3,
dirty_get_connections/0,
allow_host/2,
- ctl_process/2
+ incoming_s2s_number/0,
+ outgoing_s2s_number/0
]).
%% gen_server callbacks
-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).
{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{}}.
%%--------------------------------------------------------------------
%% The return value is ignored.
%%--------------------------------------------------------------------
terminate(_Reason, _State) ->
+ ejabberd_commands:unregister_commands(commands()),
ok.
%%--------------------------------------------------------------------
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
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
-include("ejabberd.hrl").
-include("jlib.hrl").
--include("ejabberd_ctl.hrl").
+-include("ejabberd_commands.hrl").
-record(session, {sid, usr, us, priority, info}).
-record(state, {}).
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{}}.
%% The return value is ignored.
%%--------------------------------------------------------------------
terminate(_Reason, _State) ->
+ ejabberd_commands:unregister_commands(commands()),
ok.
%%--------------------------------------------------------------------
end.
-ctl_process(_Val, ["connected-users"]) ->
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% 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(),
- 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]) ->
+ 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),
- 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.
+ lists:sort(Resources).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Update Mnesia tables
+
update_tables() ->
case catch mnesia:table_info(session, attributes) of
[ur, user, node] ->