simple-job-scheduler
Version:
A simple job scheduling system written in TypeScript
50 lines • 4.57 kB
JavaScript
;
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