MUC: Assign priorities to config form hooks so they have a consistent order on each...
[prosody.git] / plugins / mod_admin_telnet.lua
index c3434d3323bfb5c65ed9da51ea1a0d37db0a2ce9..4f11d8eacebb5b08f5bdc547c06ccb94be12e1e0 100644 (file)
@@ -336,6 +336,43 @@ function def_env.server:memory()
        return true, "OK";
 end
 
+def_env.timer = {};
+
+function def_env.timer:info()
+       local socket = require "socket";
+       local print = self.session.print;
+       local add_task = require"util.timer".add_task;
+       local h, params = add_task.h, add_task.params;
+       if h then
+               print("-- util.timer");
+               for i, id in ipairs(h.ids) do
+                       if not params[id] then
+                               print(os.date("%F %T", h.priorities[i]), h.items[id]);
+                       elseif not params[id].callback then
+                               print(os.date("%F %T", h.priorities[i]), h.items[id], unpack(params[id]));
+                       else
+                               print(os.date("%F %T", h.priorities[i]), params[id].callback, unpack(params[id]));
+                       end
+               end
+       end
+       if server.event_base then
+               local count = 0;
+               for k, v in pairs(debug.getregistry()) do
+                       if type(v) == "function" and v.callback and v.callback == add_task._on_timer then
+                               count = count + 1;
+                       end
+               end
+               print(count .. " libevent callbacks");
+       end
+       if h then
+               local next_time = h:peek();
+               if next_time then
+                       return true, os.date("Next event at %F %T (in %%.6fs)", next_time):format(next_time - socket.gettime());
+               end
+       end
+       return true;
+end
+
 def_env.module = {};
 
 local function get_hosts_set(hosts, module)
@@ -543,7 +580,13 @@ local function get_jid(session)
        if session.username then
                return session.full_jid or jid_join(session.username, session.host, session.resource);
        end
-       return "(unknown)";
+
+       local conn = session.conn;
+       local ip = session.ip or "?";
+       local clientport = conn and conn:clientport() or "?";
+       local serverip = conn and conn.server and conn:server():ip() or "?";
+       local serverport = conn and conn:serverport() or "?"
+       return jid_join("["..ip.."]:"..clientport, session.host or "["..serverip.."]:"..serverport);
 end
 
 local function show_c2s(callback)
@@ -551,24 +594,18 @@ local function show_c2s(callback)
        c2s:sort(function(a, b)
                if a.host == b.host then
                        if a.username == b.username then
-                               return a.resource or "" > b.resource or "";
+                               return (a.resource or "") > (b.resource or "");
                        end
-                       return a.username or "" > b.username or "";
+                       return (a.username or "") > (b.username or "");
                end
-               return a.host or "" > b.host or "";
+               return (a.host or "") > (b.host or "");
        end):map(function (session)
                callback(get_jid(session), session)
        end);
 end
 
 function def_env.c2s:count(match_jid)
-       local count = 0;
-       show_c2s(function (jid, session)
-               if (not match_jid) or jid:match(match_jid) then
-                       count = count + 1;
-               end
-       end);
-       return true, "Total: "..count.." clients";
+       return true, "Total: "..  iterators.count(values(module:shared"/*/c2s/sessions")) .." clients";
 end
 
 function def_env.c2s:show(match_jid, annotate)
@@ -971,7 +1008,7 @@ function def_env.muc:room(room_jid)
        if not room_name then
                return room_name, host;
        end
-       local room_obj = hosts[host].modules.muc.rooms[room_jid];
+       local room_obj = hosts[host].modules.muc.get_room_from_jid(room_jid);
        if not room_obj then
                return nil, "No such room: "..room_jid;
        end
@@ -985,8 +1022,8 @@ function def_env.muc:list(host)
        end
        local print = self.session.print;
        local c = 0;
-       for name in keys(host_session.modules.muc.rooms) do
-               print(name);
+       for room in host_session.modules.muc.each_room() do
+               print(room.jid);
                c = c + 1;
        end
        return true, c.." rooms";
@@ -1151,7 +1188,7 @@ function printbanner(session)
        if option == "short" or option == "full" then
        session.print("Welcome to the Prosody administration console. For a list of commands, type: help");
        session.print("You may find more help on using this console in our online documentation at ");
-       session.print("http://prosody.im/doc/console\n");
+       session.print("https://prosody.im/doc/console\n");
        end
        if option ~= "short" and option ~= "full" and option ~= "graphic" then
                session.print(option);