@tryghost/job-manager 0.8.13 → 0.8.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/job-manager.js +11 -16
- package/package.json +4 -3
package/lib/job-manager.js
CHANGED
|
@@ -3,7 +3,8 @@ const fastq = require('fastq');
|
|
|
3
3
|
const later = require('@breejs/later');
|
|
4
4
|
const Bree = require('bree');
|
|
5
5
|
const pWaitFor = require('p-wait-for');
|
|
6
|
-
const {
|
|
6
|
+
const {UnhandledJobError, IncorrectUsageError} = require('@tryghost/errors');
|
|
7
|
+
const logging = require('@tryghost/logging');
|
|
7
8
|
const isCronExpression = require('./is-cron-expression');
|
|
8
9
|
const assembleBreeJob = require('./assemble-bree-job');
|
|
9
10
|
|
|
@@ -28,11 +29,10 @@ const handler = (error, result) => {
|
|
|
28
29
|
class JobManager {
|
|
29
30
|
/**
|
|
30
31
|
* @param {Object} options
|
|
31
|
-
* @param {Object} [options.logging] - custom logging handler, defaults to console
|
|
32
32
|
* @param {Function} [options.errorHandler] - custom job error handler
|
|
33
33
|
* @param {Function} [options.workerMessageHandler] - custom message handler coming from workers
|
|
34
34
|
*/
|
|
35
|
-
constructor({
|
|
35
|
+
constructor({errorHandler, workerMessageHandler}) {
|
|
36
36
|
this.queue = fastq(this, worker, 1);
|
|
37
37
|
|
|
38
38
|
this.bree = new Bree({
|
|
@@ -43,8 +43,6 @@ class JobManager {
|
|
|
43
43
|
errorHandler: errorHandler,
|
|
44
44
|
workerMessageHandler: workerMessageHandler
|
|
45
45
|
});
|
|
46
|
-
|
|
47
|
-
this.logging = logging;
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
/**
|
|
@@ -60,7 +58,7 @@ class JobManager {
|
|
|
60
58
|
*/
|
|
61
59
|
addJob({name, at, job, data, offloaded = true}) {
|
|
62
60
|
if (offloaded) {
|
|
63
|
-
|
|
61
|
+
logging.info('Adding offloaded job to the queue');
|
|
64
62
|
let schedule;
|
|
65
63
|
|
|
66
64
|
if (!name) {
|
|
@@ -86,18 +84,18 @@ class JobManager {
|
|
|
86
84
|
});
|
|
87
85
|
}
|
|
88
86
|
|
|
89
|
-
|
|
87
|
+
logging.info(`Scheduling job ${name} at ${at}. Next run on: ${later.schedule(schedule).next()}`);
|
|
90
88
|
} else if (at !== undefined) {
|
|
91
|
-
|
|
89
|
+
logging.info(`Scheduling job ${name} at ${at}`);
|
|
92
90
|
} else {
|
|
93
|
-
|
|
91
|
+
logging.info(`Scheduling job ${name} to run immediately`);
|
|
94
92
|
}
|
|
95
93
|
|
|
96
94
|
const breeJob = assembleBreeJob(at, job, data, name);
|
|
97
95
|
this.bree.add(breeJob);
|
|
98
96
|
return this.bree.start(name);
|
|
99
97
|
} else {
|
|
100
|
-
|
|
98
|
+
logging.info('Adding one off inline job to the queue');
|
|
101
99
|
|
|
102
100
|
this.queue.push(async () => {
|
|
103
101
|
try {
|
|
@@ -109,10 +107,7 @@ class JobManager {
|
|
|
109
107
|
} catch (err) {
|
|
110
108
|
// NOTE: each job should be written in a safe way and handle all errors internally
|
|
111
109
|
// if the error is caught here jobs implementaton should be changed
|
|
112
|
-
|
|
113
|
-
level: 'critical',
|
|
114
|
-
errorType: 'UnhandledJobError',
|
|
115
|
-
message: 'Processed job threw an unhandled error',
|
|
110
|
+
logging.error(new UnhandledJobError({
|
|
116
111
|
context: (typeof job === 'function') ? 'function' : job,
|
|
117
112
|
err
|
|
118
113
|
}));
|
|
@@ -147,11 +142,11 @@ class JobManager {
|
|
|
147
142
|
return;
|
|
148
143
|
}
|
|
149
144
|
|
|
150
|
-
|
|
145
|
+
logging.warn('Waiting for busy job queue');
|
|
151
146
|
|
|
152
147
|
await pWaitFor(() => this.queue.idle() === true, options);
|
|
153
148
|
|
|
154
|
-
|
|
149
|
+
logging.warn('Job queue finished');
|
|
155
150
|
}
|
|
156
151
|
}
|
|
157
152
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tryghost/job-manager",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.17",
|
|
4
4
|
"repository": "https://github.com/TryGhost/Utils/tree/main/packages/job-manager",
|
|
5
5
|
"author": "Ghost Foundation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@sinonjs/fake-timers": "8.1.0",
|
|
23
23
|
"c8": "7.10.0",
|
|
24
|
-
"date-fns": "2.
|
|
24
|
+
"date-fns": "2.27.0",
|
|
25
25
|
"delay": "5.0.0",
|
|
26
26
|
"mocha": "9.1.3",
|
|
27
27
|
"should": "13.2.3",
|
|
@@ -29,10 +29,11 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@breejs/later": "^4.0.2",
|
|
32
|
+
"@tryghost/logging": "^2.0.0",
|
|
32
33
|
"bree": "^6.2.0",
|
|
33
34
|
"cron-validate": "^1.4.3",
|
|
34
35
|
"fastq": "^1.11.0",
|
|
35
36
|
"p-wait-for": "^3.2.0"
|
|
36
37
|
},
|
|
37
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "69f039f26b1b1358ce7f835e5006cb9ae6c5b7ba"
|
|
38
39
|
}
|