1 |
|
-module(stats_api). |
2 |
|
|
3 |
|
-export([incoming_s2s_number/0, outgoing_s2s_number/0, stats/1, stats/2]). |
4 |
|
-export([stats_mongooseimctl/1, stats_mongooseimctl/2]). |
5 |
|
|
6 |
|
-ignore_xref([stats_mongooseimctl/1, stats_mongooseimctl/2]). |
7 |
|
|
8 |
|
-include("mongoose.hrl"). |
9 |
|
|
10 |
|
-spec incoming_s2s_number() -> {ok, non_neg_integer()}. |
11 |
|
incoming_s2s_number() -> |
12 |
4 |
{ok, length(supervisor:which_children(ejabberd_s2s_in_sup))}. |
13 |
|
|
14 |
|
-spec outgoing_s2s_number() -> {ok, non_neg_integer()}. |
15 |
|
outgoing_s2s_number() -> |
16 |
4 |
{ok, length(supervisor:which_children(ejabberd_s2s_out_sup))}. |
17 |
|
|
18 |
|
-spec stats(binary()) -> {ok, integer()} | {not_found, string()}. |
19 |
|
stats(<<"uptimeseconds">>) -> |
20 |
4 |
{ok, trunc(element(1, erlang:statistics(wall_clock)) / 1000)}; |
21 |
|
stats(<<"registeredusers">>) -> |
22 |
4 |
Domains = lists:flatmap(fun mongoose_domain_api:get_domains_by_host_type/1, |
23 |
|
?ALL_HOST_TYPES), |
24 |
4 |
{ok, lists:sum([ejabberd_auth:get_vh_registered_users_number(Domain) || Domain <- Domains])}; |
25 |
|
stats(<<"onlineusersnode">>) -> |
26 |
4 |
{ok, ejabberd_sm:get_node_sessions_number()}; |
27 |
|
stats(<<"onlineusers">>) -> |
28 |
4 |
{ok, ejabberd_sm:get_total_sessions_number()}; |
29 |
|
stats(_Name) -> |
30 |
:-( |
{not_found, "Stats not found"}. |
31 |
|
|
32 |
|
-spec stats(binary(), jid:server()) -> {ok, integer()} | {not_found, string()}. |
33 |
|
stats(<<"registeredusers">>, Host) -> |
34 |
8 |
{ok, ejabberd_auth:get_vh_registered_users_number(Host)}; |
35 |
|
stats(<<"onlineusers">>, Host) -> |
36 |
8 |
{ok, ejabberd_sm:get_vh_session_number(Host)}; |
37 |
|
stats(_Name, _Host) -> |
38 |
:-( |
{not_found, "Stats not found"}. |
39 |
|
|
40 |
|
-spec stats_mongooseimctl(binary()) -> {ok | not_found, string()}. |
41 |
|
stats_mongooseimctl(Name) -> |
42 |
:-( |
case stats(Name) of |
43 |
:-( |
{ok, Stat} -> {ok, integer_to_list(Stat)}; |
44 |
:-( |
Error -> Error |
45 |
|
end. |
46 |
|
|
47 |
|
-spec stats_mongooseimctl(binary(), binary()) -> {ok | not_found, string()}. |
48 |
|
stats_mongooseimctl(Name, Host) -> |
49 |
:-( |
case stats(Name, Host) of |
50 |
:-( |
{ok, Stat} -> {ok, integer_to_list(Stat)}; |
51 |
:-( |
Error -> Error |
52 |
|
end. |