@loopback/cron
Version:
Schedule tasks using cron-like syntax
56 lines (50 loc) • 1.42 kB
text/typescript
// Copyright IBM Corp. and LoopBack contributors 2020. All Rights Reserved.
// Node module: @loopback/cron
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
import {
BindingScope,
Component,
ContextTags,
extensionPoint,
extensions,
Getter,
lifeCycleObserver,
LifeCycleObserver,
} from '@loopback/core';
import debugFactory from 'debug';
import {CronBindings} from './keys';
import {CronJob, CRON_JOB_SCHEDULER} from './types';
const debug = debugFactory('loopback:cron');
/**
* The CronComponent manages cron jobs. It serves as an extension point for
* cron jobs.
*/
(CRON_JOB_SCHEDULER, {
tags: {[ContextTags.KEY]: CronBindings.COMPONENT},
scope: BindingScope.SINGLETON,
})
('cronJob')
export class CronComponent implements Component, LifeCycleObserver {
constructor(() public readonly getJobs: Getter<CronJob[]>) {}
async start() {
const jobs = await this.getJobs();
for (const job of jobs) {
debug('[start] job', job.name);
if (!job.running) {
debug('starting job', job.name);
job.start();
}
}
}
async stop() {
const jobs = await this.getJobs();
for (const job of jobs) {
debug('[stop] job', job.name);
if (job.running) {
debug('stopping job', job.name);
job.stop();
}
}
}
}