@cedarjs/jobs 5.0.7-next.258 → 5.0.7-next.335
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/dist/adapters/BaseAdapter/BaseAdapter.d.ts +24 -1
- package/dist/adapters/BaseAdapter/BaseAdapter.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter/PrismaAdapter.d.ts +20 -7
- package/dist/adapters/PrismaAdapter/PrismaAdapter.d.ts.map +1 -1
- package/dist/adapters/PrismaAdapter/PrismaAdapter.js +71 -15
- package/dist/consts.d.ts +9 -0
- package/dist/consts.d.ts.map +1 -1
- package/dist/consts.js +2 -0
- package/dist/core/Executor.d.ts +7 -0
- package/dist/core/Executor.d.ts.map +1 -1
- package/dist/core/Executor.js +62 -15
- package/dist/core/JobManager.d.ts +3 -1
- package/dist/core/JobManager.d.ts.map +1 -1
- package/dist/core/JobManager.js +4 -1
- package/dist/core/Scheduler.d.ts +11 -1
- package/dist/core/Scheduler.d.ts.map +1 -1
- package/dist/core/Scheduler.js +20 -3
- package/dist/core/Worker.d.ts.map +1 -1
- package/dist/core/Worker.js +1 -0
- package/dist/core/executionContext.d.ts +33 -0
- package/dist/core/executionContext.d.ts.map +1 -0
- package/dist/core/executionContext.js +9 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +14 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/loaders.d.ts +6 -1
- package/dist/loaders.d.ts.map +1 -1
- package/dist/loaders.js +14 -5
- package/dist/types.d.ts +9 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -29,6 +29,17 @@ export interface ErrorOptions<TJob extends BaseJob = BaseJob> {
|
|
|
29
29
|
export interface FailureOptions<TJob extends BaseJob = BaseJob> {
|
|
30
30
|
job: TJob;
|
|
31
31
|
deleteJob?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Present when the job is failed directly, without a preceding `error()`
|
|
34
|
+
* call for the same attempt (currently: when the job exceeded
|
|
35
|
+
* `maxRuntime`), so the adapter can record what went wrong in a single
|
|
36
|
+
* write
|
|
37
|
+
*/
|
|
38
|
+
error?: Error;
|
|
39
|
+
}
|
|
40
|
+
export interface CancelOptions {
|
|
41
|
+
/** The id of the job to cancel, as returned by `schedule()` */
|
|
42
|
+
jobId: string | number;
|
|
32
43
|
}
|
|
33
44
|
/**
|
|
34
45
|
* Base class for all job adapters. Provides a common interface for scheduling
|
|
@@ -58,12 +69,24 @@ export declare abstract class BaseAdapter<TOptions extends BaseAdapterOptions =
|
|
|
58
69
|
*/
|
|
59
70
|
abstract error(options: ErrorOptions): void | Promise<void>;
|
|
60
71
|
/**
|
|
61
|
-
* Called when a job
|
|
72
|
+
* Called when a job will not be retried: it has either errored more than
|
|
73
|
+
* maxAttempts times, or exceeded maxRuntime (in which case
|
|
74
|
+
* `options.error` contains the timeout error to record)
|
|
62
75
|
*/
|
|
63
76
|
abstract failure(options: FailureOptions): void | Promise<void>;
|
|
64
77
|
/**
|
|
65
78
|
* Clear all jobs from storage
|
|
66
79
|
*/
|
|
67
80
|
abstract clear(): void | Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Cancel a job so that it will not be run (if it's still queued) or not be
|
|
83
|
+
* retried or picked up by another worker (if it's currently running).
|
|
84
|
+
* Should return `true` if a job was cancelled and `false` if no cancellable
|
|
85
|
+
* job with the given id was found.
|
|
86
|
+
*
|
|
87
|
+
* This method is optional: adapters that don't implement it don't support
|
|
88
|
+
* cancellation and `later.cancel()` will throw a `CancelNotImplementedError`
|
|
89
|
+
*/
|
|
90
|
+
cancel?(options: CancelOptions): boolean | Promise<boolean>;
|
|
68
91
|
}
|
|
69
92
|
//# sourceMappingURL=BaseAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/BaseAdapter/BaseAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG3E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC5D,GAAG,EAAE,IAAI,CAAA;IACT,KAAK,EAAE,IAAI,GAAG,SAAS,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC1D,GAAG,EAAE,IAAI,CAAA;IACT,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;CACb;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC5D,GAAG,EAAE,IAAI,CAAA;IACT,SAAS,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"BaseAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/BaseAdapter/BaseAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG3E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC5D,GAAG,EAAE,IAAI,CAAA;IACT,KAAK,EAAE,IAAI,GAAG,SAAS,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC1D,GAAG,EAAE,IAAI,CAAA;IACT,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;CACb;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,OAAO,GAAG,OAAO;IAC5D,GAAG,EAAE,IAAI,CAAA;IACT,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED;;;;;;;GAOG;AACH,8BAAsB,WAAW,CAC/B,QAAQ,SAAS,kBAAkB,GAAG,kBAAkB,EACxD,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtC,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAE3B,OAAO,EAAE,QAAQ;IAU7B,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe;IAE5D;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAEzE;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3D;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtC;;;;;;;;OAQG;IACH,MAAM,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAC5D"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { BaseJob } from '../../types.js';
|
|
2
|
-
import type { BaseAdapterOptions, SchedulePayload, FindArgs, SuccessOptions, ErrorOptions, FailureOptions } from '../BaseAdapter/BaseAdapter.js';
|
|
2
|
+
import type { BaseAdapterOptions, SchedulePayload, FindArgs, SuccessOptions, ErrorOptions, FailureOptions, CancelOptions } from '../BaseAdapter/BaseAdapter.js';
|
|
3
3
|
import { BaseAdapter } from '../BaseAdapter/BaseAdapter.js';
|
|
4
4
|
export interface PrismaJob extends BaseJob {
|
|
5
5
|
id: number;
|
|
6
6
|
handler: string;
|
|
7
|
-
|
|
7
|
+
/** Null once the job has completed or permanently failed */
|
|
8
|
+
runAt: Date | null;
|
|
8
9
|
cron: string | null | undefined;
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
/** Null unless the job is currently locked by a worker */
|
|
11
|
+
lockedAt: Date | null;
|
|
12
|
+
/** Null unless the job is currently locked by a worker */
|
|
13
|
+
lockedBy: string | null;
|
|
11
14
|
lastError: string | null;
|
|
12
15
|
failedAt: Date | null;
|
|
13
16
|
createdAt: Date;
|
|
@@ -83,7 +86,7 @@ export interface PrismaAdapterOptions<TDb extends object = object> extends BaseA
|
|
|
83
86
|
* }
|
|
84
87
|
* ```
|
|
85
88
|
*/
|
|
86
|
-
export declare class PrismaAdapter<TDb extends object = object> extends BaseAdapter<PrismaAdapterOptions<TDb>> {
|
|
89
|
+
export declare class PrismaAdapter<TDb extends object = object> extends BaseAdapter<PrismaAdapterOptions<TDb>, Promise<PrismaJob>> {
|
|
87
90
|
db: TDb;
|
|
88
91
|
model: DelegateKey<TDb> | string;
|
|
89
92
|
accessor: PrismaAdapterDelegate;
|
|
@@ -98,8 +101,18 @@ export declare class PrismaAdapter<TDb extends object = object> extends BaseAdap
|
|
|
98
101
|
find({ processName, maxRuntime, queues, }: FindArgs): Promise<PrismaJob | undefined>;
|
|
99
102
|
success({ job, runAt, deleteJob }: SuccessOptions<PrismaJob>): Promise<void>;
|
|
100
103
|
error({ job, runAt, error }: ErrorOptions<PrismaJob>): Promise<void>;
|
|
101
|
-
failure({ job, deleteJob }: FailureOptions<PrismaJob>): Promise<void>;
|
|
102
|
-
schedule({ name, path, args, runAt, cron, queue, priority, }: SchedulePayload): Promise<
|
|
104
|
+
failure({ job, deleteJob, error }: FailureOptions<PrismaJob>): Promise<void>;
|
|
105
|
+
schedule({ name, path, args, runAt, cron, queue, priority, }: SchedulePayload): Promise<PrismaJob>;
|
|
106
|
+
/**
|
|
107
|
+
* Cancels a job by marking it as permanently failed so no worker will pick
|
|
108
|
+
* it up (or retry it, if it's currently being worked on).
|
|
109
|
+
*
|
|
110
|
+
* If the job is currently running, the in-progress attempt is not
|
|
111
|
+
* interrupted (the worker will stop it when `maxRuntime` is exceeded), but
|
|
112
|
+
* it will not be retried and will not be picked up by another worker once
|
|
113
|
+
* its lock goes stale.
|
|
114
|
+
*/
|
|
115
|
+
cancel({ jobId }: CancelOptions): Promise<boolean>;
|
|
103
116
|
clear(): Promise<void>;
|
|
104
117
|
}
|
|
105
118
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrismaAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/PrismaAdapter/PrismaAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PrismaAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/PrismaAdapter/PrismaAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { camelCase } from "change-case";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_MAX_RUNTIME,
|
|
4
|
+
DEFAULT_MODEL_NAME,
|
|
5
|
+
MAX_RUNTIME_GRACE_PERIOD
|
|
6
|
+
} from "../../consts.js";
|
|
3
7
|
import { BaseAdapter } from "../BaseAdapter/BaseAdapter.js";
|
|
4
8
|
import { ModelNameError } from "./errors.js";
|
|
5
9
|
function isPrismaAdapterDelegate(value) {
|
|
@@ -48,7 +52,7 @@ class PrismaAdapter extends BaseAdapter {
|
|
|
48
52
|
queues
|
|
49
53
|
}) {
|
|
50
54
|
const maxRuntimeExpire = new Date(
|
|
51
|
-
(/* @__PURE__ */ new Date()).getTime()
|
|
55
|
+
(/* @__PURE__ */ new Date()).getTime() - ((maxRuntime || DEFAULT_MAX_RUNTIME) + MAX_RUNTIME_GRACE_PERIOD) * 1e3
|
|
52
56
|
);
|
|
53
57
|
const where = {
|
|
54
58
|
AND: [
|
|
@@ -110,13 +114,27 @@ class PrismaAdapter extends BaseAdapter {
|
|
|
110
114
|
// Prisma queries are lazily evaluated and only sent to the db when they are
|
|
111
115
|
// awaited, so do the await here to ensure they actually run (if the user
|
|
112
116
|
// doesn't await the Promise then the queries will never be executed!)
|
|
117
|
+
//
|
|
118
|
+
// All of these updates/deletes are done with updateMany/deleteMany guarded
|
|
119
|
+
// on `failedAt: null` and on `attempts` still being this attempt's value,
|
|
120
|
+
// so the in-flight attempt's outcome can't overwrite or delete the row
|
|
121
|
+
// when:
|
|
122
|
+
// - the job was cancelled (or otherwise permanently failed) while this
|
|
123
|
+
// attempt was running (`failedAt` is no longer null), or
|
|
124
|
+
// - the job was reclaimed by another worker because this attempt stalled
|
|
125
|
+
// past `maxRuntime` plus the grace period (relocking increments
|
|
126
|
+
// `attempts`, so this attempt's remembered value no longer matches).
|
|
127
|
+
// `lockedBy` can't serve as that second fence because worker process names
|
|
128
|
+
// are deterministic and reused across restarts
|
|
113
129
|
async success({ job, runAt, deleteJob }) {
|
|
114
130
|
this.logger.debug(`[CedarJS Jobs] Job ${job.id} success`);
|
|
115
131
|
if (deleteJob) {
|
|
116
|
-
await this.accessor.
|
|
132
|
+
await this.accessor.deleteMany({
|
|
133
|
+
where: { id: job.id, failedAt: null, attempts: job.attempts }
|
|
134
|
+
});
|
|
117
135
|
} else {
|
|
118
|
-
await this.accessor.
|
|
119
|
-
where: { id: job.id },
|
|
136
|
+
await this.accessor.updateMany({
|
|
137
|
+
where: { id: job.id, failedAt: null, attempts: job.attempts },
|
|
120
138
|
data: {
|
|
121
139
|
lockedAt: null,
|
|
122
140
|
lockedBy: null,
|
|
@@ -138,23 +156,38 @@ class PrismaAdapter extends BaseAdapter {
|
|
|
138
156
|
${error.stack}`,
|
|
139
157
|
runAt
|
|
140
158
|
};
|
|
141
|
-
await this.accessor.
|
|
142
|
-
where: { id: job.id },
|
|
159
|
+
await this.accessor.updateMany({
|
|
160
|
+
where: { id: job.id, failedAt: null, attempts: job.attempts },
|
|
143
161
|
data
|
|
144
162
|
});
|
|
145
163
|
}
|
|
146
|
-
//
|
|
147
|
-
|
|
164
|
+
// The job will not be retried: it has either had too many attempts or
|
|
165
|
+
// exceeded maxRuntime (in which case `error` is set so the timeout can be
|
|
166
|
+
// recorded in the same single write that marks the job as failed)
|
|
167
|
+
async failure({ job, deleteJob, error }) {
|
|
148
168
|
if (deleteJob) {
|
|
149
|
-
await this.accessor.
|
|
169
|
+
await this.accessor.deleteMany({
|
|
170
|
+
where: { id: job.id, failedAt: null, attempts: job.attempts }
|
|
171
|
+
});
|
|
150
172
|
} else {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
173
|
+
const data = {
|
|
174
|
+
failedAt: /* @__PURE__ */ new Date(),
|
|
175
|
+
runAt: null
|
|
176
|
+
};
|
|
177
|
+
if (error) {
|
|
178
|
+
data.lastError = `${error.message}
|
|
179
|
+
|
|
180
|
+
${error.stack}`;
|
|
181
|
+
}
|
|
182
|
+
await this.accessor.updateMany({
|
|
183
|
+
where: { id: job.id, failedAt: null, attempts: job.attempts },
|
|
184
|
+
data
|
|
154
185
|
});
|
|
155
186
|
}
|
|
156
187
|
}
|
|
157
|
-
// Schedules a job by creating a new record in the background job table
|
|
188
|
+
// Schedules a job by creating a new record in the background job table.
|
|
189
|
+
// Returns the created job so that callers get access to its `id` (to cancel
|
|
190
|
+
// it later, poll its status, etc.)
|
|
158
191
|
async schedule({
|
|
159
192
|
name,
|
|
160
193
|
path,
|
|
@@ -164,7 +197,7 @@ ${error.stack}`,
|
|
|
164
197
|
queue,
|
|
165
198
|
priority
|
|
166
199
|
}) {
|
|
167
|
-
await this.accessor.create({
|
|
200
|
+
const data = await this.accessor.create({
|
|
168
201
|
data: {
|
|
169
202
|
handler: JSON.stringify({ name, path, args }),
|
|
170
203
|
runAt,
|
|
@@ -173,6 +206,29 @@ ${error.stack}`,
|
|
|
173
206
|
priority
|
|
174
207
|
}
|
|
175
208
|
});
|
|
209
|
+
const row = data;
|
|
210
|
+
return { ...row, name, path, args };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Cancels a job by marking it as permanently failed so no worker will pick
|
|
214
|
+
* it up (or retry it, if it's currently being worked on).
|
|
215
|
+
*
|
|
216
|
+
* If the job is currently running, the in-progress attempt is not
|
|
217
|
+
* interrupted (the worker will stop it when `maxRuntime` is exceeded), but
|
|
218
|
+
* it will not be retried and will not be picked up by another worker once
|
|
219
|
+
* its lock goes stale.
|
|
220
|
+
*/
|
|
221
|
+
async cancel({ jobId }) {
|
|
222
|
+
this.logger.debug(`[CedarJS Jobs] Cancelling job ${jobId}`);
|
|
223
|
+
const { count } = await this.accessor.updateMany({
|
|
224
|
+
where: { id: jobId, failedAt: null, runAt: { not: null } },
|
|
225
|
+
data: {
|
|
226
|
+
failedAt: /* @__PURE__ */ new Date(),
|
|
227
|
+
lastError: "Job cancelled by user",
|
|
228
|
+
runAt: null
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
return count > 0;
|
|
176
232
|
}
|
|
177
233
|
async clear() {
|
|
178
234
|
await this.accessor.deleteMany();
|
package/dist/consts.d.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
export declare const DEFAULT_MAX_ATTEMPTS = 24;
|
|
2
2
|
/** 4 hours in seconds */
|
|
3
3
|
export declare const DEFAULT_MAX_RUNTIME = 14400;
|
|
4
|
+
/**
|
|
5
|
+
* Extra time, in seconds, beyond `maxRuntime` before another worker may treat
|
|
6
|
+
* a job's lock as abandoned. The worker that locked the job enforces its own
|
|
7
|
+
* `maxRuntime` timeout, so this grace period gives it time to record the
|
|
8
|
+
* timeout and mark the job as failed without a second worker claiming (and
|
|
9
|
+
* re-executing) the job while that's happening. Only jobs whose worker died
|
|
10
|
+
* without cleaning up after itself are ever claimed this way.
|
|
11
|
+
*/
|
|
12
|
+
export declare const MAX_RUNTIME_GRACE_PERIOD = 60;
|
|
4
13
|
/** 5 seconds */
|
|
5
14
|
export declare const DEFAULT_SLEEP_DELAY = 5;
|
|
6
15
|
export declare const DEFAULT_DELETE_SUCCESSFUL_JOBS = true;
|
package/dist/consts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,KAAK,CAAA;AACtC,yBAAyB;AACzB,eAAO,MAAM,mBAAmB,QAAS,CAAA;AACzC,gBAAgB;AAChB,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,eAAO,MAAM,8BAA8B,OAAO,CAAA;AAClD,eAAO,MAAM,0BAA0B,QAAQ,CAAA;AAC/C,eAAO,MAAM,cAAc,SAAU,CAAA;AACrC,eAAO,MAAM,aAAa,YAAY,CAAA;AACtC,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAClC,eAAO,MAAM,YAAY,IAAI,CAAA;AAC7B,eAAO,MAAM,kBAAkB,MAAO,CAAA;AACtC,eAAO,MAAM,oBAAoB,sBAAsB,CAAA;AAEvD,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AAEjD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAAY,CAAA;AAC7C;;;GAGG;AACH,eAAO,MAAM,mBAAmB,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,KAAK,CAAA;AACtC,yBAAyB;AACzB,eAAO,MAAM,mBAAmB,QAAS,CAAA;AACzC;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAC1C,gBAAgB;AAChB,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,eAAO,MAAM,8BAA8B,OAAO,CAAA;AAClD,eAAO,MAAM,0BAA0B,QAAQ,CAAA;AAC/C,eAAO,MAAM,cAAc,SAAU,CAAA;AACrC,eAAO,MAAM,aAAa,YAAY,CAAA;AACtC,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAClC,eAAO,MAAM,YAAY,IAAI,CAAA;AAC7B,eAAO,MAAM,kBAAkB,MAAO,CAAA;AACtC,eAAO,MAAM,oBAAoB,sBAAsB,CAAA;AAEvD,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AAEjD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAAY,CAAA;AAC7C;;;GAGG;AACH,eAAO,MAAM,mBAAmB,WAAW,CAAA"}
|
package/dist/consts.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import console from "node:console";
|
|
2
2
|
const DEFAULT_MAX_ATTEMPTS = 24;
|
|
3
3
|
const DEFAULT_MAX_RUNTIME = 14400;
|
|
4
|
+
const MAX_RUNTIME_GRACE_PERIOD = 60;
|
|
4
5
|
const DEFAULT_SLEEP_DELAY = 5;
|
|
5
6
|
const DEFAULT_DELETE_SUCCESSFUL_JOBS = true;
|
|
6
7
|
const DEFAULT_DELETE_FAILED_JOBS = false;
|
|
@@ -29,5 +30,6 @@ export {
|
|
|
29
30
|
DEFAULT_WAIT,
|
|
30
31
|
DEFAULT_WAIT_UNTIL,
|
|
31
32
|
DEFAULT_WORK_QUEUE,
|
|
33
|
+
MAX_RUNTIME_GRACE_PERIOD,
|
|
32
34
|
PROCESS_TITLE_PREFIX
|
|
33
35
|
};
|
package/dist/core/Executor.d.ts
CHANGED
|
@@ -6,6 +6,11 @@ export interface ExecutorOptions {
|
|
|
6
6
|
logger?: BasicLogger;
|
|
7
7
|
/** Defaults to DEFAULT_MAX_ATTEMPTS */
|
|
8
8
|
maxAttempts?: number;
|
|
9
|
+
/**
|
|
10
|
+
* The maximum amount of time, in seconds, that the job is allowed to run
|
|
11
|
+
* before it is marked as failed. Defaults to DEFAULT_MAX_RUNTIME
|
|
12
|
+
*/
|
|
13
|
+
maxRuntime?: number;
|
|
9
14
|
/** Defaults to DEFAULT_DELETE_FAILED_JOBS */
|
|
10
15
|
deleteFailedJobs?: boolean;
|
|
11
16
|
/** Defaults to DEFAULT_DELETE_SUCCESSFUL_JOBS */
|
|
@@ -14,6 +19,7 @@ export interface ExecutorOptions {
|
|
|
14
19
|
export declare const DEFAULTS: {
|
|
15
20
|
logger: Console;
|
|
16
21
|
maxAttempts: number;
|
|
22
|
+
maxRuntime: number;
|
|
17
23
|
deleteFailedJobs: boolean;
|
|
18
24
|
deleteSuccessfulJobs: boolean;
|
|
19
25
|
};
|
|
@@ -23,6 +29,7 @@ export declare class Executor {
|
|
|
23
29
|
logger: NonNullable<ExecutorOptions['logger']>;
|
|
24
30
|
job: BaseJob;
|
|
25
31
|
maxAttempts: NonNullable<ExecutorOptions['maxAttempts']>;
|
|
32
|
+
maxRuntime: NonNullable<ExecutorOptions['maxRuntime']>;
|
|
26
33
|
deleteFailedJobs: NonNullable<ExecutorOptions['deleteFailedJobs']>;
|
|
27
34
|
deleteSuccessfulJobs: NonNullable<ExecutorOptions['deleteSuccessfulJobs']>;
|
|
28
35
|
constructor(options: ExecutorOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Executor.d.ts","sourceRoot":"","sources":["../../src/core/Executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Executor.d.ts","sourceRoot":"","sources":["../../src/core/Executor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AAczE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAIvD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,eAAO,MAAM,QAAQ;;;;;;CAMpB,CAAA;AAED,qBAAa,QAAQ;IACnB,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;IAClC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC9C,GAAG,EAAE,OAAO,CAAA;IACZ,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAA;IACxD,UAAU,EAAE,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAA;IACtD,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAClE,oBAAoB,EAAE,WAAW,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBAE9D,OAAO,EAAE,eAAe;IAsBpC,IAAI,aAAa,WAEhB;IAEK,OAAO;IAuGb,mBAAmB,CAAC,QAAQ,EAAE,MAAM;CAGrC"}
|
package/dist/core/Executor.js
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
|
+
import { setTimeout, clearTimeout } from "node:timers";
|
|
1
2
|
import { CronExpressionParser } from "cron-parser";
|
|
2
3
|
import {
|
|
3
4
|
DEFAULT_MAX_ATTEMPTS,
|
|
5
|
+
DEFAULT_MAX_RUNTIME,
|
|
4
6
|
DEFAULT_DELETE_FAILED_JOBS,
|
|
5
7
|
DEFAULT_DELETE_SUCCESSFUL_JOBS,
|
|
6
8
|
DEFAULT_LOGGER
|
|
7
9
|
} from "../consts.js";
|
|
8
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
AdapterRequiredError,
|
|
12
|
+
JobRequiredError,
|
|
13
|
+
JobTimeoutError
|
|
14
|
+
} from "../errors.js";
|
|
9
15
|
import { loadJob } from "../loaders.js";
|
|
16
|
+
import { executionContext } from "./executionContext.js";
|
|
10
17
|
const DEFAULTS = {
|
|
11
18
|
logger: DEFAULT_LOGGER,
|
|
12
19
|
maxAttempts: DEFAULT_MAX_ATTEMPTS,
|
|
20
|
+
maxRuntime: DEFAULT_MAX_RUNTIME,
|
|
13
21
|
deleteFailedJobs: DEFAULT_DELETE_FAILED_JOBS,
|
|
14
22
|
deleteSuccessfulJobs: DEFAULT_DELETE_SUCCESSFUL_JOBS
|
|
15
23
|
};
|
|
@@ -19,6 +27,7 @@ class Executor {
|
|
|
19
27
|
logger;
|
|
20
28
|
job;
|
|
21
29
|
maxAttempts;
|
|
30
|
+
maxRuntime;
|
|
22
31
|
deleteFailedJobs;
|
|
23
32
|
deleteSuccessfulJobs;
|
|
24
33
|
constructor(options) {
|
|
@@ -33,6 +42,7 @@ class Executor {
|
|
|
33
42
|
this.logger = this.options.logger;
|
|
34
43
|
this.job = this.options.job;
|
|
35
44
|
this.maxAttempts = this.options.maxAttempts;
|
|
45
|
+
this.maxRuntime = this.options.maxRuntime || DEFAULT_MAX_RUNTIME;
|
|
36
46
|
this.deleteFailedJobs = this.options.deleteFailedJobs;
|
|
37
47
|
this.deleteSuccessfulJobs = this.options.deleteSuccessfulJobs;
|
|
38
48
|
}
|
|
@@ -41,34 +51,71 @@ class Executor {
|
|
|
41
51
|
}
|
|
42
52
|
async perform() {
|
|
43
53
|
this.logger.info(`[CedarJS Jobs] Started job ${this.jobIdentifier}`);
|
|
54
|
+
const abortController = new AbortController();
|
|
55
|
+
let timeoutId;
|
|
56
|
+
let performPromise;
|
|
44
57
|
try {
|
|
45
|
-
const
|
|
46
|
-
|
|
58
|
+
const timeoutPromise = new Promise((_resolve, reject) => {
|
|
59
|
+
timeoutId = setTimeout(() => {
|
|
60
|
+
reject(new JobTimeoutError(this.jobIdentifier, this.maxRuntime));
|
|
61
|
+
}, this.maxRuntime * 1e3);
|
|
62
|
+
});
|
|
63
|
+
performPromise = (async () => {
|
|
64
|
+
const job = await loadJob({ name: this.job.name, path: this.job.path });
|
|
65
|
+
await executionContext.run(
|
|
66
|
+
{ signal: abortController.signal, job: this.job },
|
|
67
|
+
() => job.perform(...this.job.args)
|
|
68
|
+
);
|
|
69
|
+
})();
|
|
70
|
+
await Promise.race([performPromise, timeoutPromise]);
|
|
47
71
|
const runAt = this.job.cron ? CronExpressionParser.parse(this.job.cron).next().toDate() : void 0;
|
|
48
72
|
await this.adapter.success({
|
|
49
73
|
job: this.job,
|
|
50
74
|
runAt,
|
|
51
75
|
deleteJob: !runAt && this.deleteSuccessfulJobs
|
|
52
76
|
});
|
|
53
|
-
} catch (
|
|
77
|
+
} catch (rawError) {
|
|
78
|
+
const error = rawError instanceof Error ? rawError : new Error(String(rawError));
|
|
79
|
+
const timedOut = error instanceof JobTimeoutError;
|
|
80
|
+
if (timedOut) {
|
|
81
|
+
abortController.abort(error);
|
|
82
|
+
performPromise?.catch(() => {
|
|
83
|
+
});
|
|
84
|
+
}
|
|
54
85
|
const errorMessage = `[CedarJS Jobs] Error in job ${this.jobIdentifier}: ${error.message}`;
|
|
55
86
|
this.logger.error(errorMessage);
|
|
56
87
|
this.logger.error(error.stack);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
)
|
|
62
|
-
error
|
|
63
|
-
});
|
|
64
|
-
if (this.job.attempts >= this.maxAttempts) {
|
|
65
|
-
const maxAttemptsMessage = `[CedarJS Jobs] Failed job ${this.jobIdentifier}: reached max attempts (${this.maxAttempts})`;
|
|
66
|
-
this.logger.warn(this.job, maxAttemptsMessage);
|
|
88
|
+
if (timedOut) {
|
|
89
|
+
this.logger.warn(
|
|
90
|
+
this.job,
|
|
91
|
+
`[CedarJS Jobs] Failed job ${this.jobIdentifier}: exceeded max runtime (${this.maxRuntime} seconds)`
|
|
92
|
+
);
|
|
67
93
|
await this.adapter.failure({
|
|
68
94
|
job: this.job,
|
|
69
|
-
deleteJob: this.deleteFailedJobs
|
|
95
|
+
deleteJob: this.deleteFailedJobs,
|
|
96
|
+
error
|
|
97
|
+
});
|
|
98
|
+
} else {
|
|
99
|
+
await this.adapter.error({
|
|
100
|
+
job: this.job,
|
|
101
|
+
runAt: new Date(
|
|
102
|
+
(/* @__PURE__ */ new Date()).getTime() + this.backoffMilliseconds(this.job.attempts)
|
|
103
|
+
),
|
|
104
|
+
error
|
|
70
105
|
});
|
|
106
|
+
if (this.job.attempts >= this.maxAttempts) {
|
|
107
|
+
this.logger.warn(
|
|
108
|
+
this.job,
|
|
109
|
+
`[CedarJS Jobs] Failed job ${this.jobIdentifier}: reached max attempts (${this.maxAttempts})`
|
|
110
|
+
);
|
|
111
|
+
await this.adapter.failure({
|
|
112
|
+
job: this.job,
|
|
113
|
+
deleteJob: this.deleteFailedJobs
|
|
114
|
+
});
|
|
115
|
+
}
|
|
71
116
|
}
|
|
117
|
+
} finally {
|
|
118
|
+
clearTimeout(timeoutId);
|
|
72
119
|
}
|
|
73
120
|
}
|
|
74
121
|
backoffMilliseconds(attempts) {
|
|
@@ -13,7 +13,9 @@ export declare class JobManager<TAdapters extends Adapters, TQueues extends Queu
|
|
|
13
13
|
logger: TLogger;
|
|
14
14
|
workers: WorkerConfig<TAdapters, TQueues>[];
|
|
15
15
|
constructor(config: JobManagerConfig<TAdapters, TQueues extends string[] ? never : TQueues, TLogger>);
|
|
16
|
-
createScheduler(schedulerConfig: CreateSchedulerConfig<TAdapters>): <TJob extends Job<TQueues, any[]>>(job: TJob, ...argsAndOptions: CreateSchedulerArgs<TJob>) => Promise<
|
|
16
|
+
createScheduler<TAdapterName extends keyof TAdapters>(schedulerConfig: CreateSchedulerConfig<TAdapters, TAdapterName>): (<TJob extends Job<TQueues, any[]>>(job: TJob, ...argsAndOptions: CreateSchedulerArgs<TJob>) => Promise<void>) & {
|
|
17
|
+
cancel: (jobId: string | number) => Promise<boolean>;
|
|
18
|
+
};
|
|
17
19
|
createJob<TArgs extends unknown[]>(jobDefinition: JobDefinition<TQueues, TArgs>): Job<TQueues, TArgs>;
|
|
18
20
|
createWorker({ index, workoff, clear, processName }: CreateWorkerArgs): Worker;
|
|
19
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobManager.d.ts","sourceRoot":"","sources":["../../src/core/JobManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,GAAG,EACH,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IACjC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,UAAU,CACrB,SAAS,SAAS,QAAQ,EAC1B,OAAO,SAAS,UAAU,EAC1B,OAAO,SAAS,WAAW;IAE3B,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAA;gBAGzC,MAAM,EAAE,gBAAgB,CACtB,SAAS,EAGT,OAAO,SAAS,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,EAC1C,OAAO,CACR;IAQH,eAAe,CAAC,eAAe,EAAE,qBAAqB,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"JobManager.d.ts","sourceRoot":"","sources":["../../src/core/JobManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,GAAG,EACH,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IACjC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,UAAU,CACrB,SAAS,SAAS,QAAQ,EAC1B,OAAO,SAAS,UAAU,EAC1B,OAAO,SAAS,WAAW;IAE3B,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAA;gBAGzC,MAAM,EAAE,gBAAgB,CACtB,SAAS,EAGT,OAAO,SAAS,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,EAC1C,OAAO,CACR;IAQH,eAAe,CAAC,YAAY,SAAS,MAAM,SAAS,EAClD,eAAe,EAAE,qBAAqB,CAAC,SAAS,EAAE,YAAY,CAAC,KAO7C,IAAI,SAAS,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAC3C,IAAI,qBACU,mBAAmB,CAAC,IAAI,CAAC;wBAc5B,MAAM,GAAG,MAAM;;IAInC,SAAS,CAAC,KAAK,SAAS,OAAO,EAAE,EAC/B,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAC3C,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;IAOtB,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,gBAAgB;CAqBtE"}
|
package/dist/core/JobManager.js
CHANGED
|
@@ -17,13 +17,16 @@ class JobManager {
|
|
|
17
17
|
adapter: this.adapters[schedulerConfig.adapter],
|
|
18
18
|
logger: schedulerConfig.logger ?? this.logger
|
|
19
19
|
});
|
|
20
|
-
|
|
20
|
+
const schedule = (job, ...argsAndOptions) => {
|
|
21
21
|
const [possibleArgs, possibleOptions] = argsAndOptions;
|
|
22
22
|
const didPassArgs = Array.isArray(possibleArgs);
|
|
23
23
|
const args = didPassArgs ? possibleArgs : [];
|
|
24
24
|
const options = didPassArgs ? possibleOptions : possibleArgs;
|
|
25
25
|
return scheduler.schedule({ job, args, options });
|
|
26
26
|
};
|
|
27
|
+
return Object.assign(schedule, {
|
|
28
|
+
cancel: (jobId) => scheduler.cancel(jobId)
|
|
29
|
+
});
|
|
27
30
|
}
|
|
28
31
|
createJob(jobDefinition) {
|
|
29
32
|
return jobDefinition;
|
package/dist/core/Scheduler.d.ts
CHANGED
|
@@ -21,7 +21,17 @@ export declare class Scheduler<TAdapter extends BaseAdapter> {
|
|
|
21
21
|
job: TJob;
|
|
22
22
|
args: Parameters<TJob['perform']> | never[];
|
|
23
23
|
options?: ScheduleJobOptions;
|
|
24
|
-
}): Promise<
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Cancel a scheduled job so that it will not be run (if it's still queued)
|
|
27
|
+
* or not be retried (if it's currently running). Requires an adapter that
|
|
28
|
+
* implements the optional `cancel()` method, like the `PrismaAdapter`.
|
|
29
|
+
*
|
|
30
|
+
* Returns whatever the adapter's `cancel()` returns (for the
|
|
31
|
+
* `PrismaAdapter` that's `true` if a job was cancelled and `false` if no
|
|
32
|
+
* cancellable job with the given id was found)
|
|
33
|
+
*/
|
|
34
|
+
cancel(jobId: string | number): Promise<boolean>;
|
|
25
35
|
}
|
|
26
36
|
export {};
|
|
27
37
|
//# sourceMappingURL=Scheduler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../src/core/Scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,wCAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../src/core/Scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAa/C,OAAO,KAAK,EACV,WAAW,EACX,GAAG,EACH,UAAU,EACV,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAEpB,UAAU,eAAe,CAAC,QAAQ,SAAS,WAAW;IACpD,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,qBAAa,SAAS,CAAC,QAAQ,SAAS,WAAW;IACjD,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAE5C,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC;IAS1D,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE;IAU1E,YAAY,CAAC,IAAI,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EACpD,GAAG,EACH,IAAI,EACJ,OAAO,GACR,EAAE;QACD,GAAG,EAAE,IAAI,CAAA;QACT,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;QAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAA;KAC7B,GAAG,eAAe;IA4Bb,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,EACtD,GAAG,EACH,IAAI,EACJ,OAAO,GACR,EAAE;QACD,GAAG,EAAE,IAAI,CAAA;QACT,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;QAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAA;KAC7B;IAqBD;;;;;;;;OAQG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CASpC"}
|
package/dist/core/Scheduler.js
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from "../consts.js";
|
|
7
7
|
import {
|
|
8
8
|
AdapterNotConfiguredError,
|
|
9
|
+
CancelNotImplementedError,
|
|
9
10
|
QueueNotDefinedError,
|
|
10
11
|
SchedulingError
|
|
11
12
|
} from "../errors.js";
|
|
@@ -68,15 +69,31 @@ class Scheduler {
|
|
|
68
69
|
});
|
|
69
70
|
this.logger.info(payload, `[CedarJS Jobs] Scheduling ${job.name}`);
|
|
70
71
|
try {
|
|
71
|
-
await this.adapter.schedule(payload);
|
|
72
|
-
return true;
|
|
72
|
+
return await this.adapter.schedule(payload);
|
|
73
73
|
} catch (e) {
|
|
74
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
74
75
|
throw new SchedulingError(
|
|
75
76
|
`[CedarJS Jobs] Exception when scheduling ${payload.name}`,
|
|
76
|
-
|
|
77
|
+
error
|
|
77
78
|
);
|
|
78
79
|
}
|
|
79
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Cancel a scheduled job so that it will not be run (if it's still queued)
|
|
83
|
+
* or not be retried (if it's currently running). Requires an adapter that
|
|
84
|
+
* implements the optional `cancel()` method, like the `PrismaAdapter`.
|
|
85
|
+
*
|
|
86
|
+
* Returns whatever the adapter's `cancel()` returns (for the
|
|
87
|
+
* `PrismaAdapter` that's `true` if a job was cancelled and `false` if no
|
|
88
|
+
* cancellable job with the given id was found)
|
|
89
|
+
*/
|
|
90
|
+
async cancel(jobId) {
|
|
91
|
+
if (!this.adapter.cancel) {
|
|
92
|
+
throw new CancelNotImplementedError();
|
|
93
|
+
}
|
|
94
|
+
this.logger.info(`[CedarJS Jobs] Cancelling job ${jobId}`);
|
|
95
|
+
return await this.adapter.cancel({ jobId });
|
|
96
|
+
}
|
|
80
97
|
}
|
|
81
98
|
export {
|
|
82
99
|
Scheduler
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../src/core/Worker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AAUzE,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAInE,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IAGxD,OAAO,EAAE,WAAW,CAAA;IACpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,MAAM,EAAE,MAAM,EAAE,CAAA;IAIhB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,KAAK,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;AAc9C,qBAAa,MAAM;;IACjB,OAAO,EAAE,eAAe,CAAA;IACxB,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAC/B,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IAC3C,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IACzC,oBAAoB,EAAE,eAAe,CAAC,sBAAsB,CAAC,CAAA;IAC7D,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAA;IACrD,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IACzC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,aAAa,EAAE,IAAI,CAAA;gBAEP,OAAO,EAAE,aAAa;IA2ElC,GAAG;IAQH,IAAI,UAAU,WAMb;
|
|
1
|
+
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../src/core/Worker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AAUzE,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAInE,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IAGxD,OAAO,EAAE,WAAW,CAAA;IACpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,MAAM,EAAE,MAAM,EAAE,CAAA;IAIhB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,KAAK,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;AAc9C,qBAAa,MAAM;;IACjB,OAAO,EAAE,eAAe,CAAA;IACxB,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAC/B,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IAC3C,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IACzC,oBAAoB,EAAE,eAAe,CAAC,sBAAsB,CAAC,CAAA;IAC7D,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAA;IACrD,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;IACzC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,aAAa,EAAE,IAAI,CAAA;gBAEP,OAAO,EAAE,aAAa;IA2ElC,GAAG;IAQH,IAAI,UAAU,WAMb;CAmDF"}
|
package/dist/core/Worker.js
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import type { BaseJob } from '../types.js';
|
|
3
|
+
export interface JobExecutionContext {
|
|
4
|
+
/**
|
|
5
|
+
* Aborted when the job exceeds the worker's `maxRuntime` (or when the
|
|
6
|
+
* executor otherwise wants the job to stop). Pass this to `fetch()`, child
|
|
7
|
+
* processes, or check `signal.aborted` in long-running loops so the job can
|
|
8
|
+
* actually stop doing work when it times out — Node.js promises themselves
|
|
9
|
+
* cannot be forcefully killed.
|
|
10
|
+
*/
|
|
11
|
+
signal: AbortSignal;
|
|
12
|
+
/** The job that is currently being executed */
|
|
13
|
+
job: BaseJob;
|
|
14
|
+
}
|
|
15
|
+
export declare const executionContext: AsyncLocalStorage<JobExecutionContext>;
|
|
16
|
+
/**
|
|
17
|
+
* Returns the execution context for the currently running job, or `undefined`
|
|
18
|
+
* when called outside of a job's `perform()` function.
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { getJobExecutionContext } from '@cedarjs/jobs'
|
|
22
|
+
*
|
|
23
|
+
* export const SampleJob = jobs.createJob({
|
|
24
|
+
* queue: 'default',
|
|
25
|
+
* perform: async () => {
|
|
26
|
+
* const context = getJobExecutionContext()
|
|
27
|
+
* await fetch('https://example.com', { signal: context?.signal })
|
|
28
|
+
* },
|
|
29
|
+
* })
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function getJobExecutionContext(): JobExecutionContext | undefined;
|
|
33
|
+
//# sourceMappingURL=executionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionContext.d.ts","sourceRoot":"","sources":["../../src/core/executionContext.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,MAAM,EAAE,WAAW,CAAA;IAEnB,+CAA+C;IAC/C,GAAG,EAAE,OAAO,CAAA;CACb;AAED,eAAO,MAAM,gBAAgB,wCAA+C,CAAA;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,SAAS,CAExE"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -95,6 +95,20 @@ export declare class SchedulingError extends RethrownJobError {
|
|
|
95
95
|
export declare class PerformError extends RethrownJobError {
|
|
96
96
|
constructor(message: string, error: Error);
|
|
97
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Thrown (and recorded as the job's error) when a job runs longer than the
|
|
100
|
+
* worker's `maxRuntime`
|
|
101
|
+
*/
|
|
102
|
+
export declare class JobTimeoutError extends CedarJSJobsError {
|
|
103
|
+
constructor(jobIdentifier: string, maxRuntime: number);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Thrown when trying to cancel a job through an adapter that does not
|
|
107
|
+
* implement the optional `cancel()` method
|
|
108
|
+
*/
|
|
109
|
+
export declare class CancelNotImplementedError extends CedarJSJobsError {
|
|
110
|
+
constructor();
|
|
111
|
+
}
|
|
98
112
|
export declare class QueueNotDefinedError extends CedarJSJobsError {
|
|
99
113
|
constructor();
|
|
100
114
|
}
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;;CAI9D;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;;CAIzD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;;CAIxD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;;CAIrD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;gBACxC,IAAI,EAAE,MAAM;CAGzB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC9C,IAAI,EAAE,MAAM;CAGzB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;;CASzD;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;gBAC5C,IAAI,EAAE,MAAM;CAKzB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;gBAC3C,IAAI,EAAE,MAAM;CAKzB;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;gBACjD,IAAI,EAAE,MAAM;CAGzB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,aAAa,EAAE,KAAK,CAAA;IACpB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;gBAE1B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAqB1C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1C;AAED,qBAAa,oBAAqB,SAAQ,gBAAgB;;CAIzD;AAED,qBAAa,8BAA+B,SAAQ,gBAAgB;gBACtD,KAAK,EAAE,MAAM;CAG1B"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;;CAI9D;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;;CAIzD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;;CAIxD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;;CAIrD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;gBACxC,IAAI,EAAE,MAAM;CAGzB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC9C,IAAI,EAAE,MAAM;CAGzB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;;CASzD;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;gBAC5C,IAAI,EAAE,MAAM;CAKzB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,gBAAgB;gBAC3C,IAAI,EAAE,MAAM;CAKzB;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;gBACjD,IAAI,EAAE,MAAM;CAGzB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,aAAa,EAAE,KAAK,CAAA;IACpB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;gBAE1B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAqB1C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAG1C;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,gBAAgB;gBACvC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAMtD;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;;CAI9D;AAED,qBAAa,oBAAqB,SAAQ,gBAAgB;;CAIzD;AAED,qBAAa,8BAA+B,SAAQ,gBAAgB;gBACtD,KAAK,EAAE,MAAM;CAG1B"}
|
package/dist/errors.js
CHANGED
|
@@ -87,6 +87,18 @@ class PerformError extends RethrownJobError {
|
|
|
87
87
|
super(message, error);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
+
class JobTimeoutError extends CedarJSJobsError {
|
|
91
|
+
constructor(jobIdentifier, maxRuntime) {
|
|
92
|
+
super(
|
|
93
|
+
`Job ${jobIdentifier} exceeded max runtime of ${maxRuntime} seconds and was marked as failed`
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
class CancelNotImplementedError extends CedarJSJobsError {
|
|
98
|
+
constructor() {
|
|
99
|
+
super("The configured adapter does not support cancelling jobs");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
90
102
|
class QueueNotDefinedError extends CedarJSJobsError {
|
|
91
103
|
constructor() {
|
|
92
104
|
super("Scheduler requires a named `queue` to place jobs in");
|
|
@@ -101,10 +113,12 @@ export {
|
|
|
101
113
|
AdapterNotConfiguredError,
|
|
102
114
|
AdapterNotFoundError,
|
|
103
115
|
AdapterRequiredError,
|
|
116
|
+
CancelNotImplementedError,
|
|
104
117
|
CedarJSJobsError,
|
|
105
118
|
JobExportNotFoundError,
|
|
106
119
|
JobNotFoundError,
|
|
107
120
|
JobRequiredError,
|
|
121
|
+
JobTimeoutError,
|
|
108
122
|
JobsLibNotFoundError,
|
|
109
123
|
LoggerNotFoundError,
|
|
110
124
|
PerformError,
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,11 @@ export * from './errors.js';
|
|
|
2
2
|
export { JobManager } from './core/JobManager.js';
|
|
3
3
|
export { Executor } from './core/Executor.js';
|
|
4
4
|
export { Worker } from './core/Worker.js';
|
|
5
|
+
export { getJobExecutionContext } from './core/executionContext.js';
|
|
6
|
+
export type { JobExecutionContext } from './core/executionContext.js';
|
|
5
7
|
export { BaseAdapter } from './adapters/BaseAdapter/BaseAdapter.js';
|
|
6
8
|
export { PrismaAdapter } from './adapters/PrismaAdapter/PrismaAdapter.js';
|
|
9
|
+
export { loadJobsManager, setJobLoaderOverrides } from './loaders.js';
|
|
10
|
+
export type { JobLoaderOverrides } from './loaders.js';
|
|
7
11
|
export type * from './types.js';
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AAEzE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACrE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEtD,mBAAmB,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,12 +2,17 @@ export * from "./errors.js";
|
|
|
2
2
|
import { JobManager } from "./core/JobManager.js";
|
|
3
3
|
import { Executor } from "./core/Executor.js";
|
|
4
4
|
import { Worker } from "./core/Worker.js";
|
|
5
|
+
import { getJobExecutionContext } from "./core/executionContext.js";
|
|
5
6
|
import { BaseAdapter } from "./adapters/BaseAdapter/BaseAdapter.js";
|
|
6
7
|
import { PrismaAdapter } from "./adapters/PrismaAdapter/PrismaAdapter.js";
|
|
8
|
+
import { loadJobsManager, setJobLoaderOverrides } from "./loaders.js";
|
|
7
9
|
export {
|
|
8
10
|
BaseAdapter,
|
|
9
11
|
Executor,
|
|
10
12
|
JobManager,
|
|
11
13
|
PrismaAdapter,
|
|
12
|
-
Worker
|
|
14
|
+
Worker,
|
|
15
|
+
getJobExecutionContext,
|
|
16
|
+
loadJobsManager,
|
|
17
|
+
setJobLoaderOverrides
|
|
13
18
|
};
|
package/dist/loaders.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { JobManager } from './core/JobManager.js';
|
|
2
2
|
import type { Adapters, BasicLogger, Job, JobComputedProperties, QueueNames } from './types.js';
|
|
3
|
+
export interface JobLoaderOverrides {
|
|
4
|
+
loadJobsManager: () => Promise<JobManager<Adapters, QueueNames, BasicLogger>>;
|
|
5
|
+
loadJob: (computedProperties: JobComputedProperties) => Promise<Job<QueueNames, unknown[]>>;
|
|
6
|
+
}
|
|
7
|
+
export declare const setJobLoaderOverrides: (newOverrides: JobLoaderOverrides | undefined) => void;
|
|
3
8
|
/**
|
|
4
9
|
* Loads the job manager from the users project
|
|
5
10
|
*
|
|
@@ -9,5 +14,5 @@ export declare const loadJobsManager: () => Promise<JobManager<Adapters, QueueNa
|
|
|
9
14
|
/**
|
|
10
15
|
* Load a specific job implementation from the users project
|
|
11
16
|
*/
|
|
12
|
-
export declare const loadJob: (
|
|
17
|
+
export declare const loadJob: (computedProperties: JobComputedProperties) => Promise<Job<QueueNames, unknown[]>>;
|
|
13
18
|
//# sourceMappingURL=loaders.d.ts.map
|
package/dist/loaders.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loaders.d.ts","sourceRoot":"","sources":["../src/loaders.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,GAAG,EACH,qBAAqB,EACrB,UAAU,EACX,MAAM,YAAY,CAAA;AAGnB;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAa,OAAO,CAC9C,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"loaders.d.ts","sourceRoot":"","sources":["../src/loaders.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,GAAG,EACH,qBAAqB,EACrB,UAAU,EACX,MAAM,YAAY,CAAA;AAGnB,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;IAC7E,OAAO,EAAE,CACP,kBAAkB,EAAE,qBAAqB,KACtC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;CACzC;AASD,eAAO,MAAM,qBAAqB,GAChC,cAAc,kBAAkB,GAAG,SAAS,SAG7C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAa,OAAO,CAC9C,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAoB9C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,GAClB,oBAAoB,qBAAqB,KACxC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAsBpC,CAAA"}
|
package/dist/loaders.js
CHANGED
|
@@ -3,7 +3,14 @@ import path from "node:path";
|
|
|
3
3
|
import { getPaths } from "@cedarjs/project-config";
|
|
4
4
|
import { JobsLibNotFoundError, JobNotFoundError } from "./errors.js";
|
|
5
5
|
import { makeFilePath } from "./util.js";
|
|
6
|
+
let overrides;
|
|
7
|
+
const setJobLoaderOverrides = (newOverrides) => {
|
|
8
|
+
overrides = newOverrides;
|
|
9
|
+
};
|
|
6
10
|
const loadJobsManager = async () => {
|
|
11
|
+
if (overrides) {
|
|
12
|
+
return overrides.loadJobsManager();
|
|
13
|
+
}
|
|
7
14
|
const jobsConfigPath = getPaths().api.distJobsConfig;
|
|
8
15
|
if (!jobsConfigPath) {
|
|
9
16
|
throw new JobsLibNotFoundError();
|
|
@@ -15,10 +22,11 @@ const loadJobsManager = async () => {
|
|
|
15
22
|
}
|
|
16
23
|
return jobs;
|
|
17
24
|
};
|
|
18
|
-
const loadJob = async ({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
25
|
+
const loadJob = async (computedProperties) => {
|
|
26
|
+
if (overrides) {
|
|
27
|
+
return overrides.loadJob(computedProperties);
|
|
28
|
+
}
|
|
29
|
+
const { name: jobName, path: jobPath } = computedProperties;
|
|
22
30
|
const completeJobPath = path.join(getPaths().api.distJobs, jobPath) + ".js";
|
|
23
31
|
if (!fs.existsSync(completeJobPath)) {
|
|
24
32
|
throw new JobNotFoundError(jobName);
|
|
@@ -32,5 +40,6 @@ const loadJob = async ({
|
|
|
32
40
|
};
|
|
33
41
|
export {
|
|
34
42
|
loadJob,
|
|
35
|
-
loadJobsManager
|
|
43
|
+
loadJobsManager,
|
|
44
|
+
setJobLoaderOverrides
|
|
36
45
|
};
|
package/dist/types.d.ts
CHANGED
|
@@ -54,8 +54,13 @@ export interface WorkerSharedOptions {
|
|
|
54
54
|
*/
|
|
55
55
|
maxAttempts?: number;
|
|
56
56
|
/**
|
|
57
|
-
* The maximum amount of time in seconds that a job
|
|
58
|
-
*
|
|
57
|
+
* The maximum amount of time in seconds that a job is allowed to run. A job
|
|
58
|
+
* that runs longer than this is marked as failed (it will not be retried)
|
|
59
|
+
* and the `AbortSignal` available inside the job via
|
|
60
|
+
* `getJobExecutionContext()` is aborted. This is also how long a job's lock
|
|
61
|
+
* can be held before another worker considers the lock stale and is allowed
|
|
62
|
+
* to pick the job up again (which only happens if the locking worker
|
|
63
|
+
* crashed and could not clean up after itself).
|
|
59
64
|
*
|
|
60
65
|
* @default 14,400 (4 hours)
|
|
61
66
|
*/
|
|
@@ -112,12 +117,12 @@ export interface JobManagerConfig<TAdapters extends Adapters, TQueues extends Qu
|
|
|
112
117
|
*/
|
|
113
118
|
workers: WorkerConfig<TAdapters, TQueues>[];
|
|
114
119
|
}
|
|
115
|
-
export interface CreateSchedulerConfig<TAdapters extends Adapters> {
|
|
120
|
+
export interface CreateSchedulerConfig<TAdapters extends Adapters, TAdapterName extends keyof TAdapters = keyof TAdapters> {
|
|
116
121
|
/**
|
|
117
122
|
* The name of the adapter to use for this scheduler. This must be one of the
|
|
118
123
|
* keys in the `adapters` object when you created the `JobManager`.
|
|
119
124
|
*/
|
|
120
|
-
adapter:
|
|
125
|
+
adapter: TAdapterName;
|
|
121
126
|
/**
|
|
122
127
|
* The logger to use for this scheduler. If not provided, the logger from the
|
|
123
128
|
* `JobManager` will be used.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC,OAAO,iBAAiB,EAAE,QAAQ,EAAE,CAAA;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAExE,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACxD,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACvD,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IACvD,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CACzD;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;CACjC;AACD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,CAAA;AAEjD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAElD,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;AAEvD,MAAM,WAAW,YAAY,CAC3B,SAAS,SAAS,QAAQ,EAC1B,OAAO,SAAS,UAAU,CAC1B,SAAQ,mBAAmB;IAC3B;;;OAGG;IACH,OAAO,EAAE,MAAM,SAAS,CAAA;IAExB;;;;OAIG;IACH,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;IAEhD;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cedarjs/jobs",
|
|
3
|
-
"version": "5.0.7-next.
|
|
3
|
+
"version": "5.0.7-next.335",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/cedarjs/cedar.git",
|
|
@@ -37,13 +37,13 @@
|
|
|
37
37
|
"test:watch": "vitest"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@cedarjs/cli-helpers": "5.0.7-next.
|
|
41
|
-
"@cedarjs/project-config": "5.0.7-next.
|
|
42
|
-
"cron-parser": "5.
|
|
43
|
-
"type-fest": "5.
|
|
40
|
+
"@cedarjs/cli-helpers": "5.0.7-next.335",
|
|
41
|
+
"@cedarjs/project-config": "5.0.7-next.335",
|
|
42
|
+
"cron-parser": "5.10.0",
|
|
43
|
+
"type-fest": "5.8.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@cedarjs/framework-tools": "5.0.7-next.
|
|
46
|
+
"@cedarjs/framework-tools": "5.0.7-next.335",
|
|
47
47
|
"@prisma/client": "7.8.0",
|
|
48
48
|
"concurrently": "9.2.4",
|
|
49
49
|
"publint": "0.3.23",
|