aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2004-03-14 20:47:15 +0000
committerAlexey Shchepin <alexey@process-one.net>2004-03-14 20:47:15 +0000
commit60cb9fc959f3e631e4306cf30ff3219539848a37 (patch)
treeda44fe6f4f76419eef91605b001bfe804f5a694a /src
parent* src/web/ejabberd_web.erl: New interface for ACLs editing (diff)
* src/web/ejabberd_web.erl: Added interface for users listsing and
statistics SVN Revision: 216
Diffstat (limited to 'src')
-rw-r--r--src/web/ejabberd_web.erl95
1 files changed, 87 insertions, 8 deletions
diff --git a/src/web/ejabberd_web.erl b/src/web/ejabberd_web.erl
index 0eebeb228..518e19e62 100644
--- a/src/web/ejabberd_web.erl
+++ b/src/web/ejabberd_web.erl
@@ -47,7 +47,7 @@ make_xhtml(Els) ->
process_get(#request{user = User,
- path = ["config" | RPath],
+ path = ["admin" | RPath],
q = Query,
lang = Lang} = Request) ->
if
@@ -56,7 +56,7 @@ process_get(#request{user = User,
deny ->
{401, [], make_xhtml([?XC("h1", "Not Allowed")])};
allow ->
- process_config(Request#request{path = RPath})
+ process_admin(Request#request{path = RPath})
end;
true ->
{401,
@@ -76,21 +76,22 @@ process_get(_Request) ->
-process_config(#request{user = User,
+process_admin(#request{user = User,
path = [],
q = Query,
lang = Lang} = Request) ->
- make_xhtml([?XC("h1", "ejabberd configuration"),
+ make_xhtml([?XC("h1", "ejabberd administration"),
?XE("ul",
[?LI([?AC("acls/", "Access Control Lists"), ?C(" "),
?AC("acls-raw/", "(raw)")]),
?LI([?AC("access/", "Access Rules")]),
?LI([?AC("users/", "Users")]),
- ?LI([?AC("nodes/", "Nodes")])
+ ?LI([?AC("nodes/", "Nodes")]),
+ ?LI([?AC("stats/", "Statistics")])
])
]);
-process_config(#request{user = User,
+process_admin(#request{user = User,
path = ["acls-raw"],
q = Query,
lang = Lang} = Request) ->
@@ -132,7 +133,7 @@ process_config(#request{user = User,
])
]);
-process_config(#request{method = Method,
+process_admin(#request{method = Method,
user = User,
path = ["acls"],
q = Query,
@@ -176,7 +177,28 @@ process_config(#request{method = Method,
])
]);
-process_config(_Request) ->
+process_admin(#request{user = User,
+ path = ["users"],
+ q = Query,
+ lang = Lang} = Request) ->
+ Res = list_users(),
+ make_xhtml([?XC("h1", "ejabberd users")] ++ Res);
+
+process_admin(#request{user = User,
+ path = ["users", Diap],
+ q = Query,
+ lang = Lang} = Request) ->
+ Res = list_users_in_diapason(Diap),
+ make_xhtml([?XC("h1", "ejabberd users")] ++ Res);
+
+process_admin(#request{user = User,
+ path = ["stats"],
+ q = Query,
+ lang = Lang} = Request) ->
+ Res = get_stats(),
+ make_xhtml([?XC("h1", "ejabberd stats")] ++ Res);
+
+process_admin(_Request) ->
{404, [], make_xhtml([?XC("h1", "Not found")])}.
@@ -320,3 +342,60 @@ acl_parse_delete(ACLs, Query) ->
NewACLs.
+
+list_users() ->
+ Users = ejabberd_auth:dirty_get_registered_users(),
+ SUsers = lists:sort(Users),
+ case length(SUsers) of
+ N when N =< 100 ->
+ lists:flatmap(
+ fun(U) ->
+ [?AC("../user/" ++ U, U), ?BR]
+ end, SUsers);
+ N ->
+ NParts = trunc(math:sqrt(N * 0.618)) + 1,
+ M = trunc(N / NParts) + 1,
+ lists:flatmap(
+ fun(K) ->
+ L = K + M - 1,
+ Node = integer_to_list(K) ++ "-" ++ integer_to_list(L),
+ Last = if L < N -> lists:nth(L, SUsers);
+ true -> lists:last(SUsers)
+ end,
+ Name =
+ lists:nth(K, SUsers) ++ " -- " ++
+ Last,
+ [?AC(Node ++ "/", Name), ?BR]
+ end, lists:seq(1, N, M))
+ end.
+
+list_users_in_diapason(Diap) ->
+ Users = ejabberd_auth:dirty_get_registered_users(),
+ SUsers = lists:sort(Users),
+ {ok, [S1, S2]} = regexp:split(Diap, "-"),
+ N1 = list_to_integer(S1),
+ N2 = list_to_integer(S2),
+ Sub = lists:sublist(SUsers, N1, N2 - N1 + 1),
+ lists:flatmap(
+ fun(U) ->
+ [?AC("../../user/" ++ U, U), ?BR]
+ end, Sub).
+
+
+
+get_stats() ->
+ OnlineUsers = mnesia:table_info(presence, size),
+ AuthUsers = mnesia:table_info(session, size),
+ RegisteredUsers = mnesia:table_info(passwd, size),
+
+ [?XAE("table", [],
+ [?XE("tbody",
+ [?XE("tr", [?XC("td", "Registered users"),
+ ?XC("td", integer_to_list(RegisteredUsers))]),
+ ?XE("tr", [?XC("td", "Authentificated users"),
+ ?XC("td", integer_to_list(AuthUsers))]),
+ ?XE("tr", [?XC("td", "Online users"),
+ ?XC("td", integer_to_list(OnlineUsers))])
+ ])
+
+ ])].