Annotate

util/watchdog.lua @ 13196:eca44e058eed

util.human.io: Use tail call in test to get correct line numbers This is probably not guaranteed to work and might vary with Lua version, but it's good enough for me to get accurate line numbers out of Busted that don't all point to the test() function.
author Kim Alvefur <zash@zash.se>
date Sun, 16 Jul 2023 18:42:58 +0200
parent 12975:d10957394a3c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12547
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
6777
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;
8555
4f0f5b49bb03 vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents: 6777
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
6777
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)
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
11 local watchdog = setmetatable({
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
12 timeout = timeout;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
13 callback = callback;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
14 timer_id = nil;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
15 }, watchdog_mt);
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
16
12546
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
diff changeset
17 watchdog:reset(); -- Kick things off
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
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
12547
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12546
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: 12546
diff changeset
23 if new_timeout then
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12546
diff changeset
24 self.timeout = new_timeout;
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12546
diff changeset
25 end
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
26 if self.timer_id then
12546
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
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: 12545
diff changeset
28 else
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
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: 12545
diff changeset
30 return self:callback();
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
diff changeset
31 end);
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
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()
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
36 if self.timer_id then
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
37 timer.stop(self.timer_id);
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
38 self.timer_id = nil;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
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
6777
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 };