simple-job-scheduler
Version:
A simple job scheduling system written in TypeScript
38 lines • 2.73 kB
JavaScript
import { Logger } from 'simple-logging-system';
const logger = new Logger('Job');
export class Job {
constructor(name, runnable, intervalInMillis, cancelHandle) {
this.name = name;
this.runnable = runnable;
this.intervalInMillis = intervalInMillis;
this.cancelHandle = cancelHandle;
this.executionsCount = 0;
this.isCancelledState = false;
}
execute() {
try {
this.runnable(this);
this.executionsCount += 1;
}
catch (e) {
logger.error(`An error occurred while executing the job "${this.name}"`, e);
}
}
getExecutionsCount() {
return this.executionsCount;
}
isCancelled() {
return this.isCancelledState;
}
cancel() {
if (this.isCancelledState) {
logger.warn(`Trying to cancel an already cancelled job named "${this.name}"`);
return false;
}
logger.info(`Cancelling job "${this.name}" after ${this.executionsCount} executions.`);
this.isCancelledState = true;
return this.cancelHandle();
}
static get [Symbol.for("___CTOR_NAME___")]() { return "Job"; }
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSm9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9Kb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWpDLE1BQU0sT0FBTyxHQUFHO0lBS2QsWUFDVyxJQUFZLEVBQ1osUUFBNkIsRUFDN0IsZ0JBQXdCLEVBQ2hCLFlBQTJCO1FBSG5DLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFxQjtRQUM3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVE7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQWU7UUFFNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUk7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDO1NBQzNCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxvREFBb0QsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDOUUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLFdBQVcsSUFBSSxDQUFDLGVBQWUsY0FBYyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDOztDQUNGIn0=