-
Notifications
You must be signed in to change notification settings - Fork 2
/
snub-cron.js
36 lines (32 loc) · 956 Bytes
/
snub-cron.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const cron = require('node-cron');
module.exports = function (config) {
config = Object.assign(
{
driftMs: 1000 * 60,
},
config || {}
);
var tracked = {};
return function (snub) {
snub.cron = function (namespace, cronExpression, cronOptions) {
cronOptions = Object.assign({}, cronOptions, { scheduled: true });
tracked[namespace] = {
namespace,
cronExpression,
cron: cron.schedule(cronExpression, (_) => {
snub.redis.sadd('_snub-cron:schedules', namespace);
setTimeout(async (_) => {
if (!(await snub.redis.srem('_snub-cron:schedules', namespace)))
return;
snub.mono('cron:' + namespace).send();
}, config.driftMs);
}),
};
};
snub.cronDestroy = function (namespace) {
if (!tracked[namespace]) return;
tracked[namespace].cron.destroy();
delete tracked[namespace];
};
};
};