UNPKG

@pushrocks/smarttime

Version:

handle time in smart ways

71 lines 5.59 kB
import * as plugins from './smarttime.plugins.js'; import { CronJob } from './smarttime.classes.cronjob.js'; import { getMilliSecondsAsHumanReadableString } from './smarttime.units.js'; export class CronManager { constructor() { this.status = 'stopped'; this.cronjobs = new plugins.lik.ObjectMap(); } addCronjob(cronIdentifierArg, cronFunctionArg) { const newCronJob = new CronJob(this, cronIdentifierArg, cronFunctionArg); this.cronjobs.add(newCronJob); if (this.status === 'started') { newCronJob.start(); } return newCronJob; } removeCronjob(cronjobArg) { cronjobArg.stop(); this.cronjobs.remove(cronjobArg); } /** * starts the cronjob */ start() { if (this.status !== 'started') { this.status = 'started'; for (const cronJob of this.cronjobs.getArray()) { cronJob.start(); } const runCronCycle = async () => { this.executionTimeout = new plugins.smartdelay.Timeout(0); do { let nextRunningCronjob; for (const cronJob of this.cronjobs.getArray()) { cronJob.checkExecution(); if (!nextRunningCronjob || cronJob.getTimeToNextExecution() < nextRunningCronjob.getTimeToNextExecution()) { nextRunningCronjob = cronJob; } } if (nextRunningCronjob) { this.executionTimeout = new plugins.smartdelay.Timeout(nextRunningCronjob.getTimeToNextExecution()); console.log(`Next CronJob scheduled in ${getMilliSecondsAsHumanReadableString(this.executionTimeout.getTimeLeft())}`); } else { this.executionTimeout = new plugins.smartdelay.Timeout(1000); console.log('no cronjobs specified! Checking again in 1 second'); } await this.executionTimeout.promise; } while (this.status === 'started'); }; runCronCycle(); } } /** * stops all cronjobs */ stop() { if (this.status === 'started') { this.status = 'stopped'; this.executionTimeout.cancel(); } else { console.log(`You tried to stop a CronManager that was not actually started.`); } for (const cron of this.cronjobs.getArray()) { cron.stop(); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHRpbWUuY2xhc3Nlcy5jcm9ubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFNUUsTUFBTSxPQUFPLFdBQVc7SUFNdEI7UUFITyxXQUFNLEdBQTBCLFNBQVMsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBVyxDQUFDO0lBRXhDLENBQUM7SUFFVCxVQUFVLENBQUMsaUJBQXlCLEVBQUUsZUFBNkI7UUFDeEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0IsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxVQUFtQjtRQUN0QyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM5QyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDakI7WUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELEdBQUc7b0JBQ0QsSUFBSSxrQkFBMkIsQ0FBQztvQkFDaEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFO3dCQUM5QyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3pCLElBQ0UsQ0FBQyxrQkFBa0I7NEJBQ25CLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFLEVBQzlFOzRCQUNBLGtCQUFrQixHQUFHLE9BQU8sQ0FBQzt5QkFDOUI7cUJBQ0Y7b0JBQ0QsSUFBSSxrQkFBa0IsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQ3BELGtCQUFrQixDQUFDLHNCQUFzQixFQUFFLENBQzVDLENBQUM7d0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCw2QkFBNkIsb0NBQW9DLENBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FDcEMsRUFBRSxDQUNKLENBQUM7cUJBQ0g7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzdELE9BQU8sQ0FBQyxHQUFHLENBQUMsbURBQW1ELENBQUMsQ0FBQztxQkFDbEU7b0JBRUQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2lCQUNyQyxRQUFRLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3RDLENBQUMsQ0FBQztZQUNGLFlBQVksRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2hDO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7U0FDL0U7UUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBQ0YifQ==