mod_admin_telnet: Make timer:info command more robust
authorKim Alvefur <zash@zash.se>
Wed, 23 Dec 2015 10:42:14 +0000 (11:42 +0100)
committerKim Alvefur <zash@zash.se>
Wed, 23 Dec 2015 10:42:14 +0000 (11:42 +0100)
plugins/mod_admin_telnet.lua

index aa7b10cb9c37b02d7862d319216e9c79624f91ef..02ba3ab0726859bae58410585a5a9172d19d47aa 100644 (file)
@@ -339,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