util/watchdog.lua
author Kim Alvefur <zash@zash.se>
Thu, 28 Mar 2024 15:39:59 +0100
changeset 13473 f9171624fd03
parent 12979 d10957394a3c
permissions -rw-r--r--
MUC: Fix legacy hats (thanks nicoco) Why do we not have tests for this?
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
};