UNPKG

gypsum

Version:

Simple and easy lightweight typescript server side framework on Node.js.

110 lines 4.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const unique_1 = require("tools-box/unique"); const timer_1 = require("./timer"); const logger_1 = require("./misc/logger"); const logger = new logger_1.Logger('job-manager'); const Jobs = {}; exports.JobsManger = { registerJob(parent, job) { let id = unique_1.Unique.Get(); Jobs[id] = { parent, job }; logger.info(`Job ${parent.name}.${job.__name} registered with id: ${id}`); if (job.event) { parent.emitter.on(job.event, (...args) => { job.triggered = true; if (job.interval && typeof job.interval === 'number') { if (job.timerId) clearInterval(job.timerId); job.timerId = setInterval(() => { if (job.paused) return; logger.info(`running Job ${parent.name}.${job.__name} with id: ${id}`); parent[job.__name](id, ...args); }, job.interval); } else { if (job.paused) return; parent[job.__name](id, ...args); } }); } if (job.interval && typeof job.interval === 'number') { job.timerId = setInterval(() => { if (job.paused) return; logger.info(`running job ${parent.name}.${job.__name} with id: ${id}`); parent[job.__name](id); }, job.interval); } Jobs[id] = { parent, job }; }, pauseJob(id) { if (Jobs.hasOwnProperty(id)) { logger.info(`pausing job ${Jobs[id].parent.name}.${Jobs[id].job.__name} with id: ${id}`); Jobs[id].job.paused = true; } }, resumeJob(id) { if (Jobs.hasOwnProperty(id)) { logger.info(`resuming job ${Jobs[id].parent.name}.${Jobs[id].job.__name} with id: ${id}`); Jobs[id].job.paused = false; } }, killJob(id) { if (Jobs.hasOwnProperty(id)) { logger.info(`killing job ${Jobs[id].parent.name}.${Jobs[id].job.__name} with id: ${id}`); if (Jobs[id].job.event) Jobs[id].parent.emitter.removeAllListeners(Jobs[id].job.event); if (Jobs[id].job.timerId) clearInterval(Jobs[id].job.timerId); Jobs[id].job.triggered = false; Jobs[id].job.timerId = null; Jobs[id].job.paused = false; Jobs[id] = null; delete Jobs[id]; } } }; timer_1.timerEmitter.on('timer', (timeData) => { for (let prop in Jobs) { let pros = Jobs[prop].job; if (pros.paused || (pros.event && !pros.triggered)) continue; if (pros.interval && typeof pros.interval !== 'number') { if (pros.interval.period === 'monthly') { pros.interval.days = pros.interval.days || [1]; if (pros.interval.days.indexOf(timeData.day) === -1) continue; if (pros.interval.time && pros.interval.time.length) { for (let t of pros.interval.time) if (t.hours === timeData.hours && t.minutes === timeData.minutes) { logger.info(`running job ${parent.name}.${pros.__name} with id: ${prop}`); Jobs[prop].parent[pros.__name](prop); } } } else if (pros.interval.period === 'weekly') { pros.interval.days = pros.interval.days || [0]; if (pros.interval.days.indexOf(timeData.weekDay) === -1) continue; if (pros.interval.time && pros.interval.time.length) { for (let t of pros.interval.time) if (t.hours === timeData.hours && t.minutes === timeData.minutes) { logger.info(`running job ${parent.name}.${pros.__name} with id: ${prop}`); Jobs[prop].parent[pros.__name](prop); } } } else if (pros.interval.time && pros.interval.time.length) { for (let t of pros.interval.time) if (t.hours === timeData.hours && t.minutes === timeData.minutes) { logger.info(`running job ${parent.name}.${pros.__name} with id: ${prop}`); Jobs[prop].parent[pros.__name](prop); } } } } }); //# sourceMappingURL=jobs-manager.js.map