UNPKG

simple-job-scheduler

Version:

A simple job scheduling system written in TypeScript

46 lines 4.45 kB
import { Logger } from 'simple-logging-system'; import { Job } from './Job'; const logger = new Logger('Scheduler'); export 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(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"; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9TY2hlZHVsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFPdkMsTUFBTSxPQUFPLFNBQVM7SUFHcEI7UUFDRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDM0QsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLEVBQUUsUUFBNkIsRUFBRSxnQkFBd0I7UUFDL0UsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsT0FBTywrQ0FBK0MsQ0FBQyxDQUFDO1lBQ3JHLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQztTQUN4QjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLE9BQU8sMkJBQTJCLGdCQUFnQixLQUFLLENBQUMsQ0FBQztRQUN4RixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNoRyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFlO1FBQ3BCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLE9BQU8sMkJBQTJCLENBQUMsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBZTtRQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixPQUFPLDJCQUEyQixDQUFDLENBQUM7WUFDekUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0NBQ0YifQ==