@deenruv/job-queue-plugin 1.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 +23 -0
- package/README.md +94 -0
- package/package/bullmq/bullmq-job-queue-strategy.d.ts +39 -0
- package/package/bullmq/bullmq-job-queue-strategy.js +362 -0
- package/package/bullmq/bullmq-job-queue-strategy.js.map +1 -0
- package/package/bullmq/constants.d.ts +4 -0
- package/package/bullmq/constants.js +16 -0
- package/package/bullmq/constants.js.map +1 -0
- package/package/bullmq/index.d.ts +2 -0
- package/package/bullmq/index.js +27 -0
- package/package/bullmq/index.js.map +1 -0
- package/package/bullmq/plugin.d.ts +133 -0
- package/package/bullmq/plugin.js +171 -0
- package/package/bullmq/plugin.js.map +1 -0
- package/package/bullmq/redis-health-check-strategy.d.ts +6 -0
- package/package/bullmq/redis-health-check-strategy.js +15 -0
- package/package/bullmq/redis-health-check-strategy.js.map +1 -0
- package/package/bullmq/redis-health-indicator.d.ts +8 -0
- package/package/bullmq/redis-health-indicator.js +80 -0
- package/package/bullmq/redis-health-indicator.js.map +1 -0
- package/package/bullmq/redis-job-buffer-storage-strategy.d.ts +16 -0
- package/package/bullmq/redis-job-buffer-storage-strategy.js +82 -0
- package/package/bullmq/redis-job-buffer-storage-strategy.js.map +1 -0
- package/package/bullmq/scripts/get-jobs-by-type.d.ts +10 -0
- package/package/bullmq/scripts/get-jobs-by-type.js +114 -0
- package/package/bullmq/scripts/get-jobs-by-type.js.map +1 -0
- package/package/bullmq/types.d.ts +101 -0
- package/package/bullmq/types.js +3 -0
- package/package/bullmq/types.js.map +1 -0
- package/package/index.d.ts +4 -0
- package/package/index.js +8 -0
- package/package/index.js.map +1 -0
- package/package/pub-sub/constants.d.ts +2 -0
- package/package/pub-sub/constants.js +6 -0
- package/package/pub-sub/constants.js.map +1 -0
- package/package/pub-sub/index.d.ts +2 -0
- package/package/pub-sub/index.js +19 -0
- package/package/pub-sub/index.js.map +1 -0
- package/package/pub-sub/options.d.ts +13 -0
- package/package/pub-sub/options.js +3 -0
- package/package/pub-sub/options.js.map +1 -0
- package/package/pub-sub/plugin.d.ts +6 -0
- package/package/pub-sub/plugin.js +36 -0
- package/package/pub-sub/plugin.js.map +1 -0
- package/package/pub-sub/pub-sub-job-queue-strategy.d.ts +16 -0
- package/package/pub-sub/pub-sub-job-queue-strategy.js +123 -0
- package/package/pub-sub/pub-sub-job-queue-strategy.js.map +1 -0
- package/package.json +42 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# License 1
|
|
2
|
+
|
|
3
|
+
The MIT License
|
|
4
|
+
|
|
5
|
+
Copyright (c) 2025-present Aexol
|
|
6
|
+
|
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
|
|
9
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
12
|
+
|
|
13
|
+
# License 2
|
|
14
|
+
|
|
15
|
+
The MIT License
|
|
16
|
+
|
|
17
|
+
Copyright (c) 2018-2025 Michael Bromley
|
|
18
|
+
|
|
19
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
20
|
+
|
|
21
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
22
|
+
|
|
23
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# @deenruv/job-queue-plugin
|
|
2
|
+
|
|
3
|
+
Alternate `JobQueueStrategy` implementations for Deenruv, providing scalable alternatives to the default database-polling approach.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @deenruv/job-queue-plugin
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Sub-Plugins
|
|
12
|
+
|
|
13
|
+
### BullMQJobQueuePlugin
|
|
14
|
+
|
|
15
|
+
A drop-in replacement for `DefaultJobQueuePlugin` using [BullMQ](https://github.com/taskforcesh/bullmq) with Redis for push-based job processing.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm add bullmq
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { BullMQJobQueuePlugin } from '@deenruv/job-queue-plugin/package/bullmq';
|
|
23
|
+
|
|
24
|
+
const config = {
|
|
25
|
+
plugins: [
|
|
26
|
+
// Remove DefaultJobQueuePlugin first
|
|
27
|
+
BullMQJobQueuePlugin.init({
|
|
28
|
+
connection: {
|
|
29
|
+
host: 'localhost',
|
|
30
|
+
port: 6379,
|
|
31
|
+
},
|
|
32
|
+
workerOptions: {
|
|
33
|
+
concurrency: 10,
|
|
34
|
+
},
|
|
35
|
+
}),
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Options:**
|
|
41
|
+
|
|
42
|
+
| Option | Type | Default | Description |
|
|
43
|
+
|--------|------|---------|-------------|
|
|
44
|
+
| `connection` | `ConnectionOptions` | `127.0.0.1:6379` | Redis connection options |
|
|
45
|
+
| `queueOptions` | `QueueOptions` | - | BullMQ Queue instance options |
|
|
46
|
+
| `workerOptions` | `WorkerOptions` | `{ concurrency: 3 }` | BullMQ Worker instance options |
|
|
47
|
+
| `setRetries` | `fn(queueName, job) => number` | - | Override retry count per queue/job |
|
|
48
|
+
| `setBackoff` | `fn(queueName, job) => BackoffOptions` | exponential/1000ms | Custom backoff strategy for retries |
|
|
49
|
+
|
|
50
|
+
**Advantages over DefaultJobQueuePlugin:**
|
|
51
|
+
|
|
52
|
+
- Push-based (no polling) - significantly lower DB load
|
|
53
|
+
- Jobs stored in Redis instead of the database
|
|
54
|
+
- Much better scalability with multiple workers
|
|
55
|
+
- Lower latency in job processing
|
|
56
|
+
- Built-in Redis health checks
|
|
57
|
+
- Auto-cleanup of completed/failed jobs (30 days or 5,000 jobs by default)
|
|
58
|
+
|
|
59
|
+
### PubSubPlugin
|
|
60
|
+
|
|
61
|
+
Uses [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) for the Deenruv job queue, suitable for GCP-based deployments.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pnpm add @google-cloud/pubsub
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { PubSubPlugin } from '@deenruv/job-queue-plugin/package/pub-sub';
|
|
69
|
+
|
|
70
|
+
const config = {
|
|
71
|
+
plugins: [
|
|
72
|
+
PubSubPlugin.init({
|
|
73
|
+
// PubSub options
|
|
74
|
+
}),
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Features
|
|
80
|
+
|
|
81
|
+
- BullMQ: Push-based Redis job queue with configurable concurrency
|
|
82
|
+
- BullMQ: Redis health indicator for monitoring
|
|
83
|
+
- BullMQ: Configurable retry strategies (exponential/fixed backoff)
|
|
84
|
+
- BullMQ: Automatic cleanup of old completed/failed jobs
|
|
85
|
+
- Pub/Sub: Google Cloud native job queue strategy
|
|
86
|
+
- Both are drop-in replacements for DefaultJobQueuePlugin
|
|
87
|
+
|
|
88
|
+
## Admin UI
|
|
89
|
+
|
|
90
|
+
Server-only plugin. No Admin UI extensions.
|
|
91
|
+
|
|
92
|
+
## API Extensions
|
|
93
|
+
|
|
94
|
+
No GraphQL API extensions. These plugins configure the internal job queue strategy.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { JobListOptions } from "@deenruv/common/lib/generated-types";
|
|
2
|
+
import { ID, Injector, InspectableJobQueueStrategy, Job, JobData, PaginatedList } from "@deenruv/core";
|
|
3
|
+
/**
|
|
4
|
+
* @description
|
|
5
|
+
* This JobQueueStrategy uses [BullMQ](https://docs.bullmq.io/) to implement a push-based job queue
|
|
6
|
+
* on top of Redis. It should not be used alone, but as part of the {@link BullMQJobQueuePlugin}.
|
|
7
|
+
*
|
|
8
|
+
* @docsCategory core plugins/JobQueuePlugin
|
|
9
|
+
*/
|
|
10
|
+
export declare class BullMQJobQueueStrategy implements InspectableJobQueueStrategy {
|
|
11
|
+
private redisConnection;
|
|
12
|
+
private connectionOptions;
|
|
13
|
+
private queue;
|
|
14
|
+
private worker;
|
|
15
|
+
private workerProcessor;
|
|
16
|
+
private options;
|
|
17
|
+
private queueNameProcessFnMap;
|
|
18
|
+
private cancellationSub;
|
|
19
|
+
private cancelRunningJob$;
|
|
20
|
+
private readonly CANCEL_JOB_CHANNEL;
|
|
21
|
+
private readonly CANCELLED_JOB_LIST_NAME;
|
|
22
|
+
init(injector: Injector): Promise<void>;
|
|
23
|
+
destroy(): Promise<void>;
|
|
24
|
+
add<Data extends JobData<Data> = object>(job: Job<Data>): Promise<Job<Data>>;
|
|
25
|
+
cancelJob(jobId: string): Promise<Job | undefined>;
|
|
26
|
+
findMany(options?: JobListOptions): Promise<PaginatedList<Job>>;
|
|
27
|
+
findManyById(ids: ID[]): Promise<Job[]>;
|
|
28
|
+
findOne(id: ID): Promise<Job | undefined>;
|
|
29
|
+
removeSettledJobs(queueNames?: string[], olderThan?: Date): Promise<number>;
|
|
30
|
+
start<Data extends JobData<Data> = object>(queueName: string, process: (job: Job<Data>) => Promise<any>): Promise<void>;
|
|
31
|
+
private subscribeToCancellationEvents;
|
|
32
|
+
private stopped;
|
|
33
|
+
stop<Data extends JobData<Data> = object>(queueName: string, process: (job: Job<Data>) => Promise<any>): Promise<void>;
|
|
34
|
+
private setActiveJobAsCancelled;
|
|
35
|
+
private createDeenruvJob;
|
|
36
|
+
private getState;
|
|
37
|
+
private callCustomScript;
|
|
38
|
+
private defineCustomLuaScripts;
|
|
39
|
+
}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BullMQJobQueueStrategy = void 0;
|
|
4
|
+
const generated_types_1 = require("@deenruv/common/lib/generated-types");
|
|
5
|
+
const shared_utils_1 = require("@deenruv/common/lib/shared-utils");
|
|
6
|
+
const core_1 = require("@deenruv/core");
|
|
7
|
+
const bullmq_1 = require("bullmq");
|
|
8
|
+
const events_1 = require("events");
|
|
9
|
+
const ioredis_1 = require("ioredis");
|
|
10
|
+
const rxjs_1 = require("rxjs");
|
|
11
|
+
const operators_1 = require("rxjs/operators");
|
|
12
|
+
const constants_1 = require("./constants");
|
|
13
|
+
const redis_health_indicator_1 = require("./redis-health-indicator");
|
|
14
|
+
const get_jobs_by_type_1 = require("./scripts/get-jobs-by-type");
|
|
15
|
+
const QUEUE_NAME = "deenruv-job-queue";
|
|
16
|
+
const DEFAULT_CONCURRENCY = 3;
|
|
17
|
+
/**
|
|
18
|
+
* @description
|
|
19
|
+
* This JobQueueStrategy uses [BullMQ](https://docs.bullmq.io/) to implement a push-based job queue
|
|
20
|
+
* on top of Redis. It should not be used alone, but as part of the {@link BullMQJobQueuePlugin}.
|
|
21
|
+
*
|
|
22
|
+
* @docsCategory core plugins/JobQueuePlugin
|
|
23
|
+
*/
|
|
24
|
+
class BullMQJobQueueStrategy {
|
|
25
|
+
constructor() {
|
|
26
|
+
this.queueNameProcessFnMap = new Map();
|
|
27
|
+
this.cancelRunningJob$ = new rxjs_1.Subject();
|
|
28
|
+
this.CANCEL_JOB_CHANNEL = "cancel-job";
|
|
29
|
+
this.CANCELLED_JOB_LIST_NAME = "deenruv:cancelled-jobs";
|
|
30
|
+
this.subscribeToCancellationEvents = (channel, jobId) => {
|
|
31
|
+
if (channel === this.CANCEL_JOB_CHANNEL && jobId) {
|
|
32
|
+
this.cancelRunningJob$.next(jobId);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
this.stopped = false;
|
|
36
|
+
}
|
|
37
|
+
async init(injector) {
|
|
38
|
+
var _a, _b, _c, _d, _e;
|
|
39
|
+
const options = injector.get(constants_1.BULLMQ_PLUGIN_OPTIONS);
|
|
40
|
+
this.options = Object.assign(Object.assign({}, options), { workerOptions: Object.assign(Object.assign({}, options.workerOptions), { removeOnComplete: (_b = (_a = options.workerOptions) === null || _a === void 0 ? void 0 : _a.removeOnComplete) !== null && _b !== void 0 ? _b : {
|
|
41
|
+
age: 60 * 60 * 24 * 30,
|
|
42
|
+
count: 5000,
|
|
43
|
+
}, removeOnFail: (_d = (_c = options.workerOptions) === null || _c === void 0 ? void 0 : _c.removeOnFail) !== null && _d !== void 0 ? _d : {
|
|
44
|
+
age: 60 * 60 * 24 * 30,
|
|
45
|
+
count: 5000,
|
|
46
|
+
} }) });
|
|
47
|
+
this.connectionOptions =
|
|
48
|
+
(_e = options.connection) !== null && _e !== void 0 ? _e : {
|
|
49
|
+
host: "localhost",
|
|
50
|
+
port: 6379,
|
|
51
|
+
maxRetriesPerRequest: null,
|
|
52
|
+
};
|
|
53
|
+
this.redisConnection =
|
|
54
|
+
this.connectionOptions instanceof events_1.EventEmitter
|
|
55
|
+
? this.connectionOptions
|
|
56
|
+
: new ioredis_1.Redis(this.connectionOptions);
|
|
57
|
+
this.defineCustomLuaScripts();
|
|
58
|
+
const redisHealthIndicator = injector.get(redis_health_indicator_1.RedisHealthIndicator);
|
|
59
|
+
core_1.Logger.info("Checking Redis connection...", constants_1.loggerCtx);
|
|
60
|
+
const health = await redisHealthIndicator.isHealthy("redis");
|
|
61
|
+
if (health.redis.status === "down") {
|
|
62
|
+
core_1.Logger.error("Could not connect to Redis", constants_1.loggerCtx);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
core_1.Logger.info("Connected to Redis ✔", constants_1.loggerCtx);
|
|
66
|
+
}
|
|
67
|
+
this.queue = new bullmq_1.Queue(QUEUE_NAME, Object.assign(Object.assign({}, options.queueOptions), { connection: this.redisConnection }))
|
|
68
|
+
.on("error", (e) => core_1.Logger.error(`BullMQ Queue error: ${JSON.stringify(e.message)}`, constants_1.loggerCtx, e.stack))
|
|
69
|
+
.on("resumed", () => core_1.Logger.verbose("BullMQ Queue resumed", constants_1.loggerCtx))
|
|
70
|
+
.on("paused", () => core_1.Logger.verbose("BullMQ Queue paused", constants_1.loggerCtx));
|
|
71
|
+
if (await this.queue.isPaused()) {
|
|
72
|
+
await this.queue.resume();
|
|
73
|
+
}
|
|
74
|
+
this.workerProcessor = async (bullJob) => {
|
|
75
|
+
var _a, _b, _c;
|
|
76
|
+
const queueName = bullJob.name;
|
|
77
|
+
core_1.Logger.debug(`Job ${(_a = bullJob.id) !== null && _a !== void 0 ? _a : ""} [${queueName}] starting (attempt ${bullJob.attemptsMade + 1} of ${(_b = bullJob.opts.attempts) !== null && _b !== void 0 ? _b : 1})`);
|
|
78
|
+
const processFn = this.queueNameProcessFnMap.get(queueName);
|
|
79
|
+
if (processFn) {
|
|
80
|
+
const job = await this.createDeenruvJob(bullJob);
|
|
81
|
+
const completed$ = new rxjs_1.Subject();
|
|
82
|
+
try {
|
|
83
|
+
// eslint-disable-next-line
|
|
84
|
+
job.on('progress', _job => bullJob.updateProgress(_job.progress));
|
|
85
|
+
this.cancelRunningJob$
|
|
86
|
+
.pipe((0, operators_1.filter)((jobId) => jobId === job.id), (0, operators_1.takeUntil)(completed$))
|
|
87
|
+
.subscribe(() => {
|
|
88
|
+
var _a;
|
|
89
|
+
core_1.Logger.info(`Setting job ${(_a = job.id) !== null && _a !== void 0 ? _a : ""} as cancelled`, constants_1.loggerCtx);
|
|
90
|
+
job.cancel();
|
|
91
|
+
});
|
|
92
|
+
const result = await processFn(job);
|
|
93
|
+
await bullJob.updateProgress(100);
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
throw e;
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
if (job.id) {
|
|
101
|
+
await this.redisConnection.srem(this.CANCELLED_JOB_LIST_NAME, (_c = job.id) === null || _c === void 0 ? void 0 : _c.toString());
|
|
102
|
+
}
|
|
103
|
+
completed$.next();
|
|
104
|
+
completed$.complete();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
throw new core_1.InternalServerError(`No processor defined for the queue "${queueName}"`);
|
|
108
|
+
};
|
|
109
|
+
// Subscription-mode Redis connection for the cancellation messages
|
|
110
|
+
this.cancellationSub = new ioredis_1.Redis(this.connectionOptions);
|
|
111
|
+
}
|
|
112
|
+
async destroy() {
|
|
113
|
+
var _a;
|
|
114
|
+
await Promise.all([this.queue.close(), (_a = this.worker) === null || _a === void 0 ? void 0 : _a.close()]);
|
|
115
|
+
}
|
|
116
|
+
async add(job) {
|
|
117
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
118
|
+
const retries = (_d = (_c = (_b = (_a = this.options).setRetries) === null || _b === void 0 ? void 0 : _b.call(_a, job.queueName, job)) !== null && _c !== void 0 ? _c : job.retries) !== null && _d !== void 0 ? _d : 0;
|
|
119
|
+
const backoff = (_g = (_f = (_e = this.options).setBackoff) === null || _f === void 0 ? void 0 : _f.call(_e, job.queueName, job)) !== null && _g !== void 0 ? _g : {
|
|
120
|
+
delay: 1000,
|
|
121
|
+
type: "exponential",
|
|
122
|
+
};
|
|
123
|
+
const bullJob = await this.queue.add(job.queueName, job.data, {
|
|
124
|
+
attempts: retries + 1,
|
|
125
|
+
backoff,
|
|
126
|
+
});
|
|
127
|
+
return this.createDeenruvJob(bullJob);
|
|
128
|
+
}
|
|
129
|
+
async cancelJob(jobId) {
|
|
130
|
+
const bullJob = await this.queue.getJob(jobId);
|
|
131
|
+
if (bullJob) {
|
|
132
|
+
if (await bullJob.isActive()) {
|
|
133
|
+
await this.setActiveJobAsCancelled(jobId);
|
|
134
|
+
return this.createDeenruvJob(bullJob);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
try {
|
|
138
|
+
const job = await this.createDeenruvJob(bullJob);
|
|
139
|
+
await bullJob.remove();
|
|
140
|
+
return job;
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
const message = `Error when cancelling job: ${JSON.stringify(e.message)}`;
|
|
144
|
+
core_1.Logger.error(message, constants_1.loggerCtx);
|
|
145
|
+
throw new core_1.InternalServerError(message);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async findMany(options) {
|
|
151
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
152
|
+
const skip = (_a = options === null || options === void 0 ? void 0 : options.skip) !== null && _a !== void 0 ? _a : 0;
|
|
153
|
+
const take = (_b = options === null || options === void 0 ? void 0 : options.take) !== null && _b !== void 0 ? _b : 10;
|
|
154
|
+
let jobTypes = constants_1.ALL_JOB_TYPES;
|
|
155
|
+
const stateFilter = (_c = options === null || options === void 0 ? void 0 : options.filter) === null || _c === void 0 ? void 0 : _c.state;
|
|
156
|
+
if (stateFilter === null || stateFilter === void 0 ? void 0 : stateFilter.eq) {
|
|
157
|
+
switch (stateFilter.eq) {
|
|
158
|
+
case "PENDING":
|
|
159
|
+
jobTypes = ["wait"];
|
|
160
|
+
break;
|
|
161
|
+
case "RUNNING":
|
|
162
|
+
jobTypes = ["active"];
|
|
163
|
+
break;
|
|
164
|
+
case "COMPLETED":
|
|
165
|
+
jobTypes = ["completed"];
|
|
166
|
+
break;
|
|
167
|
+
case "RETRYING":
|
|
168
|
+
jobTypes = ["repeat"];
|
|
169
|
+
break;
|
|
170
|
+
case "FAILED":
|
|
171
|
+
jobTypes = ["failed"];
|
|
172
|
+
break;
|
|
173
|
+
case "CANCELLED":
|
|
174
|
+
jobTypes = ["failed"];
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const settledFilter = (_d = options === null || options === void 0 ? void 0 : options.filter) === null || _d === void 0 ? void 0 : _d.isSettled;
|
|
179
|
+
if ((settledFilter === null || settledFilter === void 0 ? void 0 : settledFilter.eq) != null) {
|
|
180
|
+
jobTypes =
|
|
181
|
+
settledFilter.eq === true
|
|
182
|
+
? ["completed", "failed"]
|
|
183
|
+
: [
|
|
184
|
+
"wait",
|
|
185
|
+
"waiting-children",
|
|
186
|
+
"active",
|
|
187
|
+
"repeat",
|
|
188
|
+
"delayed",
|
|
189
|
+
"paused",
|
|
190
|
+
];
|
|
191
|
+
}
|
|
192
|
+
let items = [];
|
|
193
|
+
let totalItems = 0;
|
|
194
|
+
try {
|
|
195
|
+
const [total, jobIds] = await this.callCustomScript(get_jobs_by_type_1.getJobsByType, [
|
|
196
|
+
skip,
|
|
197
|
+
take,
|
|
198
|
+
(_g = (_f = (_e = options === null || options === void 0 ? void 0 : options.filter) === null || _e === void 0 ? void 0 : _e.queueName) === null || _f === void 0 ? void 0 : _f.eq) !== null && _g !== void 0 ? _g : "",
|
|
199
|
+
...jobTypes,
|
|
200
|
+
]);
|
|
201
|
+
items = (await Promise.all(jobIds.map((id) => {
|
|
202
|
+
return bullmq_1.Job.fromId(this.queue, id);
|
|
203
|
+
}))).filter(shared_utils_1.notNullOrUndefined);
|
|
204
|
+
totalItems = total;
|
|
205
|
+
}
|
|
206
|
+
catch (e) {
|
|
207
|
+
throw new core_1.InternalServerError(e.message);
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
items: await Promise.all(items.map((bullJob) => this.createDeenruvJob(bullJob))),
|
|
211
|
+
totalItems,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
async findManyById(ids) {
|
|
215
|
+
const bullJobs = await Promise.all(ids.map((id) => this.queue.getJob(id.toString())));
|
|
216
|
+
return Promise.all(bullJobs.filter(shared_utils_1.notNullOrUndefined).map((j) => this.createDeenruvJob(j)));
|
|
217
|
+
}
|
|
218
|
+
async findOne(id) {
|
|
219
|
+
const bullJob = await this.queue.getJob(id.toString());
|
|
220
|
+
if (bullJob) {
|
|
221
|
+
return this.createDeenruvJob(bullJob);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// TODO V2: actually make it use the olderThan parameter
|
|
225
|
+
async removeSettledJobs(queueNames, olderThan) {
|
|
226
|
+
try {
|
|
227
|
+
const jobCounts = await this.queue.getJobCounts("completed", "failed");
|
|
228
|
+
await this.queue.clean(100, 0, "completed");
|
|
229
|
+
await this.queue.clean(100, 0, "failed");
|
|
230
|
+
return Object.values(jobCounts).reduce((sum, num) => sum + num, 0);
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
core_1.Logger.error(e.message, constants_1.loggerCtx, e.stack);
|
|
234
|
+
return 0;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async start(queueName, process) {
|
|
238
|
+
this.queueNameProcessFnMap.set(queueName, process);
|
|
239
|
+
if (!this.worker) {
|
|
240
|
+
const options = Object.assign(Object.assign({ concurrency: DEFAULT_CONCURRENCY }, this.options.workerOptions), { connection: this.redisConnection });
|
|
241
|
+
this.worker = new bullmq_1.Worker(QUEUE_NAME, this.workerProcessor, options)
|
|
242
|
+
.on("error", (e) => core_1.Logger.error(`BullMQ Worker error: ${e.message}`, constants_1.loggerCtx, e.stack))
|
|
243
|
+
.on("closing", (e) => core_1.Logger.verbose(`BullMQ Worker closing: ${e}`, constants_1.loggerCtx))
|
|
244
|
+
.on("closed", () => core_1.Logger.verbose("BullMQ Worker closed", constants_1.loggerCtx))
|
|
245
|
+
.on("failed", (job, error) => {
|
|
246
|
+
var _a, _b, _c, _d;
|
|
247
|
+
core_1.Logger.warn(`Job ${(_a = job === null || job === void 0 ? void 0 : job.id) !== null && _a !== void 0 ? _a : "(unknown id)"} [${(_b = job === null || job === void 0 ? void 0 : job.name) !== null && _b !== void 0 ? _b : "unknown name"}] failed (attempt ${(_c = job === null || job === void 0 ? void 0 : job.attemptsMade) !== null && _c !== void 0 ? _c : "unknown"} of ${(_d = job === null || job === void 0 ? void 0 : job.opts.attempts) !== null && _d !== void 0 ? _d : 1})`, constants_1.loggerCtx);
|
|
248
|
+
})
|
|
249
|
+
.on("stalled", (jobId) => {
|
|
250
|
+
core_1.Logger.warn(`BullMQ Worker: job ${jobId} stalled`, constants_1.loggerCtx);
|
|
251
|
+
})
|
|
252
|
+
.on("completed", (job) => {
|
|
253
|
+
var _a;
|
|
254
|
+
core_1.Logger.debug(`Job ${(_a = job === null || job === void 0 ? void 0 : job.id) !== null && _a !== void 0 ? _a : "unknown id"} [${job.name}] completed`, constants_1.loggerCtx);
|
|
255
|
+
});
|
|
256
|
+
await this.cancellationSub.subscribe(this.CANCEL_JOB_CHANNEL);
|
|
257
|
+
this.cancellationSub.on("message", this.subscribeToCancellationEvents);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async stop(queueName, process) {
|
|
261
|
+
if (!this.stopped) {
|
|
262
|
+
this.stopped = true;
|
|
263
|
+
try {
|
|
264
|
+
core_1.Logger.info(`Closing worker`, constants_1.loggerCtx);
|
|
265
|
+
let timer;
|
|
266
|
+
const checkActive = async () => {
|
|
267
|
+
const activeCount = await this.queue.getActiveCount();
|
|
268
|
+
if (0 < activeCount) {
|
|
269
|
+
const activeJobs = await this.queue.getActive();
|
|
270
|
+
core_1.Logger.info(`Waiting on ${activeCount} active ${activeCount > 1 ? "jobs" : "job"} (${activeJobs.map((j) => j.id).join(", ")})...`, constants_1.loggerCtx);
|
|
271
|
+
timer = setTimeout(checkActive, 2000);
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
timer = setTimeout(checkActive, 2000);
|
|
275
|
+
await this.worker.close();
|
|
276
|
+
core_1.Logger.info(`Worker closed`, constants_1.loggerCtx);
|
|
277
|
+
await this.queue.close();
|
|
278
|
+
clearTimeout(timer);
|
|
279
|
+
core_1.Logger.info(`Queue closed`, constants_1.loggerCtx);
|
|
280
|
+
this.cancellationSub.off("message", this.subscribeToCancellationEvents);
|
|
281
|
+
}
|
|
282
|
+
catch (e) {
|
|
283
|
+
core_1.Logger.error(e, constants_1.loggerCtx, e.stack);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
async setActiveJobAsCancelled(jobId) {
|
|
288
|
+
// Not yet possible natively in BullMQ, see
|
|
289
|
+
// https://github.com/taskforcesh/bullmq/issues/632
|
|
290
|
+
// So we have our own custom method of marking a job as cancelled.
|
|
291
|
+
await this.redisConnection.publish(this.CANCEL_JOB_CHANNEL, jobId);
|
|
292
|
+
await this.redisConnection.sadd(this.CANCELLED_JOB_LIST_NAME, jobId.toString());
|
|
293
|
+
}
|
|
294
|
+
async createDeenruvJob(bullJob) {
|
|
295
|
+
const jobJson = bullJob.toJSON();
|
|
296
|
+
return new core_1.Job({
|
|
297
|
+
queueName: bullJob.name,
|
|
298
|
+
id: bullJob.id,
|
|
299
|
+
state: await this.getState(bullJob),
|
|
300
|
+
data: bullJob.data,
|
|
301
|
+
attempts: bullJob.attemptsMade,
|
|
302
|
+
createdAt: new Date(jobJson.timestamp),
|
|
303
|
+
startedAt: jobJson.processedOn
|
|
304
|
+
? new Date(jobJson.processedOn)
|
|
305
|
+
: undefined,
|
|
306
|
+
settledAt: jobJson.finishedOn ? new Date(jobJson.finishedOn) : undefined,
|
|
307
|
+
error: jobJson.failedReason,
|
|
308
|
+
progress: +jobJson.progress,
|
|
309
|
+
result: jobJson.returnvalue,
|
|
310
|
+
retries: bullJob.opts.attempts ? bullJob.opts.attempts - 1 : 0,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
async getState(bullJob) {
|
|
314
|
+
var _a;
|
|
315
|
+
const jobId = (_a = bullJob.id) === null || _a === void 0 ? void 0 : _a.toString();
|
|
316
|
+
if ((await bullJob.isWaiting()) || (await bullJob.isWaitingChildren())) {
|
|
317
|
+
return generated_types_1.JobState.PENDING;
|
|
318
|
+
}
|
|
319
|
+
if (await bullJob.isActive()) {
|
|
320
|
+
const isCancelled = jobId &&
|
|
321
|
+
(await this.redisConnection.sismember(this.CANCELLED_JOB_LIST_NAME, jobId));
|
|
322
|
+
if (isCancelled) {
|
|
323
|
+
return generated_types_1.JobState.CANCELLED;
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
return generated_types_1.JobState.RUNNING;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (await bullJob.isDelayed()) {
|
|
330
|
+
return generated_types_1.JobState.RETRYING;
|
|
331
|
+
}
|
|
332
|
+
if (await bullJob.isFailed()) {
|
|
333
|
+
return generated_types_1.JobState.FAILED;
|
|
334
|
+
}
|
|
335
|
+
if (await bullJob.isCompleted()) {
|
|
336
|
+
return generated_types_1.JobState.COMPLETED;
|
|
337
|
+
}
|
|
338
|
+
throw new core_1.InternalServerError("Could not determine job state");
|
|
339
|
+
// TODO: how to handle "cancelled" state? Currently when we cancel a job, we simply remove all record of it.
|
|
340
|
+
}
|
|
341
|
+
callCustomScript(scriptDef, args) {
|
|
342
|
+
return new Promise((resolve, reject) => {
|
|
343
|
+
this.redisConnection[scriptDef.name](`bull:${this.queue.name}:`, ...args, (err, result) => {
|
|
344
|
+
if (err) {
|
|
345
|
+
reject(err);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
resolve(result);
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
defineCustomLuaScripts() {
|
|
354
|
+
const redis = this.redisConnection;
|
|
355
|
+
redis.defineCommand(get_jobs_by_type_1.getJobsByType.name, {
|
|
356
|
+
numberOfKeys: get_jobs_by_type_1.getJobsByType.numberOfKeys,
|
|
357
|
+
lua: get_jobs_by_type_1.getJobsByType.script,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
exports.BullMQJobQueueStrategy = BullMQJobQueueStrategy;
|
|
362
|
+
//# sourceMappingURL=bullmq-job-queue-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bullmq-job-queue-strategy.js","sourceRoot":"","sources":["../../src/bullmq/bullmq-job-queue-strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ALL_JOB_TYPES = exports.BULLMQ_PLUGIN_OPTIONS = exports.loggerCtx = void 0;
|
|
4
|
+
exports.loggerCtx = "BullMQJobQueuePlugin";
|
|
5
|
+
exports.BULLMQ_PLUGIN_OPTIONS = Symbol("BULLMQ_PLUGIN_OPTIONS");
|
|
6
|
+
exports.ALL_JOB_TYPES = [
|
|
7
|
+
"completed",
|
|
8
|
+
"failed",
|
|
9
|
+
"delayed",
|
|
10
|
+
"repeat",
|
|
11
|
+
"waiting-children",
|
|
12
|
+
"active",
|
|
13
|
+
"wait",
|
|
14
|
+
"paused",
|
|
15
|
+
];
|
|
16
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/bullmq/constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,SAAS,GAAG,sBAAsB,CAAC;AACnC,QAAA,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAExD,QAAA,aAAa,GAAc;IACtC,WAAW;IACX,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,kBAAkB;IAClB,QAAQ;IACR,MAAM;IACN,QAAQ;CACT,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
// ensure that the bullmq package is installed
|
|
18
|
+
try {
|
|
19
|
+
require("bullmq");
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
console.error('The BullMQJobQueuePlugin depends on the "bullmq" package being installed.');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
__exportStar(require("./plugin"), exports);
|
|
26
|
+
__exportStar(require("./types"), exports);
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bullmq/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,8CAA8C;AAC9C,IAAI,CAAC;IACH,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC;AAAC,OAAO,CAAM,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CACX,2EAA2E,CAC5E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,2CAAyB;AACzB,0CAAwB"}
|