agenda 5.0.0 → 6.0.0
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/LICENSE.md +4 -0
- package/README.md +222 -1063
- package/dist/Job.d.ts +190 -0
- package/dist/Job.js +568 -0
- package/dist/Job.js.map +1 -0
- package/dist/JobProcessingQueue.d.ts +47 -0
- package/dist/JobProcessingQueue.js +101 -0
- package/dist/JobProcessingQueue.js.map +1 -0
- package/dist/JobProcessor.d.ts +70 -0
- package/dist/JobProcessor.js +458 -0
- package/dist/JobProcessor.js.map +1 -0
- package/dist/backends/index.d.ts +18 -0
- package/dist/backends/index.js +20 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/decorators/Define.d.ts +33 -0
- package/dist/decorators/Define.js +44 -0
- package/dist/decorators/Define.js.map +1 -0
- package/dist/decorators/Every.d.ts +43 -0
- package/dist/decorators/Every.js +55 -0
- package/dist/decorators/Every.js.map +1 -0
- package/dist/decorators/JobsController.d.ts +43 -0
- package/dist/decorators/JobsController.js +37 -0
- package/dist/decorators/JobsController.js.map +1 -0
- package/dist/decorators/index.d.ts +41 -0
- package/dist/decorators/index.js +46 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/metadata.d.ts +50 -0
- package/dist/decorators/metadata.js +35 -0
- package/dist/decorators/metadata.js.map +1 -0
- package/dist/decorators/register.d.ts +52 -0
- package/dist/decorators/register.js +139 -0
- package/dist/decorators/register.js.map +1 -0
- package/dist/index.d.ts +359 -8
- package/dist/index.js +532 -20
- package/dist/index.js.map +1 -1
- package/dist/notifications/BaseNotificationChannel.d.ts +36 -0
- package/dist/notifications/BaseNotificationChannel.js +80 -0
- package/dist/notifications/BaseNotificationChannel.js.map +1 -0
- package/dist/notifications/InMemoryNotificationChannel.d.ts +12 -0
- package/dist/notifications/InMemoryNotificationChannel.js +26 -0
- package/dist/notifications/InMemoryNotificationChannel.js.map +1 -0
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.js +3 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/types/AgendaBackend.d.ts +53 -0
- package/dist/types/AgendaBackend.js +2 -0
- package/dist/types/AgendaBackend.js.map +1 -0
- package/dist/types/AgendaConfig.d.ts +9 -0
- package/dist/types/AgendaConfig.js +2 -0
- package/dist/types/AgendaConfig.js.map +1 -0
- package/dist/types/AgendaStatus.d.ts +32 -0
- package/dist/types/AgendaStatus.js +2 -0
- package/dist/types/AgendaStatus.js.map +1 -0
- package/dist/types/DbOptions.d.ts +4 -0
- package/dist/types/DbOptions.js +2 -0
- package/dist/types/DbOptions.js.map +1 -0
- package/dist/types/JobDefinition.d.ts +40 -0
- package/dist/types/JobDefinition.js +2 -0
- package/dist/types/JobDefinition.js.map +1 -0
- package/dist/types/JobParameters.d.ts +106 -0
- package/dist/types/JobParameters.js +17 -0
- package/dist/types/JobParameters.js.map +1 -0
- package/dist/types/JobQuery.d.ts +79 -0
- package/dist/types/JobQuery.js +33 -0
- package/dist/types/JobQuery.js.map +1 -0
- package/dist/types/JobRepository.d.ts +96 -0
- package/dist/types/JobRepository.js +2 -0
- package/dist/types/JobRepository.js.map +1 -0
- package/dist/types/NotificationChannel.d.ts +71 -0
- package/dist/types/NotificationChannel.js +2 -0
- package/dist/types/NotificationChannel.js.map +1 -0
- package/dist/utils/backoff.d.ts +152 -0
- package/dist/utils/backoff.js +167 -0
- package/dist/utils/backoff.js.map +1 -0
- package/dist/utils/dateConstraints.d.ts +48 -0
- package/dist/utils/dateConstraints.js +128 -0
- package/dist/utils/dateConstraints.js.map +1 -0
- package/dist/utils/isValidDate.d.ts +1 -0
- package/dist/utils/isValidDate.js +5 -0
- package/dist/utils/isValidDate.js.map +1 -0
- package/dist/utils/nextRunAt.d.ts +10 -0
- package/dist/utils/nextRunAt.js +110 -0
- package/dist/utils/nextRunAt.js.map +1 -0
- package/dist/utils/priority.d.ts +13 -0
- package/dist/utils/priority.js +20 -0
- package/dist/utils/priority.js.map +1 -0
- package/dist/utils/processEvery.d.ts +1 -0
- package/dist/utils/processEvery.js +7 -0
- package/dist/utils/processEvery.js.map +1 -0
- package/dist/utils/stack.d.ts +1 -0
- package/dist/utils/stack.js +18 -0
- package/dist/utils/stack.js.map +1 -0
- package/package.json +40 -76
- package/History.md +0 -617
- package/dist/agenda/cancel.d.ts +0 -11
- package/dist/agenda/cancel.d.ts.map +0 -1
- package/dist/agenda/cancel.js +0 -41
- package/dist/agenda/cancel.js.map +0 -1
- package/dist/agenda/close.d.ts +0 -17
- package/dist/agenda/close.d.ts.map +0 -1
- package/dist/agenda/close.js +0 -47
- package/dist/agenda/close.js.map +0 -1
- package/dist/agenda/create.d.ts +0 -11
- package/dist/agenda/create.d.ts.map +0 -1
- package/dist/agenda/create.js +0 -27
- package/dist/agenda/create.js.map +0 -1
- package/dist/agenda/database.d.ts +0 -20
- package/dist/agenda/database.d.ts.map +0 -1
- package/dist/agenda/database.js +0 -56
- package/dist/agenda/database.js.map +0 -1
- package/dist/agenda/db-init.d.ts +0 -11
- package/dist/agenda/db-init.d.ts.map +0 -1
- package/dist/agenda/db-init.js +0 -40
- package/dist/agenda/db-init.js.map +0 -1
- package/dist/agenda/default-concurrency.d.ts +0 -9
- package/dist/agenda/default-concurrency.d.ts.map +0 -1
- package/dist/agenda/default-concurrency.js +0 -21
- package/dist/agenda/default-concurrency.js.map +0 -1
- package/dist/agenda/default-lock-lifetime.d.ts +0 -10
- package/dist/agenda/default-lock-lifetime.d.ts.map +0 -1
- package/dist/agenda/default-lock-lifetime.js +0 -22
- package/dist/agenda/default-lock-lifetime.js.map +0 -1
- package/dist/agenda/default-lock-limit.d.ts +0 -10
- package/dist/agenda/default-lock-limit.d.ts.map +0 -1
- package/dist/agenda/default-lock-limit.js +0 -22
- package/dist/agenda/default-lock-limit.js.map +0 -1
- package/dist/agenda/define.d.ts +0 -45
- package/dist/agenda/define.d.ts.map +0 -1
- package/dist/agenda/define.js +0 -44
- package/dist/agenda/define.js.map +0 -1
- package/dist/agenda/disable.d.ts +0 -11
- package/dist/agenda/disable.d.ts.map +0 -1
- package/dist/agenda/disable.js +0 -42
- package/dist/agenda/disable.js.map +0 -1
- package/dist/agenda/drain.d.ts +0 -9
- package/dist/agenda/drain.d.ts.map +0 -1
- package/dist/agenda/drain.js +0 -46
- package/dist/agenda/drain.js.map +0 -1
- package/dist/agenda/enable.d.ts +0 -12
- package/dist/agenda/enable.d.ts.map +0 -1
- package/dist/agenda/enable.js +0 -43
- package/dist/agenda/enable.js.map +0 -1
- package/dist/agenda/every.d.ts +0 -15
- package/dist/agenda/every.d.ts.map +0 -1
- package/dist/agenda/every.js +0 -77
- package/dist/agenda/every.js.map +0 -1
- package/dist/agenda/find-and-lock-next-job.d.ts +0 -13
- package/dist/agenda/find-and-lock-next-job.d.ts.map +0 -1
- package/dist/agenda/find-and-lock-next-job.js +0 -75
- package/dist/agenda/find-and-lock-next-job.js.map +0 -1
- package/dist/agenda/has-mongo-protocol.d.ts +0 -7
- package/dist/agenda/has-mongo-protocol.d.ts.map +0 -1
- package/dist/agenda/has-mongo-protocol.js +0 -13
- package/dist/agenda/has-mongo-protocol.js.map +0 -1
- package/dist/agenda/index.d.ts +0 -130
- package/dist/agenda/index.d.ts.map +0 -1
- package/dist/agenda/index.js +0 -128
- package/dist/agenda/index.js.map +0 -1
- package/dist/agenda/job-processing-queue.d.ts +0 -18
- package/dist/agenda/job-processing-queue.d.ts.map +0 -1
- package/dist/agenda/job-processing-queue.js +0 -76
- package/dist/agenda/job-processing-queue.js.map +0 -1
- package/dist/agenda/jobs.d.ts +0 -15
- package/dist/agenda/jobs.d.ts.map +0 -1
- package/dist/agenda/jobs.js +0 -36
- package/dist/agenda/jobs.js.map +0 -1
- package/dist/agenda/lock-limit.d.ts +0 -9
- package/dist/agenda/lock-limit.d.ts.map +0 -1
- package/dist/agenda/lock-limit.js +0 -22
- package/dist/agenda/lock-limit.js.map +0 -1
- package/dist/agenda/max-concurrency.d.ts +0 -10
- package/dist/agenda/max-concurrency.d.ts.map +0 -1
- package/dist/agenda/max-concurrency.js +0 -22
- package/dist/agenda/max-concurrency.js.map +0 -1
- package/dist/agenda/mongo.d.ts +0 -12
- package/dist/agenda/mongo.d.ts.map +0 -1
- package/dist/agenda/mongo.js +0 -18
- package/dist/agenda/mongo.js.map +0 -1
- package/dist/agenda/name.d.ts +0 -9
- package/dist/agenda/name.d.ts.map +0 -1
- package/dist/agenda/name.js +0 -21
- package/dist/agenda/name.js.map +0 -1
- package/dist/agenda/now.d.ts +0 -11
- package/dist/agenda/now.d.ts.map +0 -1
- package/dist/agenda/now.js +0 -41
- package/dist/agenda/now.js.map +0 -1
- package/dist/agenda/process-every.d.ts +0 -9
- package/dist/agenda/process-every.d.ts.map +0 -1
- package/dist/agenda/process-every.js +0 -23
- package/dist/agenda/process-every.js.map +0 -1
- package/dist/agenda/purge.d.ts +0 -9
- package/dist/agenda/purge.d.ts.map +0 -1
- package/dist/agenda/purge.js +0 -33
- package/dist/agenda/purge.js.map +0 -1
- package/dist/agenda/save-job.d.ts +0 -11
- package/dist/agenda/save-job.d.ts.map +0 -1
- package/dist/agenda/save-job.js +0 -156
- package/dist/agenda/save-job.js.map +0 -1
- package/dist/agenda/schedule.d.ts +0 -14
- package/dist/agenda/schedule.d.ts.map +0 -1
- package/dist/agenda/schedule.js +0 -62
- package/dist/agenda/schedule.js.map +0 -1
- package/dist/agenda/sort.d.ts +0 -10
- package/dist/agenda/sort.d.ts.map +0 -1
- package/dist/agenda/sort.js +0 -22
- package/dist/agenda/sort.js.map +0 -1
- package/dist/agenda/start.d.ts +0 -10
- package/dist/agenda/start.d.ts.map +0 -1
- package/dist/agenda/start.js +0 -39
- package/dist/agenda/start.js.map +0 -1
- package/dist/agenda/stop.d.ts +0 -9
- package/dist/agenda/stop.d.ts.map +0 -1
- package/dist/agenda/stop.js +0 -57
- package/dist/agenda/stop.js.map +0 -1
- package/dist/cjs.d.ts +0 -2
- package/dist/cjs.d.ts.map +0 -1
- package/dist/cjs.js +0 -7
- package/dist/cjs.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/job/compute-next-run-at.d.ts +0 -8
- package/dist/job/compute-next-run-at.d.ts.map +0 -1
- package/dist/job/compute-next-run-at.js +0 -162
- package/dist/job/compute-next-run-at.js.map +0 -1
- package/dist/job/disable.d.ts +0 -8
- package/dist/job/disable.d.ts.map +0 -1
- package/dist/job/disable.js +0 -14
- package/dist/job/disable.js.map +0 -1
- package/dist/job/enable.d.ts +0 -8
- package/dist/job/enable.d.ts.map +0 -1
- package/dist/job/enable.js +0 -14
- package/dist/job/enable.js.map +0 -1
- package/dist/job/fail.d.ts +0 -9
- package/dist/job/fail.d.ts.map +0 -1
- package/dist/job/fail.js +0 -28
- package/dist/job/fail.js.map +0 -1
- package/dist/job/index.d.ts +0 -142
- package/dist/job/index.d.ts.map +0 -1
- package/dist/job/index.js +0 -82
- package/dist/job/index.js.map +0 -1
- package/dist/job/is-running.d.ts +0 -12
- package/dist/job/is-running.d.ts.map +0 -1
- package/dist/job/is-running.js +0 -27
- package/dist/job/is-running.js.map +0 -1
- package/dist/job/priority.d.ts +0 -7
- package/dist/job/priority.d.ts.map +0 -1
- package/dist/job/priority.js +0 -14
- package/dist/job/priority.js.map +0 -1
- package/dist/job/remove.d.ts +0 -8
- package/dist/job/remove.d.ts.map +0 -1
- package/dist/job/remove.js +0 -24
- package/dist/job/remove.js.map +0 -1
- package/dist/job/repeat-at.d.ts +0 -9
- package/dist/job/repeat-at.d.ts.map +0 -1
- package/dist/job/repeat-at.js +0 -15
- package/dist/job/repeat-at.js.map +0 -1
- package/dist/job/repeat-every.d.ts +0 -17
- package/dist/job/repeat-every.d.ts.map +0 -1
- package/dist/job/repeat-every.js +0 -32
- package/dist/job/repeat-every.js.map +0 -1
- package/dist/job/run.d.ts +0 -8
- package/dist/job/run.d.ts.map +0 -1
- package/dist/job/run.js +0 -99
- package/dist/job/run.js.map +0 -1
- package/dist/job/save.d.ts +0 -9
- package/dist/job/save.d.ts.map +0 -1
- package/dist/job/save.js +0 -25
- package/dist/job/save.js.map +0 -1
- package/dist/job/schedule.d.ts +0 -9
- package/dist/job/schedule.d.ts.map +0 -1
- package/dist/job/schedule.js +0 -21
- package/dist/job/schedule.js.map +0 -1
- package/dist/job/set-shouldsaveresult.d.ts +0 -7
- package/dist/job/set-shouldsaveresult.d.ts.map +0 -1
- package/dist/job/set-shouldsaveresult.js +0 -13
- package/dist/job/set-shouldsaveresult.js.map +0 -1
- package/dist/job/to-json.d.ts +0 -9
- package/dist/job/to-json.d.ts.map +0 -1
- package/dist/job/to-json.js +0 -36
- package/dist/job/to-json.js.map +0 -1
- package/dist/job/touch.d.ts +0 -8
- package/dist/job/touch.d.ts.map +0 -1
- package/dist/job/touch.js +0 -25
- package/dist/job/touch.js.map +0 -1
- package/dist/job/unique.d.ts +0 -12
- package/dist/job/unique.d.ts.map +0 -1
- package/dist/job/unique.js +0 -17
- package/dist/job/unique.js.map +0 -1
- package/dist/utils/create-job.d.ts +0 -10
- package/dist/utils/create-job.d.ts.map +0 -1
- package/dist/utils/create-job.js +0 -16
- package/dist/utils/create-job.js.map +0 -1
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -16
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/parse-priority.d.ts +0 -6
- package/dist/utils/parse-priority.d.ts.map +0 -1
- package/dist/utils/parse-priority.js +0 -35
- package/dist/utils/parse-priority.js.map +0 -1
- package/dist/utils/process-jobs.d.ts +0 -8
- package/dist/utils/process-jobs.d.ts.map +0 -1
- package/dist/utils/process-jobs.js +0 -308
- package/dist/utils/process-jobs.js.map +0 -1
- package/es.js +0 -1
- package/lib/agenda/cancel.ts +0 -28
- package/lib/agenda/close.ts +0 -37
- package/lib/agenda/create.ts +0 -22
- package/lib/agenda/database.ts +0 -63
- package/lib/agenda/db-init.ts +0 -45
- package/lib/agenda/default-concurrency.ts +0 -19
- package/lib/agenda/default-lock-lifetime.ts +0 -17
- package/lib/agenda/default-lock-limit.ts +0 -17
- package/lib/agenda/define.ts +0 -85
- package/lib/agenda/disable.ts +0 -28
- package/lib/agenda/drain.ts +0 -30
- package/lib/agenda/enable.ts +0 -29
- package/lib/agenda/every.ts +0 -86
- package/lib/agenda/find-and-lock-next-job.ts +0 -78
- package/lib/agenda/has-mongo-protocol.ts +0 -8
- package/lib/agenda/index.ts +0 -227
- package/lib/agenda/job-processing-queue.ts +0 -99
- package/lib/agenda/jobs.ts +0 -31
- package/lib/agenda/lock-limit.ts +0 -17
- package/lib/agenda/max-concurrency.ts +0 -20
- package/lib/agenda/mongo.ts +0 -21
- package/lib/agenda/name.ts +0 -16
- package/lib/agenda/now.ts +0 -31
- package/lib/agenda/process-every.ts +0 -18
- package/lib/agenda/purge.ts +0 -19
- package/lib/agenda/save-job.ts +0 -185
- package/lib/agenda/schedule.ts +0 -79
- package/lib/agenda/sort.ts +0 -17
- package/lib/agenda/start.ts +0 -30
- package/lib/agenda/stop.ts +0 -49
- package/lib/cjs.ts +0 -5
- package/lib/index.ts +0 -11
- package/lib/job/compute-next-run-at.ts +0 -191
- package/lib/job/disable.ts +0 -11
- package/lib/job/enable.ts +0 -11
- package/lib/job/fail.ts +0 -29
- package/lib/job/index.ts +0 -221
- package/lib/job/is-running.ts +0 -29
- package/lib/job/priority.ts +0 -11
- package/lib/job/remove.ts +0 -10
- package/lib/job/repeat-at.ts +0 -12
- package/lib/job/repeat-every.ts +0 -40
- package/lib/job/run.ts +0 -125
- package/lib/job/save.ts +0 -11
- package/lib/job/schedule.ts +0 -15
- package/lib/job/set-shouldsaveresult.ts +0 -10
- package/lib/job/to-json.ts +0 -36
- package/lib/job/touch.ts +0 -11
- package/lib/job/unique.ts +0 -18
- package/lib/utils/create-job.ts +0 -13
- package/lib/utils/index.ts +0 -3
- package/lib/utils/parse-priority.ts +0 -37
- package/lib/utils/process-jobs.ts +0 -379
- package/tsconfig.json +0 -72
package/dist/Job.js
ADDED
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
import date from 'date.js';
|
|
2
|
+
import debug from 'debug';
|
|
3
|
+
import { fork } from 'child_process';
|
|
4
|
+
import { datefields } from './types/JobParameters.js';
|
|
5
|
+
import { parsePriority } from './utils/priority.js';
|
|
6
|
+
import { computeFromInterval, computeFromRepeatAt } from './utils/nextRunAt.js';
|
|
7
|
+
import { applyAllDateConstraints } from './utils/dateConstraints.js';
|
|
8
|
+
const log = debug('agenda:job');
|
|
9
|
+
/**
|
|
10
|
+
* @class
|
|
11
|
+
*/
|
|
12
|
+
export class Job {
|
|
13
|
+
agenda;
|
|
14
|
+
byJobProcessor;
|
|
15
|
+
attrs;
|
|
16
|
+
/** this flag is set to true, if a job got canceled (e.g. due to a timeout or other exception),
|
|
17
|
+
* you can use it for long running tasks to periodically check if canceled is true,
|
|
18
|
+
* also touch will check if and throws that the job got canceled
|
|
19
|
+
*/
|
|
20
|
+
canceled;
|
|
21
|
+
getCanceledMessage() {
|
|
22
|
+
return typeof this.canceled === 'object'
|
|
23
|
+
? this.canceled?.message || this.canceled
|
|
24
|
+
: this.canceled;
|
|
25
|
+
}
|
|
26
|
+
forkedChild;
|
|
27
|
+
cancel(error) {
|
|
28
|
+
this.canceled = error || true;
|
|
29
|
+
if (this.forkedChild) {
|
|
30
|
+
try {
|
|
31
|
+
this.forkedChild.send('cancel');
|
|
32
|
+
log('canceled child', this.attrs.name, this.attrs._id);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
log('cannot send cancel to child');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** internal variable to ensure a job does not set unlimited numbers of setTimeouts if the job is not processed
|
|
40
|
+
* immediately */
|
|
41
|
+
gotTimerToExecute;
|
|
42
|
+
constructor(agenda, args, byJobProcessor = false) {
|
|
43
|
+
this.agenda = agenda;
|
|
44
|
+
this.byJobProcessor = byJobProcessor;
|
|
45
|
+
this.attrs = {
|
|
46
|
+
...args,
|
|
47
|
+
// Set defaults if undefined
|
|
48
|
+
nextRunAt: args.nextRunAt === undefined ? new Date() : args.nextRunAt,
|
|
49
|
+
priority: parsePriority(args.priority),
|
|
50
|
+
type: args.type
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Fields managed by the job processor that should not be saved by user code.
|
|
55
|
+
* These are excluded in save() to prevent race conditions between user code and the processor.
|
|
56
|
+
*/
|
|
57
|
+
static PROCESSOR_MANAGED_FIELDS = new Set([
|
|
58
|
+
'lockedAt',
|
|
59
|
+
'lastRunAt',
|
|
60
|
+
'lastFinishedAt',
|
|
61
|
+
'failedAt',
|
|
62
|
+
'failCount',
|
|
63
|
+
'failReason',
|
|
64
|
+
'progress'
|
|
65
|
+
]);
|
|
66
|
+
/**
|
|
67
|
+
* Given a job, turn it into an JobParameters object
|
|
68
|
+
* @param excludeProcessorFields - If true, excludes fields managed by the job processor
|
|
69
|
+
*/
|
|
70
|
+
toJson(excludeProcessorFields = false) {
|
|
71
|
+
const result = {};
|
|
72
|
+
const attrs = this.attrs;
|
|
73
|
+
for (const key of Object.keys(attrs)) {
|
|
74
|
+
if (Object.hasOwnProperty.call(attrs, key)) {
|
|
75
|
+
// Skip processor-managed fields if requested
|
|
76
|
+
if (excludeProcessorFields && Job.PROCESSOR_MANAGED_FIELDS.has(key)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
result[key] =
|
|
80
|
+
datefields.includes(key) && attrs[key]
|
|
81
|
+
? new Date(attrs[key])
|
|
82
|
+
: attrs[key];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sets a job to repeat every X amount of time
|
|
89
|
+
* @param interval
|
|
90
|
+
* @param options
|
|
91
|
+
*/
|
|
92
|
+
repeatEvery(interval, options = {}) {
|
|
93
|
+
this.attrs.repeatInterval = interval;
|
|
94
|
+
this.attrs.repeatTimezone = options.timezone;
|
|
95
|
+
if (options.skipImmediate) {
|
|
96
|
+
// Set the lastRunAt time to the nextRunAt so that the new nextRunAt will be computed in reference to the current value.
|
|
97
|
+
this.attrs.lastRunAt = this.attrs.nextRunAt || new Date();
|
|
98
|
+
this.computeNextRunAt();
|
|
99
|
+
this.attrs.lastRunAt = undefined;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.computeNextRunAt();
|
|
103
|
+
}
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Sets a job to repeat at a specific time
|
|
108
|
+
* @param time
|
|
109
|
+
*/
|
|
110
|
+
repeatAt(time) {
|
|
111
|
+
this.attrs.repeatAt = time;
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Sets the start date for the job.
|
|
116
|
+
* The job will not run before this date.
|
|
117
|
+
* @param date - The start date (Date object or string parseable by Date constructor)
|
|
118
|
+
*/
|
|
119
|
+
startDate(dateInput) {
|
|
120
|
+
const d = new Date(dateInput);
|
|
121
|
+
if (Number.isNaN(d.getTime())) {
|
|
122
|
+
throw new Error(`Invalid start date: ${dateInput}`);
|
|
123
|
+
}
|
|
124
|
+
this.attrs.startDate = d;
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Sets the end date for the job.
|
|
129
|
+
* The job will not run after this date (nextRunAt will be set to null).
|
|
130
|
+
* @param date - The end date (Date object or string parseable by Date constructor)
|
|
131
|
+
*/
|
|
132
|
+
endDate(dateInput) {
|
|
133
|
+
const d = new Date(dateInput);
|
|
134
|
+
if (Number.isNaN(d.getTime())) {
|
|
135
|
+
throw new Error(`Invalid end date: ${dateInput}`);
|
|
136
|
+
}
|
|
137
|
+
this.attrs.endDate = d;
|
|
138
|
+
return this;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Sets the days of the week to skip.
|
|
142
|
+
* The job will not run on these days.
|
|
143
|
+
* @param days - Array of days to skip (0 = Sunday, 1 = Monday, ..., 6 = Saturday)
|
|
144
|
+
*/
|
|
145
|
+
skipDays(days) {
|
|
146
|
+
// Validate days
|
|
147
|
+
for (const day of days) {
|
|
148
|
+
if (day < 0 || day > 6 || !Number.isInteger(day)) {
|
|
149
|
+
throw new Error(`Invalid skip day: ${day}. Must be an integer 0-6 (0=Sunday, 6=Saturday)`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
this.attrs.skipDays = [...new Set(days)]; // Remove duplicates
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* if set, a job is forked via node child process and runs in a seperate/own
|
|
157
|
+
* thread
|
|
158
|
+
* @param enableForkMode
|
|
159
|
+
*/
|
|
160
|
+
forkMode(enableForkMode) {
|
|
161
|
+
this.attrs.fork = enableForkMode;
|
|
162
|
+
return this;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Prevents the job from running
|
|
166
|
+
*/
|
|
167
|
+
disable() {
|
|
168
|
+
this.attrs.disabled = true;
|
|
169
|
+
return this;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Allows job to run
|
|
173
|
+
*/
|
|
174
|
+
enable() {
|
|
175
|
+
this.attrs.disabled = false;
|
|
176
|
+
return this;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Data to ensure is unique for job to be created
|
|
180
|
+
* @param unique
|
|
181
|
+
* @param opts
|
|
182
|
+
*/
|
|
183
|
+
unique(unique, opts) {
|
|
184
|
+
this.attrs.unique = unique;
|
|
185
|
+
this.attrs.uniqueOpts = opts;
|
|
186
|
+
return this;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Configure debounce behavior for this job.
|
|
190
|
+
* Debouncing delays job execution and resets the timer on subsequent saves,
|
|
191
|
+
* ensuring the job only runs once after a quiet period.
|
|
192
|
+
*
|
|
193
|
+
* IMPORTANT: Requires a unique constraint to be set via `.unique()`.
|
|
194
|
+
* The unique constraint identifies which jobs should be debounced together.
|
|
195
|
+
*
|
|
196
|
+
* @param delay - Debounce window in milliseconds
|
|
197
|
+
* @param options - Optional configuration (maxWait, strategy)
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```ts
|
|
201
|
+
* // Basic trailing debounce - execute 2s after last save
|
|
202
|
+
* await agenda.create('updateIndex', { entityId: 123 })
|
|
203
|
+
* .unique({ 'data.entityId': 123 })
|
|
204
|
+
* .debounce(2000)
|
|
205
|
+
* .save();
|
|
206
|
+
*
|
|
207
|
+
* // With maxWait - guarantee execution within 30s
|
|
208
|
+
* await agenda.create('syncUser', { userId: 456 })
|
|
209
|
+
* .unique({ 'data.userId': 456 })
|
|
210
|
+
* .debounce(5000, { maxWait: 30000 })
|
|
211
|
+
* .save();
|
|
212
|
+
*
|
|
213
|
+
* // Leading strategy - execute immediately, ignore subsequent calls
|
|
214
|
+
* await agenda.create('notify', { channel: '#alerts' })
|
|
215
|
+
* .unique({ 'data.channel': '#alerts' })
|
|
216
|
+
* .debounce(60000, { strategy: 'leading' })
|
|
217
|
+
* .save();
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
debounce(delay, options) {
|
|
221
|
+
const debounceOpts = {
|
|
222
|
+
delay,
|
|
223
|
+
maxWait: options?.maxWait,
|
|
224
|
+
strategy: options?.strategy ?? 'trailing'
|
|
225
|
+
};
|
|
226
|
+
this.attrs.uniqueOpts = {
|
|
227
|
+
...this.attrs.uniqueOpts,
|
|
228
|
+
debounce: debounceOpts
|
|
229
|
+
};
|
|
230
|
+
return this;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Schedules a job to run at specified time.
|
|
234
|
+
* Date constraints (startDate, endDate, skipDays) are applied if set.
|
|
235
|
+
* @param time
|
|
236
|
+
*/
|
|
237
|
+
schedule(time) {
|
|
238
|
+
const d = new Date(time);
|
|
239
|
+
let nextRunAt = Number.isNaN(d.getTime()) ? date(time) : d;
|
|
240
|
+
// Apply date constraints if any are set
|
|
241
|
+
if (this.attrs.startDate || this.attrs.endDate || this.attrs.skipDays) {
|
|
242
|
+
nextRunAt = applyAllDateConstraints(nextRunAt, {
|
|
243
|
+
startDate: this.attrs.startDate,
|
|
244
|
+
endDate: this.attrs.endDate,
|
|
245
|
+
skipDays: this.attrs.skipDays,
|
|
246
|
+
timezone: this.attrs.repeatTimezone
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
this.attrs.nextRunAt = nextRunAt;
|
|
250
|
+
return this;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Sets priority of the job
|
|
254
|
+
* @param priority priority of when job should be queued
|
|
255
|
+
*/
|
|
256
|
+
priority(priority) {
|
|
257
|
+
this.attrs.priority = parsePriority(priority);
|
|
258
|
+
return this;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Fails the job with a reason (error) specified
|
|
262
|
+
*
|
|
263
|
+
* @param reason
|
|
264
|
+
*/
|
|
265
|
+
fail(reason) {
|
|
266
|
+
this.attrs.failReason = reason instanceof Error ? reason.message : reason;
|
|
267
|
+
this.attrs.failCount = (this.attrs.failCount || 0) + 1;
|
|
268
|
+
const now = new Date();
|
|
269
|
+
this.attrs.failedAt = now;
|
|
270
|
+
this.attrs.lastFinishedAt = now;
|
|
271
|
+
log('[%s:%s] fail() called [%d] times so far', this.attrs.name, this.attrs._id, this.attrs.failCount);
|
|
272
|
+
return this;
|
|
273
|
+
}
|
|
274
|
+
async fetchStatus() {
|
|
275
|
+
const result = await this.agenda.db.queryJobs({ id: this.attrs._id?.toString() });
|
|
276
|
+
if (!result.jobs || result.jobs.length === 0) {
|
|
277
|
+
// @todo: should we just return false instead? a finished job could have been removed from database,
|
|
278
|
+
// and then this would throw...
|
|
279
|
+
throw new Error(`job with id ${this.attrs._id} not found in database`);
|
|
280
|
+
}
|
|
281
|
+
this.attrs.lastRunAt = result.jobs[0].lastRunAt;
|
|
282
|
+
this.attrs.lockedAt = result.jobs[0].lockedAt;
|
|
283
|
+
this.attrs.lastFinishedAt = result.jobs[0].lastFinishedAt;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* A job is running if:
|
|
287
|
+
* (lastRunAt exists AND lastFinishedAt does not exist)
|
|
288
|
+
* OR
|
|
289
|
+
* (lastRunAt exists AND lastFinishedAt exists but the lastRunAt is newer [in time] than lastFinishedAt)
|
|
290
|
+
* @returns Whether or not job is running at the moment (true for running)
|
|
291
|
+
*/
|
|
292
|
+
async isRunning() {
|
|
293
|
+
if (!this.byJobProcessor || this.attrs.fork) {
|
|
294
|
+
// we have no job definition, therfore we are not the job processor, but a client call
|
|
295
|
+
// so we get the real state from database
|
|
296
|
+
await this.fetchStatus();
|
|
297
|
+
}
|
|
298
|
+
if (!this.attrs.lastRunAt) {
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
if (!this.attrs.lastFinishedAt) {
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
if (this.attrs.lockedAt &&
|
|
305
|
+
this.attrs.lastRunAt.getTime() > this.attrs.lastFinishedAt.getTime()) {
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Saves a job to database
|
|
312
|
+
*/
|
|
313
|
+
async save() {
|
|
314
|
+
if (this.agenda.forkedWorker) {
|
|
315
|
+
const warning = new Error('calling save() on a Job during a forkedWorker has no effect!');
|
|
316
|
+
log('WARNING: %s %s', warning.message, warning.stack);
|
|
317
|
+
return this;
|
|
318
|
+
}
|
|
319
|
+
// ensure db connection is ready
|
|
320
|
+
await this.agenda.ready;
|
|
321
|
+
// save() is only called by user code (the job processor uses saveJobState() directly),
|
|
322
|
+
// so we always exclude processor-managed fields to prevent race conditions
|
|
323
|
+
const result = await this.agenda.db.saveJob(this.toJson(true), {
|
|
324
|
+
lastModifiedBy: this.agenda.attrs.name || undefined
|
|
325
|
+
});
|
|
326
|
+
// Update attrs from result
|
|
327
|
+
this.attrs._id = result._id;
|
|
328
|
+
this.attrs.nextRunAt = result.nextRunAt;
|
|
329
|
+
this.attrs.debounceStartedAt = result.debounceStartedAt;
|
|
330
|
+
// Publish notification for real-time processing if channel is configured
|
|
331
|
+
if (this.agenda.hasNotificationChannel()) {
|
|
332
|
+
await this.agenda.publishJobNotification(this);
|
|
333
|
+
}
|
|
334
|
+
return this;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Remove the job from database
|
|
338
|
+
*/
|
|
339
|
+
remove() {
|
|
340
|
+
return this.agenda.cancel({ id: this.attrs._id });
|
|
341
|
+
}
|
|
342
|
+
async isDead() {
|
|
343
|
+
return this.isExpired();
|
|
344
|
+
}
|
|
345
|
+
async isExpired() {
|
|
346
|
+
if (!this.byJobProcessor || this.attrs.fork) {
|
|
347
|
+
// we have no job definition, therfore we are not the job processor, but a client call
|
|
348
|
+
// so we get the real state from database
|
|
349
|
+
await this.fetchStatus();
|
|
350
|
+
}
|
|
351
|
+
const definition = this.agenda.definitions[this.attrs.name];
|
|
352
|
+
const lockDeadline = new Date(Date.now() - definition.lockLifetime);
|
|
353
|
+
// This means a job has "expired", as in it has not been "touched" within the lockoutTime
|
|
354
|
+
// Remove from local lock
|
|
355
|
+
if (this.attrs.lockedAt && this.attrs.lockedAt < lockDeadline) {
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Updates "lockedAt" time so the job does not get picked up again
|
|
362
|
+
* @param progress 0 to 100
|
|
363
|
+
*/
|
|
364
|
+
async touch(progress) {
|
|
365
|
+
if (this.canceled) {
|
|
366
|
+
throw new Error(`job ${this.attrs.name} got canceled already: ${this.canceled}!`);
|
|
367
|
+
}
|
|
368
|
+
this.attrs.lockedAt = new Date();
|
|
369
|
+
this.attrs.progress = progress;
|
|
370
|
+
await this.agenda.db.saveJobState(this.attrs, {
|
|
371
|
+
lastModifiedBy: this.agenda.attrs.name || undefined
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
computeNextRunAt() {
|
|
375
|
+
try {
|
|
376
|
+
if (this.attrs.repeatInterval) {
|
|
377
|
+
const nextRunAt = computeFromInterval(this.attrs);
|
|
378
|
+
this.attrs.nextRunAt = nextRunAt;
|
|
379
|
+
if (nextRunAt) {
|
|
380
|
+
log('[%s:%s] nextRunAt set to [%s]', this.attrs.name, this.attrs._id, nextRunAt.toISOString());
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
log('[%s:%s] nextRunAt set to null (date constraints)', this.attrs.name, this.attrs._id);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else if (this.attrs.repeatAt) {
|
|
387
|
+
const nextRunAt = computeFromRepeatAt(this.attrs);
|
|
388
|
+
this.attrs.nextRunAt = nextRunAt;
|
|
389
|
+
if (nextRunAt) {
|
|
390
|
+
log('[%s:%s] nextRunAt set to [%s]', this.attrs.name, this.attrs._id, nextRunAt.toISOString());
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
log('[%s:%s] nextRunAt set to null (date constraints)', this.attrs.name, this.attrs._id);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
this.attrs.nextRunAt = null;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
this.attrs.nextRunAt = null;
|
|
402
|
+
this.fail(error);
|
|
403
|
+
}
|
|
404
|
+
return this;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Handle automatic retry with backoff strategy
|
|
408
|
+
* @param error - The error that caused the failure
|
|
409
|
+
*/
|
|
410
|
+
async handleRetry(error) {
|
|
411
|
+
const definition = this.agenda.definitions[this.attrs.name];
|
|
412
|
+
// No backoff strategy configured - skip auto-retry
|
|
413
|
+
if (!definition?.backoff) {
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
const context = {
|
|
417
|
+
attempt: this.attrs.failCount || 1,
|
|
418
|
+
error,
|
|
419
|
+
jobName: this.attrs.name,
|
|
420
|
+
jobData: this.attrs.data
|
|
421
|
+
};
|
|
422
|
+
const retryDelay = definition.backoff(context);
|
|
423
|
+
if (retryDelay === null) {
|
|
424
|
+
// No more retries - emit exhausted event
|
|
425
|
+
log('[%s:%s] retry attempts exhausted after %d failures', this.attrs.name, this.attrs._id, this.attrs.failCount);
|
|
426
|
+
this.agenda.emit('retry exhausted', error, this);
|
|
427
|
+
this.agenda.emit(`retry exhausted:${this.attrs.name}`, error, this);
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
// Schedule retry
|
|
431
|
+
const nextRunAt = new Date(Date.now() + retryDelay);
|
|
432
|
+
this.attrs.nextRunAt = nextRunAt;
|
|
433
|
+
log('[%s:%s] scheduling retry #%d in %dms (at %s)', this.attrs.name, this.attrs._id, this.attrs.failCount, retryDelay, nextRunAt.toISOString());
|
|
434
|
+
this.agenda.emit('retry', this, {
|
|
435
|
+
attempt: this.attrs.failCount,
|
|
436
|
+
delay: retryDelay,
|
|
437
|
+
nextRunAt,
|
|
438
|
+
error
|
|
439
|
+
});
|
|
440
|
+
this.agenda.emit(`retry:${this.attrs.name}`, this, {
|
|
441
|
+
attempt: this.attrs.failCount,
|
|
442
|
+
delay: retryDelay,
|
|
443
|
+
nextRunAt,
|
|
444
|
+
error
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
async run() {
|
|
448
|
+
this.attrs.lastRunAt = new Date();
|
|
449
|
+
log('[%s:%s] setting lastRunAt to: %s', this.attrs.name, this.attrs._id, this.attrs.lastRunAt.toISOString());
|
|
450
|
+
this.computeNextRunAt();
|
|
451
|
+
await this.agenda.db.saveJobState(this.attrs, {
|
|
452
|
+
lastModifiedBy: this.agenda.attrs.name || undefined
|
|
453
|
+
});
|
|
454
|
+
try {
|
|
455
|
+
this.agenda.emit('start', this);
|
|
456
|
+
this.agenda.emit(`start:${this.attrs.name}`, this);
|
|
457
|
+
log('[%s:%s] starting job', this.attrs.name, this.attrs._id);
|
|
458
|
+
if (this.attrs.fork) {
|
|
459
|
+
if (!this.agenda.forkHelper) {
|
|
460
|
+
throw new Error('no forkHelper specified, you need to set a path to a helper script');
|
|
461
|
+
}
|
|
462
|
+
const { forkHelper } = this.agenda;
|
|
463
|
+
await new Promise((resolve, reject) => {
|
|
464
|
+
this.forkedChild = fork(forkHelper.path, [
|
|
465
|
+
this.attrs.name,
|
|
466
|
+
this.attrs._id.toString(),
|
|
467
|
+
this.agenda.definitions[this.attrs.name].filePath || ''
|
|
468
|
+
], forkHelper.options);
|
|
469
|
+
let childError;
|
|
470
|
+
this.forkedChild.on('close', code => {
|
|
471
|
+
if (code) {
|
|
472
|
+
log('fork parameters: %O name=%s id=%s filePath=%s', forkHelper, this.attrs.name, this.attrs._id, this.agenda.definitions[this.attrs.name].filePath);
|
|
473
|
+
const error = new Error(`child process exited with code: ${code}`);
|
|
474
|
+
log('fork child error: %s %O', error.message, childError || this.canceled);
|
|
475
|
+
reject(childError || this.canceled || error);
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
resolve();
|
|
479
|
+
}
|
|
480
|
+
});
|
|
481
|
+
this.forkedChild.on('message', message => {
|
|
482
|
+
// console.log(`Message from child.js: ${message}`, JSON.stringify(message));
|
|
483
|
+
if (typeof message === 'string') {
|
|
484
|
+
try {
|
|
485
|
+
childError = JSON.parse(message);
|
|
486
|
+
}
|
|
487
|
+
catch {
|
|
488
|
+
childError = message;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
childError = message;
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
await this.runJob();
|
|
499
|
+
}
|
|
500
|
+
this.attrs.lastFinishedAt = new Date();
|
|
501
|
+
this.agenda.emit('success', this);
|
|
502
|
+
this.agenda.emit(`success:${this.attrs.name}`, this);
|
|
503
|
+
log('[%s:%s] has succeeded', this.attrs.name, this.attrs._id);
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
log('[%s:%s] unknown error occurred', this.attrs.name, this.attrs._id);
|
|
507
|
+
this.fail(error);
|
|
508
|
+
this.agenda.emit('fail', error, this);
|
|
509
|
+
this.agenda.emit(`fail:${this.attrs.name}`, error, this);
|
|
510
|
+
log('[%s:%s] has failed [%s]', this.attrs.name, this.attrs._id, error.message);
|
|
511
|
+
// Handle automatic retry with backoff strategy
|
|
512
|
+
await this.handleRetry(error);
|
|
513
|
+
}
|
|
514
|
+
finally {
|
|
515
|
+
this.forkedChild = undefined;
|
|
516
|
+
this.attrs.lockedAt = undefined;
|
|
517
|
+
try {
|
|
518
|
+
await this.agenda.db.saveJobState(this.attrs, {
|
|
519
|
+
lastModifiedBy: this.agenda.attrs.name || undefined
|
|
520
|
+
});
|
|
521
|
+
log('[%s:%s] was saved successfully to database', this.attrs.name, this.attrs._id);
|
|
522
|
+
}
|
|
523
|
+
catch (err) {
|
|
524
|
+
// in case this fails, we ignore it
|
|
525
|
+
// this can e.g. happen if the job gets removed during the execution
|
|
526
|
+
log('[%s:%s] was not saved to database', this.attrs.name, this.attrs._id, err);
|
|
527
|
+
}
|
|
528
|
+
this.agenda.emit('complete', this);
|
|
529
|
+
this.agenda.emit(`complete:${this.attrs.name}`, this);
|
|
530
|
+
log('[%s:%s] job finished at [%s] and was unlocked', this.attrs.name, this.attrs._id, this.attrs.lastFinishedAt);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
async runJob() {
|
|
534
|
+
const definition = this.agenda.definitions[this.attrs.name];
|
|
535
|
+
if (!definition) {
|
|
536
|
+
log('[%s:%s] has no definition, can not run', this.attrs.name, this.attrs._id);
|
|
537
|
+
throw new Error('Undefined job');
|
|
538
|
+
}
|
|
539
|
+
if (definition.fn.length === 2) {
|
|
540
|
+
log('[%s:%s] process function being called', this.attrs.name, this.attrs._id);
|
|
541
|
+
await new Promise((resolve, reject) => {
|
|
542
|
+
try {
|
|
543
|
+
const result = definition.fn(this, error => {
|
|
544
|
+
if (error) {
|
|
545
|
+
reject(error);
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
resolve();
|
|
549
|
+
});
|
|
550
|
+
if (this.isPromise(result)) {
|
|
551
|
+
result.catch((error) => reject(error));
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
catch (error) {
|
|
555
|
+
reject(error);
|
|
556
|
+
}
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
log('[%s:%s] process function being called', this.attrs.name, this.attrs._id);
|
|
561
|
+
await definition.fn(this);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
isPromise(value) {
|
|
565
|
+
return !!(value && typeof value.then === 'function');
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
//# sourceMappingURL=Job.js.map
|
package/dist/Job.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Job.js","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Job, JobWithId } from './Job.js';
|
|
2
|
+
import type { JobParameters } from './types/JobParameters.js';
|
|
3
|
+
import type { Agenda } from './index.js';
|
|
4
|
+
/**
|
|
5
|
+
* @class
|
|
6
|
+
*/
|
|
7
|
+
export declare class JobProcessingQueue {
|
|
8
|
+
private agenda;
|
|
9
|
+
private _queue;
|
|
10
|
+
constructor(agenda: Agenda);
|
|
11
|
+
get length(): number;
|
|
12
|
+
getQueue(): Job[];
|
|
13
|
+
/**
|
|
14
|
+
* Pops and returns last queue element (next job to be processed) without checking concurrency.
|
|
15
|
+
* @returns {Job} Next Job to be processed
|
|
16
|
+
*/
|
|
17
|
+
pop(): Job | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Inserts job in first queue position
|
|
20
|
+
* @param {Job} job job to add to queue
|
|
21
|
+
* @returns {undefined}
|
|
22
|
+
*/
|
|
23
|
+
remove(job: Job): void;
|
|
24
|
+
/**
|
|
25
|
+
* Inserts job in queue where it will be order from left to right in decreasing
|
|
26
|
+
* order of nextRunAt and priority (in case of same nextRunAt), if all values
|
|
27
|
+
* are even the first jobs to be introduced will have priority
|
|
28
|
+
* @param {Job} job job to add to queue
|
|
29
|
+
* @returns {undefined}
|
|
30
|
+
*/
|
|
31
|
+
insert(job: Job): void;
|
|
32
|
+
/**
|
|
33
|
+
* Returns (does not pop, element remains in queue) first element (always from the right)
|
|
34
|
+
* that can be processed (not blocked by concurrency execution)
|
|
35
|
+
* @param {Object} jobStatus current status of jobs
|
|
36
|
+
* @returns {Job} Next Job to be processed
|
|
37
|
+
*/
|
|
38
|
+
returnNextConcurrencyFreeJob(jobStatus: {
|
|
39
|
+
[jobName: string]: {
|
|
40
|
+
running: number;
|
|
41
|
+
} | undefined;
|
|
42
|
+
}, handledJobs: JobParameters['_id'][]): (JobWithId & {
|
|
43
|
+
attrs: JobParameters & {
|
|
44
|
+
nextRunAt?: Date | null;
|
|
45
|
+
};
|
|
46
|
+
}) | undefined;
|
|
47
|
+
}
|