File

util/watchdog.lua @ 10460:5ce6cbb5ce6a

mod_http: Log served URLs at 'info' level These are similar to the "activated service" messages from portmanager and similarily useful for the service admin to know even if they're not debugging anything.
author Kim Alvefur <zash@zash.se>
date Fri, 29 Nov 2019 21:30:08 +0100
parent 8555:4f0f5b49bb03
child 12545:5059a639f61e
line wrap: on
line source

local timer = require "util.timer";
local setmetatable = setmetatable;
local os_time = os.time;

local _ENV = nil;
-- luacheck: std none

local watchdog_methods = {};
local watchdog_mt = { __index = watchdog_methods };

local function new(timeout, callback)
	local watchdog = setmetatable({ timeout = timeout, last_reset = os_time(), callback = callback }, watchdog_mt);
	timer.add_task(timeout+1, function (current_time)
		local last_reset = watchdog.last_reset;
		if not last_reset then
			return;
		end
		local time_left = (last_reset + timeout) - current_time;
		if time_left < 0 then
			return watchdog:callback();
		end
		return time_left + 1;
	end);
	return watchdog;
end

function watchdog_methods:reset()
	self.last_reset = os_time();
end

function watchdog_methods:cancel()
	self.last_reset = nil;
end

return {
	new = new;
};