Diff

plugins/mod_admin_telnet.lua @ 7014:298bfc768889

mod_admin_telnet: Make timer:info command more robust
author Kim Alvefur <zash@zash.se>
date Wed, 23 Dec 2015 11:42:14 +0100
parent 6988:329d5fb8a9d3
child 7036:f26debcae34e
line wrap: on
line diff
--- a/plugins/mod_admin_telnet.lua	Wed Dec 16 16:47:34 2015 +0000
+++ b/plugins/mod_admin_telnet.lua	Wed Dec 23 11:42:14 2015 +0100
@@ -339,31 +339,36 @@
 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