ejabberd-contrib/ejabberd_observer_cli/src/ejabberd_observer_cli_muc.erl

49 lines
1.3 KiB
Erlang

-module(ejabberd_observer_cli_muc).
%% observer_cli_plugin Callback API
-export([attributes/1, sheet_header/0, sheet_body/1]).
attributes(PrevState) ->
OnlineRoomsNumber = lists:foldl(
fun(Host, Acc) ->
Acc + mod_muc:count_online_rooms(Host)
end,
0,
mod_muc_admin:find_hosts(global)
),
Attrs = [
[
#{content => "MUC Rooms", width => 25},
#{content => OnlineRoomsNumber, width => 8}
]
],
NewState = PrevState,
{Attrs, NewState}.
sheet_header() ->
[
#{title => "Room Name", width => 20, shortcut => "n"},
#{title => "MUC Service", width => 30, shortcut => "s"},
#{title => "Occupants", width => 12, shortcut => "o"},
#{title => "Subscribers", width => 13, shortcut => "r"}
].
sheet_body(PrevState) ->
Body = [
begin
{Name, Service, _} = jid:split(jid:decode(RoomStr)),
OccupantsNumber = mod_muc_admin:get_room_occupants_number(Name, Service),
SubsNumber = length(mod_muc_admin:get_subscribers(Name, Service)),
[
Name,
Service,
OccupantsNumber,
SubsNumber
]
end
|| RoomStr <- mod_muc_admin:muc_online_rooms(global)
],
NewState = PrevState,
{Body, NewState}.