Skip to content

Commit

Permalink
Improve error handling in stat
Browse files Browse the repository at this point in the history
  • Loading branch information
Kamil Waz committed Nov 22, 2022
1 parent 89d1b2b commit bc20e0c
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 38 deletions.
10 changes: 8 additions & 2 deletions src/graphql/admin/mongoose_graphql_stats_domain.erl
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
-include("jlib.hrl").

execute(_Ctx, Domain, <<"registeredUsers">>, _Args) ->
{ok, stats_api:stats(<<"registeredusers">>, Domain)};
globalStats(<<"registeredusers">>, Domain);
execute(_Ctx, Domain, <<"onlineUsers">>, _Args) ->
{ok, stats_api:stats(<<"onlineusers">>, Domain)}.
globalStats(<<"onlineusers">>, Domain).

globalStats(Name, Domain) ->
case stats_api:stats(Name, Domain) of
{ok, _} = Result -> Result;
Error -> make_error(Error, #{domain => Domain})
end.
18 changes: 12 additions & 6 deletions src/graphql/admin/mongoose_graphql_stats_global.erl
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,20 @@
-include("jlib.hrl").

execute(_Ctx, globalStats, <<"uptimeSeconds">>, _Args) ->
{ok, stats_api:stats(<<"uptimeseconds">>)};
globalStats(<<"uptimeseconds">>);
execute(_Ctx, globalStats, <<"registeredUsers">>, _Args) ->
{ok, stats_api:stats(<<"registeredusers">>)};
globalStats(<<"registeredusers">>);
execute(_Ctx, globalStats, <<"onlineUsersNode">>, _Args) ->
{ok, stats_api:stats(<<"onlineusersnode">>)};
globalStats(<<"onlineusersnode">>);
execute(_Ctx, globalStats, <<"onlineUsers">>, _Args) ->
{ok, stats_api:stats(<<"onlineusers">>)};
globalStats(<<"onlineusers">>);
execute(_Ctx, globalStats, <<"incomingS2S">>, _Args) ->
{ok, stats_api:incoming_s2s_number()};
stats_api:incoming_s2s_number();
execute(_Ctx, globalStats, <<"outgoingS2S">>, _Args) ->
{ok, stats_api:outgoing_s2s_number()}.
stats_api:outgoing_s2s_number().

globalStats(Name) ->
case stats_api:stats(Name) of
{ok, _} = Result -> Result;
Error -> make_error(Error, #{})
end.
54 changes: 24 additions & 30 deletions src/stats_api.erl
Original file line number Diff line number Diff line change
Expand Up @@ -5,38 +5,32 @@
-include("mongoose.hrl").
-include("ejabberd_commands.hrl").

-spec incoming_s2s_number() -> non_neg_integer().
-spec incoming_s2s_number() -> {ok, non_neg_integer()}.
incoming_s2s_number() ->
length(supervisor:which_children(ejabberd_s2s_in_sup)).
{ok, length(supervisor:which_children(ejabberd_s2s_in_sup))}.

-spec outgoing_s2s_number() -> non_neg_integer().
-spec outgoing_s2s_number() -> {ok, non_neg_integer()}.
outgoing_s2s_number() ->
length(supervisor:which_children(ejabberd_s2s_out_sup)).
{ok, length(supervisor:which_children(ejabberd_s2s_out_sup))}.

-spec stats(binary()) -> integer() | {error, string()}.
stats(Name) ->
case Name of
<<"uptimeseconds">> ->
trunc(element(1, erlang:statistics(wall_clock))/1000);
<<"registeredusers">> ->
Domains = lists:flatmap(fun mongoose_domain_api:get_domains_by_host_type/1,
?ALL_HOST_TYPES),
lists:sum([ejabberd_auth:get_vh_registered_users_number(Domain) || Domain <- Domains]);
<<"onlineusersnode">> ->
ejabberd_sm:get_node_sessions_number();
<<"onlineusers">> ->
ejabberd_sm:get_total_sessions_number();
_ ->
{error, "Wrong command name."}
end.
-spec stats(binary()) -> {ok, integer()} | {not_found, string()}.
stats(<<"uptimeseconds">>) ->
{ok, trunc(element(1, erlang:statistics(wall_clock)) / 1000)};
stats(<<"registeredusers">>) ->
Domains = lists:flatmap(fun mongoose_domain_api:get_domains_by_host_type/1,
?ALL_HOST_TYPES),
{ok, lists:sum([ejabberd_auth:get_vh_registered_users_number(Domain) || Domain <- Domains])};
stats(<<"onlineusersnode">>) ->
{ok, ejabberd_sm:get_node_sessions_number()};
stats(<<"onlineusers">>) ->
{ok, ejabberd_sm:get_total_sessions_number()};
stats(_Name) ->
{not_found, "Stats not found"}.

-spec stats(binary(), jid:server()) -> integer() | {error, string()}.
stats(Name, Host) ->
case Name of
<<"registeredusers">> ->
ejabberd_auth:get_vh_registered_users_number(Host);
<<"onlineusers">> ->
ejabberd_sm:get_vh_session_number(Host);
_ ->
{error, "Wrong command name."}
end.
-spec stats(binary(), jid:server()) -> {ok, integer()} | {not_found, string()}.
stats(<<"registeredusers">>, Host) ->
{ok, ejabberd_auth:get_vh_registered_users_number(Host)};
stats(<<"onlineusers">>, Host) ->
{ok, ejabberd_sm:get_vh_session_number(Host)};
stats(_Name, _Host) ->
{not_found, "Stats not found"}.

0 comments on commit bc20e0c

Please sign in to comment.