]> granicus.if.org Git - ejabberd/commitdiff
* src/web/ejabberd_web.erl: Added interface for users listsing and
authorAlexey Shchepin <alexey@process-one.net>
Sun, 14 Mar 2004 20:47:15 +0000 (20:47 +0000)
committerAlexey Shchepin <alexey@process-one.net>
Sun, 14 Mar 2004 20:47:15 +0000 (20:47 +0000)
statistics

SVN Revision: 216

ChangeLog
src/web/ejabberd_web.erl

index c2680a5149c14c1574dcc49b20a201387f9f00e2..9e4fc820027264899786174d9a8dd99ff8a93d88 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-03-14  Alexey Shchepin  <alexey@sevcom.net>
+
+       * src/web/ejabberd_web.erl: Added interface for users listsing and
+       statistics
+
 2004-03-13  Alexey Shchepin  <alexey@sevcom.net>
 
        * src/web/ejabberd_web.erl: New interface for ACLs editing
index 0eebeb2283e5b123f7533fc1fa3f34bfe7ac34a7..518e19e62a46920d80f5efcd5c227bdc707b0c00 100644 (file)
@@ -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))])
+              ])
+          
+         ])].