aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2023-10-22 18:58:02 +0200
committerKim Alvefur <zash@zash.se>2023-10-22 18:58:02 +0200
commit7b882e440590cd8a93b34ee00809ab742fc0c60d (patch)
treeae41a7cc883ba32fdc9f85dd7fefa05053f39530
parent76bf26057e3bf6fe5620114bc438512bba9e9afe (diff)
downloadprosody-7b882e440590cd8a93b34ee00809ab742fc0c60d.tar.gz
prosody-7b882e440590cd8a93b34ee00809ab742fc0c60d.zip
mod_cron: Make task frequencies configurable in overly generic manner
Requested feature for many modules, notably MAM and file sharing.
-rw-r--r--CHANGES1
-rw-r--r--plugins/mod_cron.lua9
-rw-r--r--teal-src/prosody/plugins/mod_cron.tl10
3 files changed, 10 insertions, 10 deletions
diff --git a/CHANGES b/CHANGES
index 1bbb29de..2c55ec76 100644
--- a/CHANGES
+++ b/CHANGES
@@ -53,6 +53,7 @@ TRUNK
- Moved all modules into the Lua namespace `prosody.`
- Forwarded header from RFC 7239 supported, disabled by default
- mod_http_file_share now uses roles framework, affecting access from e.g. components
+- Intervals of mod_cron managed periodic jobs made configurable
## Removed
diff --git a/plugins/mod_cron.lua b/plugins/mod_cron.lua
index 32810b35..3b9838ec 100644
--- a/plugins/mod_cron.lua
+++ b/plugins/mod_cron.lua
@@ -2,8 +2,6 @@ module:set_global();
local async = require("prosody.util.async");
-local periods = { hourly = 3600; daily = 86400; weekly = 7 * 86400 }
-
local active_hosts = {}
function module.add_host(host_module)
@@ -29,6 +27,7 @@ function module.add_host(host_module)
if task.id == nil then
task.id = event.source.name .. "/" .. task.name:gsub("%W", "_"):lower();
end
+ task.period = host_module:get_option_period(task.id:gsub("/", "_") .. "_period", "1" .. task.when, 60, 86400 * 7 * 53);
task.restore = restore_task;
task.save = save_task;
module:log("debug", "%s task %s added", task.when, task.id);
@@ -48,13 +47,13 @@ function module.add_host(host_module)
end
end
-local function should_run(when, last)
- return not last or last + periods[when] * 0.995 <= os.time()
+local function should_run(task, last)
+ return not last or last + task.period * 0.995 <= os.time()
end
local function run_task(task)
task:restore();
- if not should_run(task.when, task.last) then
+ if not should_run(task, task.last) then
return
end
local started_at = os.time();
diff --git a/teal-src/prosody/plugins/mod_cron.tl b/teal-src/prosody/plugins/mod_cron.tl
index 6c69ef7d..c5a02cc9 100644
--- a/teal-src/prosody/plugins/mod_cron.tl
+++ b/teal-src/prosody/plugins/mod_cron.tl
@@ -18,6 +18,7 @@ local record task_spec
id : string -- unique id
name : string -- name or short description
when : frequency
+ period : number
last : integer
run : function (task_spec, integer)
save : function (task_spec, integer)
@@ -29,8 +30,6 @@ local record task_event
item : task_spec
end
-local periods : { frequency : integer } = { hourly = 3600, daily = 86400, weekly = 7*86400 }
-
local active_hosts : { string : boolean } = { }
function module.add_host(host_module : moduleapi)
@@ -56,6 +55,7 @@ function module.add_host(host_module : moduleapi)
if task.id == nil then
task.id = event.source.name .. "/" .. task.name:gsub("%W", "_"):lower();
end
+ task.period = host_module:get_option_period(task.id:gsub("/", "_") .. "_period", "1" .. task.when, 60, 86400*7*53);
task.restore = restore_task;
task.save = save_task;
module:log("debug", "%s task %s added", task.when, task.id);
@@ -75,13 +75,13 @@ function module.add_host(host_module : moduleapi)
end
end
-local function should_run(when : frequency, last : integer) : boolean
- return not last or last + periods[when]*0.995 <= os.time();
+local function should_run(task : task_spec, last : integer) : boolean
+ return not last or last + task.period * 0.995 <= os.time();
end
local function run_task(task : task_spec)
task:restore();
- if not should_run(task.when, task.last) then
+ if not should_run(task, task.last) then
return;
end
local started_at = os.time();