Skip to content

Commit f91c32b

Browse files
committed
Stop scheduled jobs on uncaught error.
1 parent 1a5c517 commit f91c32b

4 files changed

Lines changed: 20 additions & 8 deletions

File tree

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "berlin-lea-performance-monitor",
3-
"version": "1.6.0",
3+
"version": "1.7.0",
44
"author": "David Leclerc",
55
"main": "./src/index.ts",
66
"scripts": {

src/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { POLL, ONCE, BOT, ANALYZE, BOT_JOB_FREQUENCY } from './config/bot';
1313
import logger from './logger';
1414
import AnalysisJob from './models/jobs/AnalysisJob';
1515
import TimeDuration from './models/TimeDuration';
16-
import { LOGS_FILEPATH } from './config/file';
1716

1817

1918

@@ -79,6 +78,9 @@ if ([Environment.Development, Environment.Production].includes(ENV)) {
7978
execute()
8079
.catch((err) => {
8180
logger.fatal(err, `Stopping everything. Uncaught error:`);
81+
82+
// Stop all previously scheduled jobs
83+
JobScheduler.stopAll();
8284
});
8385
}
8486

src/models/jobs/JobScheduler.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import cron, { ScheduleOptions, validate } from 'node-cron';
1+
import { schedule, ScheduledTask, ScheduleOptions, validate } from 'node-cron';
22
import Job from './Job';
33
import logger from '../../logger';
44
import { LogMessage } from '../../constants';
@@ -12,8 +12,10 @@ interface ScheduleArgs {
1212
class JobScheduler {
1313
private static instance?: JobScheduler;
1414

15-
private constructor() {
15+
protected tasks: ScheduledTask[];
1616

17+
private constructor() {
18+
this.tasks = [];
1719
}
1820

1921
public static getInstance() {
@@ -23,13 +25,13 @@ class JobScheduler {
2325
return this.instance;
2426
}
2527

26-
public schedule ({ job, expression, options }: ScheduleArgs) {
28+
public schedule({ job, expression, options }: ScheduleArgs) {
2729
if (!expression) throw new Error('Missing cron expression.');
2830
if (!validate(expression)) throw new Error('Invalid cron expression.');
2931

3032
logger.debug(`Scheduling job '${job.getName()}'...`);
3133

32-
cron.schedule(
34+
const task = schedule(
3335
expression,
3436
() => {
3537
logger.debug(`Executing job '${job.getName()}'...`);
@@ -49,6 +51,14 @@ class JobScheduler {
4951
);
5052

5153
logger.debug(`Scheduled job '${job.getName()}'.`);
54+
55+
this.tasks.push(task);
56+
}
57+
58+
public stopAll() {
59+
this.tasks.forEach((task: ScheduledTask) => {
60+
task.stop();
61+
});
5262
}
5363
}
5464

0 commit comments

Comments
 (0)