Software /
code /
prosody
Annotate
util/watchdog.lua @ 13069:45caa4e43775
mod_http: Fix reliance on previous tostring() format of util.set
a863e4237b91 unintentionally changed the format of HTTP CORS headers,
which were apparently relying on the output of tostring(), which it
shouldn't have.
Explicitly serializing it this time.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 10 Apr 2023 11:50:27 +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 }; |