Run some tasks periodically from the main process.

This reduces reliance on crontab jobs.
This commit is contained in:
D. Berge
2023-10-14 20:04:52 +02:00
parent cdd96a4bc7
commit d7ab4eec7c
4 changed files with 64 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ async function main () {
try { try {
const api = require('./api'); const api = require('./api');
const ws = require('./ws'); const ws = require('./ws');
const periodicTasks = require('./periodic-tasks').init();
const { fork } = require('child_process'); const { fork } = require('child_process');
@@ -22,6 +23,7 @@ async function main () {
INFO("Versions:", versions); INFO("Versions:", versions);
periodicTasks.start();
const eventManagerPath = [__dirname, "events"].join("/"); const eventManagerPath = [__dirname, "events"].join("/");
const eventManager = fork(eventManagerPath, /*{ stdio: 'ignore' }*/); const eventManager = fork(eventManagerPath, /*{ stdio: 'ignore' }*/);

View File

@@ -0,0 +1,38 @@
const tasks = require('./tasks');
const { ALERT, ERROR, WARNING, NOTICE, INFO, DEBUG } = require('DOUGAL_ROOT/debug')(__filename);
function init () {
const iids = [];
function start () {
INFO("Initialising %d periodic tasks", tasks.length);
for (let t of tasks) {
const iid = setInterval(t.task, t.timeout);
iids.push(iid);
}
return iids;
};
function stop () {
INFO("Stopping %d periodic tasks", iids.length);
for (let iid of iids) {
clearInterval(iid);
}
}
async function cleanup () {
stop();
DEBUG("Cleaning up %d periodic tasks", tasks.length);
for (let t of tasks) {
if (t.cleanup) {
await t.cleanup();
}
}
}
return { start, stop, cleanup, iids };
}
module.exports = {
init
};

View File

@@ -0,0 +1,4 @@
module.exports = [
require('./purge-notifications')
];

View File

@@ -0,0 +1,20 @@
const { purge } = require('../../lib/db/notify');
const { ALERT, ERROR, WARNING, NOTICE, INFO, DEBUG } = require('DOUGAL_ROOT/debug')(__filename);
const timeout = 120*1000; // 2 minutes
function task () {
DEBUG("Running task");
purge();
}
async function cleanup () {
DEBUG("Running cleanup");
await purge();
}
module.exports = {
task,
timeout,
cleanup
};