UNPKG

simple-job-scheduler

Version:

A simple job scheduling system written in TypeScript

50 lines 4.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Scheduler = void 0; const simple_logging_system_1 = require("simple-logging-system"); const Job_1 = require("./Job"); const logger = new simple_logging_system_1.Logger('Scheduler'); class Scheduler { constructor() { this.indexedJobsByName = new Map(); } schedule(jobName, runnable, intervalInMillis) { const existingJob = this.indexedJobsByName.get(jobName); if (existingJob !== undefined) { logger.warn(`There is already a job named "${jobName}" running, the new job will not be scheduled.`); return existingJob.job; } logger.info(`Scheduling job "${jobName}" that is running every ${intervalInMillis}ms.`); const newJob = new Job_1.Job(jobName, runnable, intervalInMillis, () => this.cancelInternal(jobName)); const intervalId = setInterval(() => newJob.execute(), intervalInMillis); this.indexedJobsByName.set(jobName, { job: newJob, intervalId }); return newJob; } cancel(jobName) { const existingJob = this.indexedJobsByName.get(jobName); if (existingJob === undefined) { logger.warn(`Trying to cancel job "${jobName}", but it does not exist.`); return false; } return existingJob.job.cancel(); } cancelAll() { this.indexedJobsByName.forEach((jobContainer) => jobContainer.job.cancel()); } runningJobs() { return Array.from(this.indexedJobsByName.values()).map((jobContainer) => jobContainer.job); } cancelInternal(jobName) { const existingJob = this.indexedJobsByName.get(jobName); if (existingJob === undefined) { logger.warn(`Trying to cancel job "${jobName}", but it does not exist.`); return false; } clearInterval(existingJob.intervalId); this.indexedJobsByName.delete(jobName); return true; } static get [Symbol.for("___CTOR_NAME___")]() { return "Scheduler"; } } exports.Scheduler = Scheduler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9TY2hlZHVsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQStDO0FBQy9DLCtCQUE0QjtBQUU1QixNQUFNLE1BQU0sR0FBRyxJQUFJLDhCQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFPdkMsTUFBYSxTQUFTO0lBR3BCO1FBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQzNELENBQUM7SUFFRCxRQUFRLENBQUMsT0FBZSxFQUFFLFFBQTZCLEVBQUUsZ0JBQXdCO1FBQy9FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLE9BQU8sK0NBQStDLENBQUMsQ0FBQztZQUNyRyxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUM7U0FDeEI7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixPQUFPLDJCQUEyQixnQkFBZ0IsS0FBSyxDQUFDLENBQUM7UUFDeEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBZTtRQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixPQUFPLDJCQUEyQixDQUFDLENBQUM7WUFDekUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQWU7UUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsT0FBTywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztDQUNGO0FBakRELDhCQWlEQyJ9