author | Matthew Wild <mwild1@gmail.com> |
Fri, 23 Feb 2024 12:14:51 +0000 | |
changeset 13435 | 4698f1e36e02 |
parent 12979 | d10957394a3c |
permissions | -rw-r--r-- |
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 |
}; |