bullmq 5.23.1 → 5.24.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/dist/cjs/classes/flow-producer.js +72 -49
- package/dist/cjs/classes/flow-producer.js.map +1 -1
- package/dist/cjs/classes/queue-base.js +2 -43
- package/dist/cjs/classes/queue-base.js.map +1 -1
- package/dist/cjs/enums/telemetry-attributes.js +1 -0
- package/dist/cjs/enums/telemetry-attributes.js.map +1 -1
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/cjs/utils.js +57 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/classes/flow-producer.d.ts +7 -3
- package/dist/esm/classes/flow-producer.js +73 -50
- package/dist/esm/classes/flow-producer.js.map +1 -1
- package/dist/esm/classes/queue-base.d.ts +1 -7
- package/dist/esm/classes/queue-base.js +3 -44
- package/dist/esm/classes/queue-base.js.map +1 -1
- package/dist/esm/enums/telemetry-attributes.d.ts +2 -1
- package/dist/esm/enums/telemetry-attributes.js +1 -0
- package/dist/esm/enums/telemetry-attributes.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/utils.d.ts +18 -1
- package/dist/esm/utils.js +55 -0
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +1 -1
@@ -1,9 +1,10 @@
|
|
1
1
|
import { EventEmitter } from 'events';
|
2
2
|
import { v4 } from 'uuid';
|
3
|
-
import { getParentKey, isRedisInstance } from '../utils';
|
3
|
+
import { getParentKey, isRedisInstance, trace } from '../utils';
|
4
4
|
import { Job } from './job';
|
5
5
|
import { QueueKeys } from './queue-keys';
|
6
6
|
import { RedisConnection } from './redis-connection';
|
7
|
+
import { SpanKind, TelemetryAttributes } from '../enums';
|
7
8
|
/**
|
8
9
|
* This class allows to add jobs with dependencies between them in such
|
9
10
|
* a way that it is possible to build complex flows.
|
@@ -25,6 +26,9 @@ export class FlowProducer extends EventEmitter {
|
|
25
26
|
}
|
26
27
|
});
|
27
28
|
this.queueKeys = new QueueKeys(opts.prefix);
|
29
|
+
if (opts === null || opts === void 0 ? void 0 : opts.telemetry) {
|
30
|
+
this.telemetry = opts.telemetry;
|
31
|
+
}
|
28
32
|
}
|
29
33
|
emit(event, ...args) {
|
30
34
|
return super.emit(event, ...args);
|
@@ -78,17 +82,22 @@ export class FlowProducer extends EventEmitter {
|
|
78
82
|
const parentDependenciesKey = parentKey
|
79
83
|
? `${parentKey}:dependencies`
|
80
84
|
: undefined;
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
85
|
+
return trace(this.telemetry, SpanKind.PRODUCER, flow.queueName, 'addFlow', flow.queueName, async (span) => {
|
86
|
+
span === null || span === void 0 ? void 0 : span.setAttributes({
|
87
|
+
[TelemetryAttributes.FlowName]: flow.name,
|
88
|
+
});
|
89
|
+
const jobsTree = await this.addNode({
|
90
|
+
multi,
|
91
|
+
node: flow,
|
92
|
+
queuesOpts: opts === null || opts === void 0 ? void 0 : opts.queuesOptions,
|
93
|
+
parent: {
|
94
|
+
parentOpts,
|
95
|
+
parentDependenciesKey,
|
96
|
+
},
|
97
|
+
});
|
98
|
+
await multi.exec();
|
99
|
+
return jobsTree;
|
89
100
|
});
|
90
|
-
await multi.exec();
|
91
|
-
return jobsTree;
|
92
101
|
}
|
93
102
|
/**
|
94
103
|
* Get a flow.
|
@@ -127,9 +136,17 @@ export class FlowProducer extends EventEmitter {
|
|
127
136
|
}
|
128
137
|
const client = await this.connection.client;
|
129
138
|
const multi = client.multi();
|
130
|
-
|
131
|
-
|
132
|
-
|
139
|
+
return trace(this.telemetry, SpanKind.PRODUCER, '', 'addBulkFlows', '', async (span) => {
|
140
|
+
span === null || span === void 0 ? void 0 : span.setAttributes({
|
141
|
+
[TelemetryAttributes.BulkCount]: flows.length,
|
142
|
+
[TelemetryAttributes.BulkNames]: flows
|
143
|
+
.map(flow => flow.name)
|
144
|
+
.join(','),
|
145
|
+
});
|
146
|
+
const jobsTrees = await this.addNodes(multi, flows);
|
147
|
+
await multi.exec();
|
148
|
+
return jobsTrees;
|
149
|
+
});
|
133
150
|
}
|
134
151
|
/**
|
135
152
|
* Add a node (job) of a flow to the queue. This method will recursively
|
@@ -142,47 +159,53 @@ export class FlowProducer extends EventEmitter {
|
|
142
159
|
* @param parent - parent data sent to children to create the "links" to their parent
|
143
160
|
* @returns
|
144
161
|
*/
|
145
|
-
addNode({ multi, node, parent, queuesOpts }) {
|
162
|
+
async addNode({ multi, node, parent, queuesOpts, }) {
|
146
163
|
var _a, _b;
|
147
164
|
const prefix = node.prefix || this.opts.prefix;
|
148
165
|
const queue = this.queueFromNode(node, new QueueKeys(prefix), prefix);
|
149
166
|
const queueOpts = queuesOpts && queuesOpts[node.queueName];
|
150
167
|
const jobsOpts = (_a = queueOpts === null || queueOpts === void 0 ? void 0 : queueOpts.defaultJobOptions) !== null && _a !== void 0 ? _a : {};
|
151
168
|
const jobId = ((_b = node.opts) === null || _b === void 0 ? void 0 : _b.jobId) || v4();
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
const parentId = jobId;
|
157
|
-
const queueKeysParent = new QueueKeys(node.prefix || this.opts.prefix);
|
158
|
-
const waitChildrenKey = queueKeysParent.toKey(node.queueName, 'waiting-children');
|
159
|
-
job.addJob(multi, {
|
160
|
-
parentDependenciesKey: parent === null || parent === void 0 ? void 0 : parent.parentDependenciesKey,
|
161
|
-
waitChildrenKey,
|
162
|
-
parentKey,
|
169
|
+
return trace(this.telemetry, SpanKind.PRODUCER, node.name, 'addNode', node.queueName, async (span, dstPropagationMetadata) => {
|
170
|
+
span === null || span === void 0 ? void 0 : span.setAttributes({
|
171
|
+
[TelemetryAttributes.JobName]: node.name,
|
172
|
+
[TelemetryAttributes.JobId]: jobId,
|
163
173
|
});
|
164
|
-
const
|
165
|
-
const
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
174
|
+
const job = new this.Job(queue, node.name, node.data, Object.assign(Object.assign(Object.assign({}, jobsOpts), node.opts), { parent: parent === null || parent === void 0 ? void 0 : parent.parentOpts, telemetryMetadata: dstPropagationMetadata }), jobId);
|
175
|
+
const parentKey = getParentKey(parent === null || parent === void 0 ? void 0 : parent.parentOpts);
|
176
|
+
if (node.children && node.children.length > 0) {
|
177
|
+
// Create the parent job, it will be a job in status "waiting-children".
|
178
|
+
const parentId = jobId;
|
179
|
+
const queueKeysParent = new QueueKeys(node.prefix || this.opts.prefix);
|
180
|
+
const waitChildrenKey = queueKeysParent.toKey(node.queueName, 'waiting-children');
|
181
|
+
await job.addJob(multi, {
|
182
|
+
parentDependenciesKey: parent === null || parent === void 0 ? void 0 : parent.parentDependenciesKey,
|
183
|
+
waitChildrenKey,
|
184
|
+
parentKey,
|
185
|
+
});
|
186
|
+
const parentDependenciesKey = `${queueKeysParent.toKey(node.queueName, parentId)}:dependencies`;
|
187
|
+
const children = await this.addChildren({
|
188
|
+
multi,
|
189
|
+
nodes: node.children,
|
190
|
+
parent: {
|
191
|
+
parentOpts: {
|
192
|
+
id: parentId,
|
193
|
+
queue: queueKeysParent.getQueueQualifiedName(node.queueName),
|
194
|
+
},
|
195
|
+
parentDependenciesKey,
|
172
196
|
},
|
173
|
-
|
174
|
-
}
|
175
|
-
|
176
|
-
}
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
}
|
184
|
-
|
185
|
-
}
|
197
|
+
queuesOpts,
|
198
|
+
});
|
199
|
+
return { job, children };
|
200
|
+
}
|
201
|
+
else {
|
202
|
+
await job.addJob(multi, {
|
203
|
+
parentDependenciesKey: parent === null || parent === void 0 ? void 0 : parent.parentDependenciesKey,
|
204
|
+
parentKey,
|
205
|
+
});
|
206
|
+
return { job };
|
207
|
+
}
|
208
|
+
});
|
186
209
|
}
|
187
210
|
/**
|
188
211
|
* Adds nodes (jobs) of multiple flows to the queue. This method will recursively
|
@@ -195,7 +218,7 @@ export class FlowProducer extends EventEmitter {
|
|
195
218
|
* @returns
|
196
219
|
*/
|
197
220
|
addNodes(multi, nodes) {
|
198
|
-
return nodes.map(node => {
|
221
|
+
return Promise.all(nodes.map(node => {
|
199
222
|
var _a;
|
200
223
|
const parentOpts = (_a = node === null || node === void 0 ? void 0 : node.opts) === null || _a === void 0 ? void 0 : _a.parent;
|
201
224
|
const parentKey = getParentKey(parentOpts);
|
@@ -210,7 +233,7 @@ export class FlowProducer extends EventEmitter {
|
|
210
233
|
parentDependenciesKey,
|
211
234
|
},
|
212
235
|
});
|
213
|
-
});
|
236
|
+
}));
|
214
237
|
}
|
215
238
|
async getNode(client, node) {
|
216
239
|
const queue = this.queueFromNode(node, new QueueKeys(node.prefix), node.prefix);
|
@@ -237,7 +260,7 @@ export class FlowProducer extends EventEmitter {
|
|
237
260
|
}
|
238
261
|
}
|
239
262
|
addChildren({ multi, nodes, parent, queuesOpts }) {
|
240
|
-
return nodes.map(node => this.addNode({ multi, node, parent, queuesOpts }));
|
263
|
+
return Promise.all(nodes.map(node => this.addNode({ multi, node, parent, queuesOpts })));
|
241
264
|
}
|
242
265
|
getChildren(client, childrenKeys, depth, maxChildren) {
|
243
266
|
const getChild = (key) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"flow-producer.js","sourceRoot":"","sources":["../../../src/classes/flow-producer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;
|
1
|
+
{"version":3,"file":"flow-producer.js","sourceRoot":"","sources":["../../../src/classes/flow-producer.ts"],"names":[],"mappings":"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"}
|
@@ -25,12 +25,6 @@ export declare class QueueBase extends EventEmitter implements MinimalQueue {
|
|
25
25
|
protected scripts: Scripts;
|
26
26
|
protected connection: RedisConnection;
|
27
27
|
readonly qualifiedName: string;
|
28
|
-
/**
|
29
|
-
* Instance of a telemetry client
|
30
|
-
* To use it wrap the code with trace helper
|
31
|
-
* It will check if tracer is provided and if not it will continue as is
|
32
|
-
*/
|
33
|
-
private tracer;
|
34
28
|
/**
|
35
29
|
*
|
36
30
|
* @param name - The name of the queue.
|
@@ -84,5 +78,5 @@ export declare class QueueBase extends EventEmitter implements MinimalQueue {
|
|
84
78
|
* @param srcPropagationMedatada -
|
85
79
|
* @returns
|
86
80
|
*/
|
87
|
-
trace<T>(spanKind: SpanKind, operation: string, destination: string, callback: (span?: Span, dstPropagationMetadata?: string) => Promise<T> | T, srcPropagationMetadata?: string): Promise<T
|
81
|
+
trace<T>(spanKind: SpanKind, operation: string, destination: string, callback: (span?: Span, dstPropagationMetadata?: string) => Promise<T> | T, srcPropagationMetadata?: string): Promise<T | Promise<T>>;
|
88
82
|
}
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import { EventEmitter } from 'events';
|
2
|
-
import { delay, DELAY_TIME_5, isNotConnectionError, isRedisInstance, } from '../utils';
|
2
|
+
import { delay, DELAY_TIME_5, isNotConnectionError, isRedisInstance, trace, } from '../utils';
|
3
3
|
import { RedisConnection } from './redis-connection';
|
4
4
|
import { Job } from './job';
|
5
5
|
import { QueueKeys } from './queue-keys';
|
6
6
|
import { Scripts } from './scripts';
|
7
|
-
import { TelemetryAttributes, SpanKind } from '../enums';
|
8
7
|
/**
|
9
8
|
* @class QueueBase
|
10
9
|
* @extends EventEmitter
|
@@ -45,9 +44,6 @@ export class QueueBase extends EventEmitter {
|
|
45
44
|
this.keys = queueKeys.getKeys(name);
|
46
45
|
this.toKey = (type) => queueKeys.toKey(name, type);
|
47
46
|
this.setScripts();
|
48
|
-
if (opts === null || opts === void 0 ? void 0 : opts.telemetry) {
|
49
|
-
this.tracer = opts.telemetry.tracer;
|
50
|
-
}
|
51
47
|
}
|
52
48
|
/**
|
53
49
|
* Returns a promise that resolves to a redis client. Normally used only by subclasses.
|
@@ -146,45 +142,8 @@ export class QueueBase extends EventEmitter {
|
|
146
142
|
* @param srcPropagationMedatada -
|
147
143
|
* @returns
|
148
144
|
*/
|
149
|
-
|
150
|
-
|
151
|
-
return callback();
|
152
|
-
}
|
153
|
-
const currentContext = this.opts.telemetry.contextManager.active();
|
154
|
-
let parentContext;
|
155
|
-
if (srcPropagationMetadata) {
|
156
|
-
parentContext = this.opts.telemetry.contextManager.fromMetadata(currentContext, srcPropagationMetadata);
|
157
|
-
}
|
158
|
-
const spanName = `${operation} ${destination}`;
|
159
|
-
const span = this.tracer.startSpan(spanName, {
|
160
|
-
kind: spanKind,
|
161
|
-
}, parentContext);
|
162
|
-
try {
|
163
|
-
span.setAttributes({
|
164
|
-
[TelemetryAttributes.QueueName]: this.name,
|
165
|
-
[TelemetryAttributes.QueueOperation]: operation,
|
166
|
-
});
|
167
|
-
let messageContext;
|
168
|
-
let dstPropagationMetadata;
|
169
|
-
if (spanKind === SpanKind.CONSUMER) {
|
170
|
-
messageContext = span.setSpanOnContext(parentContext);
|
171
|
-
}
|
172
|
-
else {
|
173
|
-
messageContext = span.setSpanOnContext(currentContext);
|
174
|
-
}
|
175
|
-
if (callback.length == 2) {
|
176
|
-
dstPropagationMetadata =
|
177
|
-
this.opts.telemetry.contextManager.getMetadata(messageContext);
|
178
|
-
}
|
179
|
-
return await this.opts.telemetry.contextManager.with(messageContext, () => callback(span, dstPropagationMetadata));
|
180
|
-
}
|
181
|
-
catch (err) {
|
182
|
-
span.recordException(err);
|
183
|
-
throw err;
|
184
|
-
}
|
185
|
-
finally {
|
186
|
-
span.end();
|
187
|
-
}
|
145
|
+
trace(spanKind, operation, destination, callback, srcPropagationMetadata) {
|
146
|
+
return trace(this.opts.telemetry, spanKind, this.name, operation, destination, callback, srcPropagationMetadata);
|
188
147
|
}
|
189
148
|
}
|
190
149
|
//# sourceMappingURL=queue-base.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queue-base.js","sourceRoot":"","sources":["../../../src/classes/queue-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EACL,KAAK,EACL,YAAY,EACZ,oBAAoB,EACpB,eAAe,
|
1
|
+
{"version":3,"file":"queue-base.js","sourceRoot":"","sources":["../../../src/classes/queue-base.ts"],"names":[],"mappings":"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"}
|
@@ -28,7 +28,8 @@ export declare enum TelemetryAttributes {
|
|
28
28
|
JobFinishedTimestamp = "bullmq.job.finished.timestamp",
|
29
29
|
JobProcessedTimestamp = "bullmq.job.processed.timestamp",
|
30
30
|
JobResult = "bullmq.job.result",
|
31
|
-
JobFailedReason = "bullmq.job.failed.reason"
|
31
|
+
JobFailedReason = "bullmq.job.failed.reason",
|
32
|
+
FlowName = "bullmq.flow.name"
|
32
33
|
}
|
33
34
|
export declare enum SpanKind {
|
34
35
|
INTERNAL = 0,
|
@@ -30,6 +30,7 @@ export var TelemetryAttributes;
|
|
30
30
|
TelemetryAttributes["JobProcessedTimestamp"] = "bullmq.job.processed.timestamp";
|
31
31
|
TelemetryAttributes["JobResult"] = "bullmq.job.result";
|
32
32
|
TelemetryAttributes["JobFailedReason"] = "bullmq.job.failed.reason";
|
33
|
+
TelemetryAttributes["FlowName"] = "bullmq.flow.name";
|
33
34
|
})(TelemetryAttributes || (TelemetryAttributes = {}));
|
34
35
|
export var SpanKind;
|
35
36
|
(function (SpanKind) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"telemetry-attributes.js","sourceRoot":"","sources":["../../../src/enums/telemetry-attributes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
1
|
+
{"version":3,"file":"telemetry-attributes.js","sourceRoot":"","sources":["../../../src/enums/telemetry-attributes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAgCX;AAhCD,WAAY,mBAAmB;IAC7B,sDAA+B,CAAA;IAC/B,gEAAyC,CAAA;IACzC,0DAAmC,CAAA;IACnC,0DAAmC,CAAA;IACnC,kDAA2B,CAAA;IAC3B,8CAAuB,CAAA;IACvB,gDAAyB,CAAA;IACzB,gDAAyB,CAAA;IACzB,wEAAiD,CAAA;IACjD,wDAAiC,CAAA;IACjC,0DAAmC,CAAA;IACnC,mEAA4C,CAAA;IAC5C,wDAAiC,CAAA;IACjC,mEAA4C,CAAA;IAC5C,kDAA2B,CAAA;IAC3B,4DAAqC,CAAA;IACrC,4EAAqD,CAAA;IACrD,8DAAuC,CAAA;IACvC,wDAAiC,CAAA;IACjC,oDAA6B,CAAA;IAC7B,mEAA4C,CAAA;IAC5C,iFAA0D,CAAA;IAC1D,qEAA8C,CAAA;IAC9C,uEAAgD,CAAA;IAChD,qEAA8C,CAAA;IAC9C,qFAA8D,CAAA;IAC9D,6EAAsD,CAAA;IACtD,+EAAwD,CAAA;IACxD,sDAA+B,CAAA;IAC/B,mEAA4C,CAAA;IAC5C,oDAA6B,CAAA;AAC/B,CAAC,EAhCW,mBAAmB,KAAnB,mBAAmB,QAgC9B;AAED,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,+CAAY,CAAA;IACZ,2CAAU,CAAA;IACV,2CAAU,CAAA;IACV,+CAAY,CAAA;IACZ,+CAAY,CAAA;AACd,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB"}
|