Merge 0.10->trunk
[prosody.git] / plugins / mod_admin_telnet.lua
index 7aea28ba659250cf2044a63bca0d1090fe1d23b3..02ba3ab0726859bae58410585a5a9172d19d47aa 100644 (file)
@@ -282,6 +282,8 @@ end
 -- Session environment --
 -- Anything in def_env will be accessible within the session as a global variable
 
+--luacheck: ignore 212/self
+
 def_env.server = {};
 
 function def_env.server:insane_reload()
@@ -337,31 +339,36 @@ 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;
-       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]));
+       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 == add_task._on_timer then
+                       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
-       local next_time = h:peek();
-       if next_time then
-               return true, os.date("Next event at %F %T", next_time);
+       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
@@ -1125,6 +1132,33 @@ function def_env.dns:cache()
        return true, "Cache:\n"..tostring(dns.cache())
 end
 
+def_env.http = {};
+
+function def_env.http:list()
+       local print = self.session.print;
+
+       for host in pairs(prosody.hosts) do
+               local http_apps = modulemanager.get_items("http-provider", host);
+               if #http_apps > 0 then
+                       local http_host = module:context(host):get_option("http_host");
+                       print("HTTP endpoints on "..host..(http_host and (" (using "..http_host.."):") or ":"));
+                       for _, provider in ipairs(http_apps) do
+                               local url = module:context(host):http_url(provider.name);
+                               print("", url);
+                       end
+                       print("");
+               end
+       end
+
+       local default_host = module:get_option("http_default_host");
+       if not default_host then
+               print("HTTP requests to unknown hosts will return 404 Not Found");
+       else
+               print("HTTP requests to unknown hosts will be handled by "..default_host);
+       end
+       return true;
+end
+
 -------------
 
 function printbanner(session)