util/watchdog.lua
author Kim Alvefur <zash@zash.se>
Wed, 27 Mar 2024 19:33:11 +0100
changeset 13471 c2a476f4712a
parent 12979 d10957394a3c
permissions -rw-r--r--
util.startup: Fix exiting on pidfile trouble prosody.shutdown() relies on prosody.main_thread, which has not been set yet at this point. Doing a clean shutdown might actually be harmful in case it tears down things set up by the conflicting Prosody, such as the very pidfile we were looking at. Thanks again SigmaTel71 for noticing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12551
diff changeset
     1
local timer = require "prosody.util.timer";
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
local setmetatable = setmetatable;
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
6780
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
     4
local _ENV = nil;
8558
4f0f5b49bb03 vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents: 6780
diff changeset
     5
-- luacheck: std none
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
local watchdog_methods = {};
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
local watchdog_mt = { __index = watchdog_methods };
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
6780
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
    10
local function new(timeout, callback)
12549
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    11
	local watchdog = setmetatable({
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    12
		timeout = timeout;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    13
		callback = callback;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    14
		timer_id = nil;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    15
	}, watchdog_mt);
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    16
12550
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12549
diff changeset
    17
	watchdog:reset(); -- Kick things off
12549
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    18
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
	return watchdog;
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
end
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
12551
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12550
diff changeset
    22
function watchdog_methods:reset(new_timeout)
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12550
diff changeset
    23
	if new_timeout then
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12550
diff changeset
    24
		self.timeout = new_timeout;
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12550
diff changeset
    25
	end
12549
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    26
	if self.timer_id then
12550
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12549
diff changeset
    27
		timer.reschedule(self.timer_id, self.timeout+1);
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12549
diff changeset
    28
	else
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12549
diff changeset
    29
		self.timer_id = timer.add_task(self.timeout+1, function ()
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12549
diff changeset
    30
			return self:callback();
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12549
diff changeset
    31
		end);
12549
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    32
	end
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
end
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
function watchdog_methods:cancel()
12549
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    36
	if self.timer_id then
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    37
		timer.stop(self.timer_id);
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    38
		self.timer_id = nil;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8558
diff changeset
    39
	end
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
end
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
6780
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
    42
return {
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
    43
	new = new;
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
    44
};