@spanhq/bullmq 0.1.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/README.md +171 -0
- package/dist/cjs/context.d.ts +42 -0
- package/dist/cjs/context.d.ts.map +1 -0
- package/dist/cjs/context.js +59 -0
- package/dist/cjs/context.js.map +1 -0
- package/dist/cjs/index.d.ts +47 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +59 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/sender.d.ts +37 -0
- package/dist/cjs/sender.d.ts.map +1 -0
- package/dist/cjs/sender.js +116 -0
- package/dist/cjs/sender.js.map +1 -0
- package/dist/cjs/tracer.d.ts +38 -0
- package/dist/cjs/tracer.d.ts.map +1 -0
- package/dist/cjs/tracer.js +259 -0
- package/dist/cjs/tracer.js.map +1 -0
- package/dist/esm/context.d.ts +42 -0
- package/dist/esm/context.d.ts.map +1 -0
- package/dist/esm/context.js +53 -0
- package/dist/esm/context.js.map +1 -0
- package/dist/esm/index.d.ts +47 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +54 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/sender.d.ts +37 -0
- package/dist/esm/sender.d.ts.map +1 -0
- package/dist/esm/sender.js +112 -0
- package/dist/esm/sender.js.map +1 -0
- package/dist/esm/tracer.d.ts +38 -0
- package/dist/esm/tracer.d.ts.map +1 -0
- package/dist/esm/tracer.js +255 -0
- package/dist/esm/tracer.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SpanSender } from "./sender.js";
|
|
2
|
+
import type { SenderConfig } from "@spanhq/shared";
|
|
3
|
+
/** BullMQ Worker type (minimal interface to avoid tight coupling) */
|
|
4
|
+
interface BullMQWorker {
|
|
5
|
+
name: string;
|
|
6
|
+
on(event: string, callback: (...args: unknown[]) => void): unknown;
|
|
7
|
+
}
|
|
8
|
+
/** BullMQ Queue type (minimal interface) */
|
|
9
|
+
interface BullMQQueue {
|
|
10
|
+
name: string;
|
|
11
|
+
add(name: string, data: Record<string, unknown>, opts?: Record<string, unknown>): Promise<unknown>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Instrument a BullMQ Worker to emit spans for every job lifecycle event.
|
|
15
|
+
*
|
|
16
|
+
* Events tracked: active, completed, failed, stalled.
|
|
17
|
+
*
|
|
18
|
+
* Trace context propagation:
|
|
19
|
+
* - On "active": Store trace context in the global activeJobContexts map.
|
|
20
|
+
* - During processor: traceQueue.add() reads the context from the map.
|
|
21
|
+
* - On "completed"/"failed": Remove context from the map, emit span.
|
|
22
|
+
*
|
|
23
|
+
* All errors are caught — this function NEVER crashes the host app.
|
|
24
|
+
*/
|
|
25
|
+
export declare function traceWorker(worker: BullMQWorker, sender: SpanSender, config: SenderConfig): BullMQWorker;
|
|
26
|
+
/**
|
|
27
|
+
* Instrument a BullMQ Queue to inject trace context into job data.
|
|
28
|
+
*
|
|
29
|
+
* When queue.add() is called inside a traced worker processor,
|
|
30
|
+
* the trace_id and parent span_id are automatically injected into
|
|
31
|
+
* the child job's data. This enables distributed trace propagation
|
|
32
|
+
* across job chains (e.g., ingest → transform → validate → publish).
|
|
33
|
+
*
|
|
34
|
+
* All errors are caught — this function NEVER crashes the host app.
|
|
35
|
+
*/
|
|
36
|
+
export declare function traceQueue(queue: BullMQQueue, sender: SpanSender, config: SenderConfig): BullMQQueue;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=tracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/tracer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAQ,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEzD,qEAAqE;AACrE,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC;CACpE;AAED,4CAA4C;AAC5C,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CACD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAwBD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,YAAY,GACnB,YAAY,CA+Nd;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,YAAY,GACnB,WAAW,CA6Cb"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { setJobContext, clearJobContext, getCurrentContext } from "./context.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build a unique key for tracking a job's context in the global Map.
|
|
5
|
+
*/
|
|
6
|
+
function jobKey(queueName, jobId) {
|
|
7
|
+
return `${queueName}:${jobId}`;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Instrument a BullMQ Worker to emit spans for every job lifecycle event.
|
|
11
|
+
*
|
|
12
|
+
* Events tracked: active, completed, failed, stalled.
|
|
13
|
+
*
|
|
14
|
+
* Trace context propagation:
|
|
15
|
+
* - On "active": Store trace context in the global activeJobContexts map.
|
|
16
|
+
* - During processor: traceQueue.add() reads the context from the map.
|
|
17
|
+
* - On "completed"/"failed": Remove context from the map, emit span.
|
|
18
|
+
*
|
|
19
|
+
* All errors are caught — this function NEVER crashes the host app.
|
|
20
|
+
*/
|
|
21
|
+
export function traceWorker(worker, sender, config) {
|
|
22
|
+
const startTimes = new Map();
|
|
23
|
+
try {
|
|
24
|
+
// Track when a job becomes active
|
|
25
|
+
worker.on("active", (job) => {
|
|
26
|
+
try {
|
|
27
|
+
const j = job;
|
|
28
|
+
const jobId = j.id ?? randomUUID();
|
|
29
|
+
// Determine trace ID: inherit from parent job data or generate new
|
|
30
|
+
const traceId = j.data.__trace_id ?? randomUUID();
|
|
31
|
+
const spanId = randomUUID();
|
|
32
|
+
// Store start time for duration calculation
|
|
33
|
+
startTimes.set(jobId, Date.now());
|
|
34
|
+
// Build trace context for this job
|
|
35
|
+
const ctx = { traceId, spanId };
|
|
36
|
+
// Store context in job data (for completed/failed handlers to read)
|
|
37
|
+
j.data.__trace_context = { traceId: ctx.traceId, spanId: ctx.spanId };
|
|
38
|
+
// Register in the global active context map
|
|
39
|
+
const key = jobKey(j.queueName ?? worker.name, jobId);
|
|
40
|
+
setJobContext(key, ctx);
|
|
41
|
+
if (config.debug) {
|
|
42
|
+
const parentId = j.data.__parent_id ?? null;
|
|
43
|
+
console.log(`[spanhq] Job active: ${j.name} (${jobId}), trace: ${traceId}${parentId ? `, parent: ${parentId.slice(0, 8)}` : ""}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
if (config.debug) {
|
|
48
|
+
console.error("[spanhq] Error in active handler:", err);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// Track job completion
|
|
53
|
+
worker.on("completed", (job) => {
|
|
54
|
+
try {
|
|
55
|
+
const j = job;
|
|
56
|
+
const jobId = j.id ?? "unknown";
|
|
57
|
+
const startTime = startTimes.get(jobId);
|
|
58
|
+
const now = Date.now();
|
|
59
|
+
startTimes.delete(jobId);
|
|
60
|
+
// Remove from global context map
|
|
61
|
+
const key = jobKey(j.queueName ?? worker.name, jobId);
|
|
62
|
+
clearJobContext(key);
|
|
63
|
+
const traceId = j.data.__trace_id ??
|
|
64
|
+
j.data.__trace_context?.traceId ??
|
|
65
|
+
randomUUID();
|
|
66
|
+
const spanId = j.data.__trace_context?.spanId ??
|
|
67
|
+
randomUUID();
|
|
68
|
+
const parentId = j.data.__parent_id ?? null;
|
|
69
|
+
const startedAt = startTime ? new Date(startTime) : new Date();
|
|
70
|
+
const finishedAt = new Date(now);
|
|
71
|
+
const durationMs = startTime ? now - startTime : null;
|
|
72
|
+
const span = {
|
|
73
|
+
id: spanId,
|
|
74
|
+
project_id: "", // Will be overridden by the backend
|
|
75
|
+
trace_id: traceId,
|
|
76
|
+
parent_id: parentId,
|
|
77
|
+
job_name: j.name,
|
|
78
|
+
queue_name: j.queueName ?? worker.name,
|
|
79
|
+
status: "completed",
|
|
80
|
+
attempt: j.attemptsMade || 1,
|
|
81
|
+
started_at: startedAt.toISOString(),
|
|
82
|
+
finished_at: finishedAt.toISOString(),
|
|
83
|
+
duration_ms: durationMs,
|
|
84
|
+
error: null,
|
|
85
|
+
stack_trace: null,
|
|
86
|
+
metadata: filterMetadata(j.data),
|
|
87
|
+
};
|
|
88
|
+
sender.add(span);
|
|
89
|
+
if (config.debug) {
|
|
90
|
+
console.log(`[spanhq] Job completed: ${j.name} (${durationMs}ms)`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (config.debug) {
|
|
95
|
+
console.error("[spanhq] Error in completed handler:", err);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// Track job failures
|
|
100
|
+
worker.on("failed", (job, error, prev) => {
|
|
101
|
+
try {
|
|
102
|
+
const j = job;
|
|
103
|
+
if (!j)
|
|
104
|
+
return;
|
|
105
|
+
const jobId = j.id ?? "unknown";
|
|
106
|
+
const startTime = startTimes.get(jobId);
|
|
107
|
+
const now = Date.now();
|
|
108
|
+
startTimes.delete(jobId);
|
|
109
|
+
// Remove from global context map
|
|
110
|
+
const key = jobKey(j.queueName ?? worker.name, jobId);
|
|
111
|
+
clearJobContext(key);
|
|
112
|
+
const traceId = j.data.__trace_id ??
|
|
113
|
+
j.data.__trace_context?.traceId ??
|
|
114
|
+
randomUUID();
|
|
115
|
+
const spanId = j.data.__trace_context?.spanId ??
|
|
116
|
+
randomUUID();
|
|
117
|
+
const parentId = j.data.__parent_id ?? null;
|
|
118
|
+
// Determine if this is a dead job (exhausted all retries)
|
|
119
|
+
const maxAttempts = j.opts.attempts ?? 1;
|
|
120
|
+
const isDead = j.attemptsMade >= maxAttempts;
|
|
121
|
+
if (config.debug) {
|
|
122
|
+
console.log(`[spanhq] Failed event: ${j.name} (id=${jobId}), attemptsMade=${j.attemptsMade}, maxAttempts=${maxAttempts}, prev=${String(prev)}, isDead=${isDead}`);
|
|
123
|
+
}
|
|
124
|
+
const startedAt = startTime ? new Date(startTime) : new Date();
|
|
125
|
+
const finishedAt = new Date(now);
|
|
126
|
+
const durationMs = startTime ? now - startTime : null;
|
|
127
|
+
const errorMessage = j.failedReason ??
|
|
128
|
+
(error instanceof Error ? error.message : String(error ?? "Unknown error"));
|
|
129
|
+
const stackTrace = j.stacktrace?.join("\n") ??
|
|
130
|
+
(error instanceof Error ? error.stack ?? null : null);
|
|
131
|
+
const span = {
|
|
132
|
+
id: spanId,
|
|
133
|
+
project_id: "",
|
|
134
|
+
trace_id: traceId,
|
|
135
|
+
parent_id: parentId,
|
|
136
|
+
job_name: j.name,
|
|
137
|
+
queue_name: j.queueName ?? worker.name,
|
|
138
|
+
status: isDead ? "dead" : "failed",
|
|
139
|
+
attempt: j.attemptsMade || 1,
|
|
140
|
+
started_at: startedAt.toISOString(),
|
|
141
|
+
finished_at: finishedAt.toISOString(),
|
|
142
|
+
duration_ms: durationMs,
|
|
143
|
+
error: errorMessage,
|
|
144
|
+
stack_trace: stackTrace,
|
|
145
|
+
metadata: filterMetadata(j.data),
|
|
146
|
+
};
|
|
147
|
+
sender.add(span);
|
|
148
|
+
if (config.debug) {
|
|
149
|
+
console.log(`[spanhq] Job ${isDead ? "💀 DEAD" : "⚠️ failed"}: ${j.name} — ${errorMessage}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
if (config.debug) {
|
|
154
|
+
console.error("[spanhq] Error in failed handler:", err);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
// Track stalled jobs
|
|
159
|
+
worker.on("stalled", (jobId) => {
|
|
160
|
+
try {
|
|
161
|
+
const id = String(jobId);
|
|
162
|
+
if (config.debug) {
|
|
163
|
+
console.log(`[spanhq] Job stalled: ${id}`);
|
|
164
|
+
}
|
|
165
|
+
const span = {
|
|
166
|
+
id: randomUUID(),
|
|
167
|
+
project_id: "",
|
|
168
|
+
trace_id: randomUUID(),
|
|
169
|
+
parent_id: null,
|
|
170
|
+
job_name: `stalled-${id}`,
|
|
171
|
+
queue_name: worker.name,
|
|
172
|
+
status: "failed",
|
|
173
|
+
attempt: 1,
|
|
174
|
+
started_at: new Date().toISOString(),
|
|
175
|
+
finished_at: new Date().toISOString(),
|
|
176
|
+
duration_ms: 0,
|
|
177
|
+
error: `Job ${id} stalled`,
|
|
178
|
+
stack_trace: null,
|
|
179
|
+
metadata: { stalled_job_id: id },
|
|
180
|
+
};
|
|
181
|
+
sender.add(span);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
if (config.debug) {
|
|
185
|
+
console.error("[spanhq] Error in stalled handler:", err);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
if (config.debug) {
|
|
192
|
+
console.error("[spanhq] Failed to instrument worker:", err);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return worker;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Instrument a BullMQ Queue to inject trace context into job data.
|
|
199
|
+
*
|
|
200
|
+
* When queue.add() is called inside a traced worker processor,
|
|
201
|
+
* the trace_id and parent span_id are automatically injected into
|
|
202
|
+
* the child job's data. This enables distributed trace propagation
|
|
203
|
+
* across job chains (e.g., ingest → transform → validate → publish).
|
|
204
|
+
*
|
|
205
|
+
* All errors are caught — this function NEVER crashes the host app.
|
|
206
|
+
*/
|
|
207
|
+
export function traceQueue(queue, sender, config) {
|
|
208
|
+
try {
|
|
209
|
+
const originalAdd = queue.add.bind(queue);
|
|
210
|
+
queue.add = async (name, data, opts) => {
|
|
211
|
+
try {
|
|
212
|
+
// Look up the current trace context
|
|
213
|
+
const ctx = getCurrentContext();
|
|
214
|
+
if (ctx) {
|
|
215
|
+
data.__trace_id = ctx.traceId;
|
|
216
|
+
data.__parent_id = ctx.spanId;
|
|
217
|
+
if (config.debug) {
|
|
218
|
+
console.log(`[spanhq] Injected trace context into child job "${name}": trace=${ctx.traceId.slice(0, 8)}…, parent=${ctx.spanId.slice(0, 8)}…`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (config.debug) {
|
|
222
|
+
console.log(`[spanhq] No active trace context for child job "${name}" — will start new trace`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
if (config.debug) {
|
|
227
|
+
console.error("[spanhq] Failed to inject trace context:", err);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return originalAdd(name, data, opts);
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
if (config.debug) {
|
|
235
|
+
console.error("[spanhq] Failed to instrument queue:", err);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return queue;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Filter out internal SpanHQ metadata keys from job data
|
|
242
|
+
* before storing in the span metadata field.
|
|
243
|
+
*/
|
|
244
|
+
function filterMetadata(data) {
|
|
245
|
+
const filtered = {};
|
|
246
|
+
for (const [key, value] of Object.entries(data)) {
|
|
247
|
+
if (key !== "__trace_id" &&
|
|
248
|
+
key !== "__parent_id" &&
|
|
249
|
+
key !== "__trace_context") {
|
|
250
|
+
filtered[key] = value;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return filtered;
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=tracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/tracer.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@spanhq/bullmq",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Distributed tracing SDK for BullMQ background jobs",
|
|
5
|
+
"main": "./dist/cjs/index.js",
|
|
6
|
+
"module": "./dist/esm/index.js",
|
|
7
|
+
"types": "./dist/esm/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": {
|
|
11
|
+
"types": "./dist/esm/index.d.ts",
|
|
12
|
+
"default": "./dist/esm/index.js"
|
|
13
|
+
},
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./dist/cjs/index.d.ts",
|
|
16
|
+
"default": "./dist/cjs/index.js"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"README.md"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "bun run build:esm && bun run build:cjs",
|
|
26
|
+
"build:esm": "tsc --project tsconfig.esm.json",
|
|
27
|
+
"build:cjs": "tsc --project tsconfig.cjs.json",
|
|
28
|
+
"dev": "tsc --project tsconfig.esm.json --watch",
|
|
29
|
+
"clean": "rm -rf dist",
|
|
30
|
+
"publish": "npm publish --access public --no-workspaces"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"bullmq",
|
|
34
|
+
"tracing",
|
|
35
|
+
"observability",
|
|
36
|
+
"background-jobs",
|
|
37
|
+
"monitoring"
|
|
38
|
+
],
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@spanhq/shared": "workspace:*"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"bullmq": ">=4.0.0"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "^25.6.2",
|
|
51
|
+
"bullmq": "^5.0.0",
|
|
52
|
+
"typescript": "^5.8.0"
|
|
53
|
+
}
|
|
54
|
+
}
|