mod_cron: Allow configuring various "internal" delay parameters
authorMatthew Wild <mwild1@gmail.com>
Tue, 20 Feb 2024 17:31:17 +0000
changeset 13425 92301fa7a673
parent 13424 7dc7e2e15b2a
child 13426 3c80124452ed
mod_cron: Allow configuring various "internal" delay parameters Notably, it is now possible to add a randomized spread factor to the check interval.
plugins/mod_cron.lua
--- a/plugins/mod_cron.lua	Sat Feb 17 19:07:57 2024 +0100
+++ b/plugins/mod_cron.lua	Tue Feb 20 17:31:17 2024 +0000
@@ -2,6 +2,10 @@
 
 local async = require("prosody.util.async");
 
+local cron_initial_delay = module:get_option_number("cron_initial_delay", 1);
+local cron_check_delay = module:get_option_number("cron_check_delay", 3600);
+local cron_spread_factor = module:get_option_number("cron_spread_factor", 0);
+
 local active_hosts = {}
 
 function module.add_host(host_module)
@@ -46,10 +50,14 @@
 	task:save(started_at);
 end
 
+local function spread(t, factor)
+	return t * (1 - factor + 2*factor*math.random());
+end
+
 local task_runner = async.runner(run_task);
-scheduled = module:add_timer(1, function()
+scheduled = module:add_timer(cron_initial_delay, function()
 	module:log("info", "Running periodic tasks");
-	local delay = 3600;
+	local delay = spread(cron_check_delay, cron_spread_factor);
 	for host in pairs(active_hosts) do
 		module:log("debug", "Running periodic tasks for host %s", host);
 		for _, task in ipairs(module:context(host):get_host_items("task")) do task_runner:run(task); end