Software /
code /
prosody
Annotate
util/watchdog.lua @ 13235:dbd7a6b09ada
util.datamanager: Close file handle when done using it
It gets closed eventually but at high load they could potentially
lead to reaching FD limits faster.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 21 Jul 2023 18:28:54 +0200 |
parent | 12975:d10957394a3c |
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 }; |