abxbus 2.4.23 → 2.4.24
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/middleware_otel_tracing.d.ts +2 -7
- package/dist/cjs/middleware_otel_tracing.js +71 -172
- package/dist/cjs/middleware_otel_tracing.js.map +2 -2
- package/dist/esm/middleware_otel_tracing.js +71 -172
- package/dist/esm/middleware_otel_tracing.js.map +2 -2
- package/dist/types/middleware_otel_tracing.d.ts +2 -7
- package/package.json +1 -1
- package/src/middleware_otel_tracing.ts +93 -184
|
@@ -22,7 +22,6 @@ export type OtelTracingMiddlewareOptions = {
|
|
|
22
22
|
otlp_endpoint?: string;
|
|
23
23
|
service_name?: string;
|
|
24
24
|
instrumentation_name?: string;
|
|
25
|
-
root_span_name?: string | ((eventbus: EventBus, event: BaseEvent) => string);
|
|
26
25
|
root_span_attributes?: SpanAttributes | ((eventbus: EventBus, event: BaseEvent) => SpanAttributes);
|
|
27
26
|
};
|
|
28
27
|
export declare class OtelTracingMiddleware implements EventBusMiddleware {
|
|
@@ -30,10 +29,7 @@ export declare class OtelTracingMiddleware implements EventBusMiddleware {
|
|
|
30
29
|
private readonly trace_api;
|
|
31
30
|
private readonly span_factory?;
|
|
32
31
|
private readonly span_provider?;
|
|
33
|
-
private readonly root_span_name;
|
|
34
32
|
private readonly root_span_attributes;
|
|
35
|
-
private readonly root_spans;
|
|
36
|
-
private readonly root_contexts;
|
|
37
33
|
private readonly event_spans;
|
|
38
34
|
private readonly event_contexts;
|
|
39
35
|
private readonly handler_spans;
|
|
@@ -45,10 +41,9 @@ export declare class OtelTracingMiddleware implements EventBusMiddleware {
|
|
|
45
41
|
private completeEventSpan;
|
|
46
42
|
private startHandlerSpan;
|
|
47
43
|
private completeHandlerSpan;
|
|
48
|
-
private startRootSpan;
|
|
49
|
-
private completeRootSpan;
|
|
50
44
|
private parentContextForEvent;
|
|
51
45
|
private completeEventSpanWithFactory;
|
|
52
|
-
private
|
|
46
|
+
private exportEventTreeWithFactory;
|
|
47
|
+
private exportHandlerSpanWithFactory;
|
|
53
48
|
}
|
|
54
49
|
export {};
|
|
@@ -31,10 +31,7 @@ class OtelTracingMiddleware {
|
|
|
31
31
|
trace_api;
|
|
32
32
|
span_factory;
|
|
33
33
|
span_provider;
|
|
34
|
-
root_span_name;
|
|
35
34
|
root_span_attributes;
|
|
36
|
-
root_spans = /* @__PURE__ */ new Map();
|
|
37
|
-
root_contexts = /* @__PURE__ */ new Map();
|
|
38
35
|
event_spans = /* @__PURE__ */ new Map();
|
|
39
36
|
event_contexts = /* @__PURE__ */ new Map();
|
|
40
37
|
handler_spans = /* @__PURE__ */ new Map();
|
|
@@ -44,7 +41,6 @@ class OtelTracingMiddleware {
|
|
|
44
41
|
this.tracer = options.tracer ?? this.trace_api.getTracer("abxbus");
|
|
45
42
|
this.span_provider = options.span_provider ?? (options.otlp_endpoint ? createOtlpSpanProvider(options) : void 0);
|
|
46
43
|
this.span_factory = options.span_factory ?? (this.span_provider ? createProviderSpanFactory(this.trace_api, this.span_provider, options.instrumentation_name ?? "abxbus") : void 0);
|
|
47
|
-
this.root_span_name = options.root_span_name;
|
|
48
44
|
this.root_span_attributes = options.root_span_attributes;
|
|
49
45
|
}
|
|
50
46
|
onEventChange(eventbus, event, status) {
|
|
@@ -76,22 +72,12 @@ class OtelTracingMiddleware {
|
|
|
76
72
|
if (existing) {
|
|
77
73
|
return existing;
|
|
78
74
|
}
|
|
79
|
-
const parent_context = this.parentContextForEvent(event) ??
|
|
75
|
+
const parent_context = this.parentContextForEvent(event) ?? import_api.ROOT_CONTEXT;
|
|
80
76
|
const start_time = dateFromIso(event.event_started_at);
|
|
81
77
|
const span = this.tracer.startSpan(
|
|
82
78
|
eventSpanName(eventbus, event),
|
|
83
79
|
{
|
|
84
|
-
attributes:
|
|
85
|
-
"abxbus.bus.id": eventbus.id,
|
|
86
|
-
"abxbus.bus.name": eventbus.name,
|
|
87
|
-
"abxbus.event.id": event.event_id,
|
|
88
|
-
"abxbus.event.type": event.event_type,
|
|
89
|
-
"abxbus.event.version": event.event_version,
|
|
90
|
-
"abxbus.event.session_id": stringValue(event.session_id),
|
|
91
|
-
"abxbus.event.parent_id": event.event_parent_id,
|
|
92
|
-
"abxbus.event.emitted_by_handler_id": event.event_emitted_by_handler_id,
|
|
93
|
-
"abxbus.event.path": event.event_path.join(" ")
|
|
94
|
-
}),
|
|
80
|
+
attributes: event.event_parent_id ? eventStartedSpanAttributes(eventbus, event) : topLevelEventStartedSpanAttributes(this.root_span_attributes, eventbus, event),
|
|
95
81
|
startTime: start_time
|
|
96
82
|
},
|
|
97
83
|
parent_context
|
|
@@ -113,19 +99,13 @@ class OtelTracingMiddleware {
|
|
|
113
99
|
span.setStatus({ code: import_api.SpanStatusCode.OK });
|
|
114
100
|
}
|
|
115
101
|
span.setAttributes(
|
|
116
|
-
|
|
117
|
-
"abxbus.event.status": event.event_status,
|
|
118
|
-
"abxbus.event.result_count": event.event_results.size,
|
|
119
|
-
"abxbus.event.error_count": event.event_errors.length,
|
|
120
|
-
"abxbus.event.child_count": event.event_children.length
|
|
121
|
-
})
|
|
102
|
+
event.event_parent_id ? eventSpanAttributes(eventbus, event) : topLevelEventSpanAttributes(this.root_span_attributes, eventbus, event)
|
|
122
103
|
);
|
|
123
104
|
const start_time = dateFromIso(event.event_started_at);
|
|
124
105
|
const end_time = endTimeAfterStart(start_time, dateFromIso(event.event_completed_at));
|
|
125
106
|
span.end(end_time);
|
|
126
107
|
this.event_spans.delete(event.event_id);
|
|
127
108
|
this.event_contexts.delete(event.event_id);
|
|
128
|
-
this.completeRootSpan(event.event_id, start_time, end_time);
|
|
129
109
|
}
|
|
130
110
|
startHandlerSpan(eventbus, event, event_result) {
|
|
131
111
|
const existing = this.handler_spans.get(event_result.id);
|
|
@@ -136,17 +116,7 @@ class OtelTracingMiddleware {
|
|
|
136
116
|
const span = this.tracer.startSpan(
|
|
137
117
|
handlerSpanName(event, event_result),
|
|
138
118
|
{
|
|
139
|
-
attributes:
|
|
140
|
-
"abxbus.bus.id": eventbus.id,
|
|
141
|
-
"abxbus.bus.name": eventbus.name,
|
|
142
|
-
"abxbus.event.id": event.event_id,
|
|
143
|
-
"abxbus.event.type": event.event_type,
|
|
144
|
-
"abxbus.handler.id": event_result.handler_id,
|
|
145
|
-
"abxbus.handler.name": event_result.handler_name,
|
|
146
|
-
"abxbus.handler.file_path": event_result.handler_file_path,
|
|
147
|
-
"abxbus.handler.event_pattern": event_result.handler.event_pattern,
|
|
148
|
-
"abxbus.event_result.id": event_result.id
|
|
149
|
-
}),
|
|
119
|
+
attributes: handlerSpanAttributes(eventbus, event, event_result),
|
|
150
120
|
startTime: dateFromIso(event_result.started_at)
|
|
151
121
|
},
|
|
152
122
|
parent_context
|
|
@@ -158,7 +128,6 @@ class OtelTracingMiddleware {
|
|
|
158
128
|
}
|
|
159
129
|
completeHandlerSpan(eventbus, event, event_result) {
|
|
160
130
|
if (this.span_factory) {
|
|
161
|
-
this.completeHandlerSpanWithFactory(eventbus, event, event_result);
|
|
162
131
|
return;
|
|
163
132
|
}
|
|
164
133
|
const span = this.handler_spans.get(event_result.id);
|
|
@@ -171,53 +140,12 @@ class OtelTracingMiddleware {
|
|
|
171
140
|
span.setStatus({ code: import_api.SpanStatusCode.OK });
|
|
172
141
|
}
|
|
173
142
|
span.setAttributes(
|
|
174
|
-
|
|
175
|
-
"abxbus.event_result.status": event_result.status,
|
|
176
|
-
"abxbus.handler.child_count": event_result.event_children.length
|
|
177
|
-
})
|
|
143
|
+
handlerSpanAttributes(eventbus, event, event_result)
|
|
178
144
|
);
|
|
179
145
|
span.end(endTimeAfterStart(dateFromIso(event_result.started_at), dateFromIso(event_result.completed_at)));
|
|
180
146
|
this.handler_spans.delete(event_result.id);
|
|
181
147
|
this.handler_contexts.delete(handlerSpanKey(event_result.event_id, event_result.handler_id));
|
|
182
148
|
}
|
|
183
|
-
startRootSpan(eventbus, event) {
|
|
184
|
-
const existing = this.root_contexts.get(event.event_id);
|
|
185
|
-
if (existing) {
|
|
186
|
-
return existing;
|
|
187
|
-
}
|
|
188
|
-
const session_id = stringValue(event.session_id);
|
|
189
|
-
const root_attributes = resolveAttributes(this.root_span_attributes, eventbus, event);
|
|
190
|
-
const root_span = this.tracer.startSpan(
|
|
191
|
-
resolveRootSpanName(this.root_span_name, eventbus, event),
|
|
192
|
-
{
|
|
193
|
-
attributes: compactAttributes({
|
|
194
|
-
...root_attributes,
|
|
195
|
-
"abxbus.trace.root": true,
|
|
196
|
-
"abxbus.bus.id": eventbus.id,
|
|
197
|
-
"abxbus.bus.name": eventbus.name,
|
|
198
|
-
"abxbus.root_event.id": event.event_id,
|
|
199
|
-
"abxbus.root_event.type": event.event_type,
|
|
200
|
-
"abxbus.root_event.session_id": session_id
|
|
201
|
-
}),
|
|
202
|
-
startTime: dateFromIso(event.event_started_at)
|
|
203
|
-
},
|
|
204
|
-
import_api.ROOT_CONTEXT
|
|
205
|
-
);
|
|
206
|
-
const root_context = this.trace_api.setSpan(import_api.ROOT_CONTEXT, root_span);
|
|
207
|
-
this.root_spans.set(event.event_id, root_span);
|
|
208
|
-
this.root_contexts.set(event.event_id, root_context);
|
|
209
|
-
return root_context;
|
|
210
|
-
}
|
|
211
|
-
completeRootSpan(event_id, start_time, end_time) {
|
|
212
|
-
const root_span = this.root_spans.get(event_id);
|
|
213
|
-
if (!root_span) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
root_span.setStatus({ code: import_api.SpanStatusCode.OK });
|
|
217
|
-
root_span.end(endTimeAfterStart(start_time, end_time));
|
|
218
|
-
this.root_spans.delete(event_id);
|
|
219
|
-
this.root_contexts.delete(event_id);
|
|
220
|
-
}
|
|
221
149
|
parentContextForEvent(event) {
|
|
222
150
|
if (event.event_parent_id && event.event_emitted_by_handler_id) {
|
|
223
151
|
const handler_context = this.handler_contexts.get(handlerSpanKey(event.event_parent_id, event.event_emitted_by_handler_id));
|
|
@@ -228,43 +156,48 @@ class OtelTracingMiddleware {
|
|
|
228
156
|
return event.event_parent_id ? this.event_contexts.get(event.event_parent_id) : void 0;
|
|
229
157
|
}
|
|
230
158
|
completeEventSpanWithFactory(eventbus, event) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
});
|
|
243
|
-
root_span.setStatus({ code: import_api.SpanStatusCode.OK });
|
|
244
|
-
root_span.end(end_time);
|
|
159
|
+
if (event.event_parent_id) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const top_level_event = event._event_original ?? event;
|
|
163
|
+
const trace_id = traceIdForRootEvent(top_level_event.event_id);
|
|
164
|
+
this.exportEventTreeWithFactory(eventbus, top_level_event, trace_id, void 0, /* @__PURE__ */ new Set());
|
|
165
|
+
}
|
|
166
|
+
exportEventTreeWithFactory(eventbus, event, trace_id, parent_span_context, visited_event_ids) {
|
|
167
|
+
const original_event = event._event_original ?? event;
|
|
168
|
+
if (visited_event_ids.has(original_event.event_id)) {
|
|
169
|
+
return;
|
|
245
170
|
}
|
|
171
|
+
visited_event_ids.add(original_event.event_id);
|
|
172
|
+
const start_time = dateFromIso(original_event.event_started_at);
|
|
173
|
+
const span_context = eventSpanContext(trace_id, original_event.event_id);
|
|
246
174
|
const span = this.span_factory({
|
|
247
|
-
name: eventSpanName(eventbus,
|
|
248
|
-
span_context
|
|
249
|
-
parent_span_context
|
|
250
|
-
attributes: eventSpanAttributes(eventbus,
|
|
175
|
+
name: eventSpanName(eventbus, original_event),
|
|
176
|
+
span_context,
|
|
177
|
+
parent_span_context,
|
|
178
|
+
attributes: original_event.event_parent_id ? eventSpanAttributes(eventbus, original_event) : topLevelEventSpanAttributes(this.root_span_attributes, eventbus, original_event),
|
|
251
179
|
start_time
|
|
252
180
|
});
|
|
253
|
-
if (
|
|
254
|
-
recordSpanError(span,
|
|
181
|
+
if (original_event.event_errors.length > 0) {
|
|
182
|
+
recordSpanError(span, original_event.event_errors[0]);
|
|
255
183
|
} else {
|
|
256
184
|
span.setStatus({ code: import_api.SpanStatusCode.OK });
|
|
257
185
|
}
|
|
258
|
-
span.end(
|
|
186
|
+
span.end(endTimeAfterStart(start_time, dateFromIso(original_event.event_completed_at)));
|
|
187
|
+
for (const event_result of original_event.event_results.values()) {
|
|
188
|
+
const handler_context = this.exportHandlerSpanWithFactory(eventbus, original_event, event_result, trace_id, span_context);
|
|
189
|
+
for (const child of event_result.event_children) {
|
|
190
|
+
this.exportEventTreeWithFactory(eventbus, child, trace_id, handler_context, visited_event_ids);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
259
193
|
}
|
|
260
|
-
|
|
261
|
-
const root_event = rootEventForEvent(eventbus, event);
|
|
262
|
-
const trace_id = traceIdForRootEvent(root_event.event_id);
|
|
194
|
+
exportHandlerSpanWithFactory(eventbus, event, event_result, trace_id, parent_span_context) {
|
|
263
195
|
const start_time = dateFromIso(event_result.started_at);
|
|
196
|
+
const span_context = handlerSpanContext(trace_id, event_result.event_id, event_result.handler_id);
|
|
264
197
|
const span = this.span_factory({
|
|
265
198
|
name: handlerSpanName(event, event_result),
|
|
266
|
-
span_context
|
|
267
|
-
parent_span_context
|
|
199
|
+
span_context,
|
|
200
|
+
parent_span_context,
|
|
268
201
|
attributes: handlerSpanAttributes(eventbus, event, event_result),
|
|
269
202
|
start_time
|
|
270
203
|
});
|
|
@@ -274,6 +207,7 @@ class OtelTracingMiddleware {
|
|
|
274
207
|
span.setStatus({ code: import_api.SpanStatusCode.OK });
|
|
275
208
|
}
|
|
276
209
|
span.end(endTimeAfterStart(start_time, dateFromIso(event_result.completed_at)));
|
|
210
|
+
return span_context;
|
|
277
211
|
}
|
|
278
212
|
}
|
|
279
213
|
function handlerSpanKey(event_id, handler_id) {
|
|
@@ -328,81 +262,52 @@ function normalizeOtlpTracesEndpoint(endpoint) {
|
|
|
328
262
|
const trimmed = endpoint.replace(/\/+$/, "");
|
|
329
263
|
return trimmed.endsWith("/v1/traces") ? trimmed : `${trimmed}/v1/traces`;
|
|
330
264
|
}
|
|
265
|
+
function eventStartedSpanAttributes(eventbus, event) {
|
|
266
|
+
return compactAttributes({
|
|
267
|
+
"abxbus.event_bus.id": eventbus.id,
|
|
268
|
+
"abxbus.event_bus.name": eventbus.name,
|
|
269
|
+
"abxbus.event_id": event.event_id,
|
|
270
|
+
"abxbus.event_type": event.event_type,
|
|
271
|
+
"abxbus.event_version": event.event_version,
|
|
272
|
+
"abxbus.session_id": stringValue(event.session_id),
|
|
273
|
+
"abxbus.event_parent_id": event.event_parent_id,
|
|
274
|
+
"abxbus.event_emitted_by_handler_id": event.event_emitted_by_handler_id,
|
|
275
|
+
"abxbus.event_path": event.event_path.join(" ")
|
|
276
|
+
});
|
|
277
|
+
}
|
|
331
278
|
function eventSpanAttributes(eventbus, event) {
|
|
332
279
|
return compactAttributes({
|
|
333
|
-
|
|
334
|
-
"abxbus.
|
|
335
|
-
"abxbus.event.id": event.event_id,
|
|
336
|
-
"abxbus.event.type": event.event_type,
|
|
337
|
-
"abxbus.event.version": event.event_version,
|
|
338
|
-
"abxbus.event.session_id": stringValue(event.session_id),
|
|
339
|
-
"abxbus.event.parent_id": event.event_parent_id,
|
|
340
|
-
"abxbus.event.emitted_by_handler_id": event.event_emitted_by_handler_id,
|
|
341
|
-
"abxbus.event.path": event.event_path.join(" "),
|
|
342
|
-
"abxbus.event.status": event.event_status,
|
|
343
|
-
"abxbus.event.result_count": event.event_results.size,
|
|
344
|
-
"abxbus.event.error_count": event.event_errors.length,
|
|
345
|
-
"abxbus.event.child_count": event.event_children.length
|
|
280
|
+
...eventStartedSpanAttributes(eventbus, event),
|
|
281
|
+
"abxbus.event_status": event.event_status
|
|
346
282
|
});
|
|
347
283
|
}
|
|
348
284
|
function handlerSpanAttributes(eventbus, event, event_result) {
|
|
349
285
|
return compactAttributes({
|
|
350
|
-
"abxbus.
|
|
351
|
-
"abxbus.
|
|
352
|
-
"abxbus.
|
|
353
|
-
"abxbus.
|
|
354
|
-
"abxbus.
|
|
355
|
-
"abxbus.
|
|
356
|
-
"abxbus.
|
|
357
|
-
"abxbus.
|
|
358
|
-
"abxbus.
|
|
359
|
-
"abxbus.
|
|
360
|
-
"abxbus.handler.child_count": event_result.event_children.length
|
|
286
|
+
"abxbus.event_bus.id": eventbus.id,
|
|
287
|
+
"abxbus.event_bus.name": eventbus.name,
|
|
288
|
+
"abxbus.event_id": event.event_id,
|
|
289
|
+
"abxbus.event_type": event.event_type,
|
|
290
|
+
"abxbus.handler_id": event_result.handler_id,
|
|
291
|
+
"abxbus.handler_name": event_result.handler_name,
|
|
292
|
+
"abxbus.handler_file_path": event_result.handler_file_path,
|
|
293
|
+
"abxbus.handler_event_pattern": event_result.handler.event_pattern,
|
|
294
|
+
"abxbus.event_result_id": event_result.id,
|
|
295
|
+
"abxbus.event_result_status": event_result.status
|
|
361
296
|
});
|
|
362
297
|
}
|
|
363
|
-
function
|
|
364
|
-
const session_id = stringValue(event.session_id);
|
|
298
|
+
function topLevelEventStartedSpanAttributes(root_span_attributes, eventbus, event) {
|
|
365
299
|
return compactAttributes({
|
|
300
|
+
...eventStartedSpanAttributes(eventbus, event),
|
|
366
301
|
...resolveAttributes(root_span_attributes, eventbus, event),
|
|
367
|
-
"abxbus.trace.root": true
|
|
368
|
-
"abxbus.bus.id": eventbus.id,
|
|
369
|
-
"abxbus.bus.name": eventbus.name,
|
|
370
|
-
"abxbus.root_event.id": event.event_id,
|
|
371
|
-
"abxbus.root_event.type": event.event_type,
|
|
372
|
-
"abxbus.root_event.session_id": session_id,
|
|
373
|
-
"abxbus.root_event.status": event.event_status,
|
|
374
|
-
"abxbus.root_event.error_count": event.event_errors.length,
|
|
375
|
-
"abxbus.root_event.child_count": event.event_children.length
|
|
302
|
+
"abxbus.trace.root": true
|
|
376
303
|
});
|
|
377
304
|
}
|
|
378
|
-
function
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
if (!parent) {
|
|
385
|
-
break;
|
|
386
|
-
}
|
|
387
|
-
current = parent._event_original ?? parent;
|
|
388
|
-
}
|
|
389
|
-
return current;
|
|
390
|
-
}
|
|
391
|
-
function parentSpanContextForEvent(event, trace_id) {
|
|
392
|
-
if (!event.event_parent_id) {
|
|
393
|
-
return rootSpanContext(trace_id, event.event_id);
|
|
394
|
-
}
|
|
395
|
-
if (event.event_emitted_by_handler_id) {
|
|
396
|
-
return handlerSpanContext(trace_id, event.event_parent_id, event.event_emitted_by_handler_id);
|
|
397
|
-
}
|
|
398
|
-
return eventSpanContext(trace_id, event.event_parent_id);
|
|
399
|
-
}
|
|
400
|
-
function rootSpanContext(trace_id, event_id) {
|
|
401
|
-
return {
|
|
402
|
-
traceId: trace_id,
|
|
403
|
-
spanId: deterministicSpanId(`abxbus.root:${event_id}`),
|
|
404
|
-
traceFlags: 1
|
|
405
|
-
};
|
|
305
|
+
function topLevelEventSpanAttributes(root_span_attributes, eventbus, event) {
|
|
306
|
+
return compactAttributes({
|
|
307
|
+
...eventSpanAttributes(eventbus, event),
|
|
308
|
+
...resolveAttributes(root_span_attributes, eventbus, event),
|
|
309
|
+
"abxbus.trace.root": true
|
|
310
|
+
});
|
|
406
311
|
}
|
|
407
312
|
function eventSpanContext(trace_id, event_id) {
|
|
408
313
|
return {
|
|
@@ -450,12 +355,6 @@ function endTimeAfterStart(start_time, end_time) {
|
|
|
450
355
|
}
|
|
451
356
|
return end_time.getTime() > start_time.getTime() ? end_time : new Date(start_time.getTime() + 1);
|
|
452
357
|
}
|
|
453
|
-
function resolveRootSpanName(root_span_name, eventbus, event) {
|
|
454
|
-
if (typeof root_span_name === "function") {
|
|
455
|
-
return root_span_name(eventbus, event);
|
|
456
|
-
}
|
|
457
|
-
return root_span_name ?? `abxbus.trace ${eventbus.name}`;
|
|
458
|
-
}
|
|
459
358
|
function resolveAttributes(attributes, eventbus, event) {
|
|
460
359
|
return typeof attributes === "function" ? attributes(eventbus, event) : attributes ?? {};
|
|
461
360
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/middleware_otel_tracing.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ROOT_CONTEXT,\n SpanKind,\n SpanStatusCode,\n trace,\n type Context,\n type Span,\n type SpanAttributeValue,\n type SpanAttributes,\n type SpanContext,\n type Tracer,\n} from '@opentelemetry/api'\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'\nimport { resourceFromAttributes } from '@opentelemetry/resources'\nimport { BasicTracerProvider, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'\nimport type { SpanLimits, SpanProcessor } from '@opentelemetry/sdk-trace-base'\nimport { SpanImpl } from '@opentelemetry/sdk-trace-base/build/src/Span.js'\n\nimport type { BaseEvent } from './base_event.js'\nimport type { EventBus } from './event_bus.js'\nimport type { EventResult } from './event_result.js'\nimport type { EventBusMiddleware } from './middlewares.js'\nimport type { EventStatus } from './types.js'\n\ntype OpenTelemetryTraceApi = Pick<typeof trace, 'getTracer' | 'setSpan'> & Partial<Pick<typeof trace, 'setSpanContext'>>\n\nexport type OtelTracingSpanFactoryInput = {\n name: string\n span_context: SpanContext\n parent_span_context?: SpanContext\n attributes: SpanAttributes\n start_time?: Date\n}\n\nexport type OtelTracingSpanFactory = (input: OtelTracingSpanFactoryInput) => Span\n\ntype OtelTracingSpanProviderInternals = {\n _activeSpanProcessor?: SpanProcessor\n _config?: {\n resource?: unknown\n spanLimits?: SpanLimits\n }\n _resource?: unknown\n}\n\nexport type OtelTracingSpanProvider = object\n\nexport type OtelTracingMiddlewareOptions = {\n tracer?: Tracer\n trace_api?: OpenTelemetryTraceApi\n span_provider?: OtelTracingSpanProvider\n span_factory?: OtelTracingSpanFactory\n otlp_endpoint?: string\n service_name?: string\n instrumentation_name?: string\n root_span_name?: string | ((eventbus: EventBus, event: BaseEvent) => string)\n root_span_attributes?: SpanAttributes | ((eventbus: EventBus, event: BaseEvent) => SpanAttributes)\n}\n\nexport class OtelTracingMiddleware implements EventBusMiddleware {\n private readonly tracer: Tracer\n private readonly trace_api: OpenTelemetryTraceApi\n private readonly span_factory?: OtelTracingSpanFactory\n private readonly span_provider?: OtelTracingSpanProvider\n private readonly root_span_name: OtelTracingMiddlewareOptions['root_span_name']\n private readonly root_span_attributes: OtelTracingMiddlewareOptions['root_span_attributes']\n private readonly root_spans = new Map<string, Span>()\n private readonly root_contexts = new Map<string, Context>()\n private readonly event_spans = new Map<string, Span>()\n private readonly event_contexts = new Map<string, Context>()\n private readonly handler_spans = new Map<string, Span>()\n private readonly handler_contexts = new Map<string, Context>()\n\n constructor(options: OtelTracingMiddlewareOptions = {}) {\n this.trace_api = options.trace_api ?? trace\n this.tracer = options.tracer ?? this.trace_api.getTracer('abxbus')\n this.span_provider = options.span_provider ?? (options.otlp_endpoint ? createOtlpSpanProvider(options) : undefined)\n this.span_factory =\n options.span_factory ??\n (this.span_provider\n ? createProviderSpanFactory(this.trace_api, this.span_provider, options.instrumentation_name ?? 'abxbus')\n : undefined)\n this.root_span_name = options.root_span_name\n this.root_span_attributes = options.root_span_attributes\n }\n\n onEventChange(eventbus: EventBus, event: BaseEvent, status: EventStatus): void {\n if (status === 'started') {\n if (this.span_factory) {\n return\n }\n this.startEventSpan(eventbus, event)\n return\n }\n\n if (status === 'completed') {\n this.completeEventSpan(eventbus, event)\n }\n }\n\n onEventResultChange(eventbus: EventBus, event: BaseEvent, event_result: EventResult, status: EventStatus): void {\n if (status === 'started') {\n if (this.span_factory) {\n return\n }\n this.startHandlerSpan(eventbus, event, event_result)\n return\n }\n\n if (status === 'completed') {\n this.completeHandlerSpan(eventbus, event, event_result)\n }\n }\n\n private startEventSpan(eventbus: EventBus, event: BaseEvent): Span {\n const existing = this.event_spans.get(event.event_id)\n if (existing) {\n return existing\n }\n\n const parent_context = this.parentContextForEvent(event) ?? this.startRootSpan(eventbus, event)\n const start_time = dateFromIso(event.event_started_at)\n const span = this.tracer.startSpan(\n eventSpanName(eventbus, event),\n {\n attributes: compactAttributes({\n 'abxbus.bus.id': eventbus.id,\n 'abxbus.bus.name': eventbus.name,\n 'abxbus.event.id': event.event_id,\n 'abxbus.event.type': event.event_type,\n 'abxbus.event.version': event.event_version,\n 'abxbus.event.session_id': stringValue((event as { session_id?: unknown }).session_id),\n 'abxbus.event.parent_id': event.event_parent_id,\n 'abxbus.event.emitted_by_handler_id': event.event_emitted_by_handler_id,\n 'abxbus.event.path': event.event_path.join(' '),\n }),\n startTime: start_time,\n },\n parent_context\n )\n const span_context = this.trace_api.setSpan(parent_context, span)\n this.event_spans.set(event.event_id, span)\n this.event_contexts.set(event.event_id, span_context)\n return span\n }\n\n private completeEventSpan(eventbus: EventBus, event: BaseEvent): void {\n if (this.span_factory) {\n this.completeEventSpanWithFactory(eventbus, event)\n return\n }\n\n const span = this.event_spans.get(event.event_id) ?? this.startEventSpan(eventbus, event)\n if (event.event_errors.length > 0) {\n recordSpanError(span, event.event_errors[0])\n } else {\n span.setStatus({ code: SpanStatusCode.OK })\n }\n span.setAttributes(\n compactAttributes({\n 'abxbus.event.status': event.event_status,\n 'abxbus.event.result_count': event.event_results.size,\n 'abxbus.event.error_count': event.event_errors.length,\n 'abxbus.event.child_count': event.event_children.length,\n })\n )\n const start_time = dateFromIso(event.event_started_at)\n const end_time = endTimeAfterStart(start_time, dateFromIso(event.event_completed_at))\n span.end(end_time)\n this.event_spans.delete(event.event_id)\n this.event_contexts.delete(event.event_id)\n this.completeRootSpan(event.event_id, start_time, end_time)\n }\n\n private startHandlerSpan(eventbus: EventBus, event: BaseEvent, event_result: EventResult): Span {\n const existing = this.handler_spans.get(event_result.id)\n if (existing) {\n return existing\n }\n\n const parent_context =\n this.event_contexts.get(event.event_id) ?? this.trace_api.setSpan(ROOT_CONTEXT, this.startEventSpan(eventbus, event))\n const span = this.tracer.startSpan(\n handlerSpanName(event, event_result),\n {\n attributes: compactAttributes({\n 'abxbus.bus.id': eventbus.id,\n 'abxbus.bus.name': eventbus.name,\n 'abxbus.event.id': event.event_id,\n 'abxbus.event.type': event.event_type,\n 'abxbus.handler.id': event_result.handler_id,\n 'abxbus.handler.name': event_result.handler_name,\n 'abxbus.handler.file_path': event_result.handler_file_path,\n 'abxbus.handler.event_pattern': event_result.handler.event_pattern,\n 'abxbus.event_result.id': event_result.id,\n }),\n startTime: dateFromIso(event_result.started_at),\n },\n parent_context\n )\n const span_context = this.trace_api.setSpan(parent_context, span)\n this.handler_spans.set(event_result.id, span)\n this.handler_contexts.set(handlerSpanKey(event_result.event_id, event_result.handler_id), span_context)\n return span\n }\n\n private completeHandlerSpan(eventbus: EventBus, event: BaseEvent, event_result: EventResult): void {\n if (this.span_factory) {\n this.completeHandlerSpanWithFactory(eventbus, event, event_result)\n return\n }\n\n const span = this.handler_spans.get(event_result.id)\n if (!span) {\n return\n }\n\n if (event_result.error !== undefined) {\n recordSpanError(span, event_result.error)\n } else {\n span.setStatus({ code: SpanStatusCode.OK })\n }\n span.setAttributes(\n compactAttributes({\n 'abxbus.event_result.status': event_result.status,\n 'abxbus.handler.child_count': event_result.event_children.length,\n })\n )\n span.end(endTimeAfterStart(dateFromIso(event_result.started_at), dateFromIso(event_result.completed_at)))\n this.handler_spans.delete(event_result.id)\n this.handler_contexts.delete(handlerSpanKey(event_result.event_id, event_result.handler_id))\n }\n\n private startRootSpan(eventbus: EventBus, event: BaseEvent): Context {\n const existing = this.root_contexts.get(event.event_id)\n if (existing) {\n return existing\n }\n\n const session_id = stringValue((event as { session_id?: unknown }).session_id)\n const root_attributes = resolveAttributes(this.root_span_attributes, eventbus, event)\n const root_span = this.tracer.startSpan(\n resolveRootSpanName(this.root_span_name, eventbus, event),\n {\n attributes: compactAttributes({\n ...root_attributes,\n 'abxbus.trace.root': true,\n 'abxbus.bus.id': eventbus.id,\n 'abxbus.bus.name': eventbus.name,\n 'abxbus.root_event.id': event.event_id,\n 'abxbus.root_event.type': event.event_type,\n 'abxbus.root_event.session_id': session_id,\n }),\n startTime: dateFromIso(event.event_started_at),\n },\n ROOT_CONTEXT\n )\n const root_context = this.trace_api.setSpan(ROOT_CONTEXT, root_span)\n this.root_spans.set(event.event_id, root_span)\n this.root_contexts.set(event.event_id, root_context)\n return root_context\n }\n\n private completeRootSpan(event_id: string, start_time: Date | undefined, end_time: Date | undefined): void {\n const root_span = this.root_spans.get(event_id)\n if (!root_span) {\n return\n }\n\n root_span.setStatus({ code: SpanStatusCode.OK })\n root_span.end(endTimeAfterStart(start_time, end_time))\n this.root_spans.delete(event_id)\n this.root_contexts.delete(event_id)\n }\n\n private parentContextForEvent(event: BaseEvent): Context | undefined {\n if (event.event_parent_id && event.event_emitted_by_handler_id) {\n const handler_context = this.handler_contexts.get(handlerSpanKey(event.event_parent_id, event.event_emitted_by_handler_id))\n if (handler_context) {\n return handler_context\n }\n }\n\n return event.event_parent_id ? this.event_contexts.get(event.event_parent_id) : undefined\n }\n\n private completeEventSpanWithFactory(eventbus: EventBus, event: BaseEvent): void {\n const root_event = rootEventForEvent(eventbus, event)\n const trace_id = traceIdForRootEvent(root_event.event_id)\n const event_context = eventSpanContext(trace_id, event.event_id)\n const start_time = dateFromIso(event.event_started_at)\n const end_time = endTimeAfterStart(start_time, dateFromIso(event.event_completed_at))\n\n if (!event.event_parent_id) {\n const root_span = this.span_factory!({\n name: resolveRootSpanName(this.root_span_name, eventbus, event),\n span_context: rootSpanContext(trace_id, event.event_id),\n attributes: rootSpanAttributes(this.root_span_attributes, eventbus, event),\n start_time,\n })\n root_span.setStatus({ code: SpanStatusCode.OK })\n root_span.end(end_time)\n }\n\n const span = this.span_factory!({\n name: eventSpanName(eventbus, event),\n span_context: event_context,\n parent_span_context: parentSpanContextForEvent(event, trace_id),\n attributes: eventSpanAttributes(eventbus, event),\n start_time,\n })\n if (event.event_errors.length > 0) {\n recordSpanError(span, event.event_errors[0])\n } else {\n span.setStatus({ code: SpanStatusCode.OK })\n }\n span.end(end_time)\n }\n\n private completeHandlerSpanWithFactory(eventbus: EventBus, event: BaseEvent, event_result: EventResult): void {\n const root_event = rootEventForEvent(eventbus, event)\n const trace_id = traceIdForRootEvent(root_event.event_id)\n const start_time = dateFromIso(event_result.started_at)\n const span = this.span_factory!({\n name: handlerSpanName(event, event_result),\n span_context: handlerSpanContext(trace_id, event_result.event_id, event_result.handler_id),\n parent_span_context: eventSpanContext(trace_id, event.event_id),\n attributes: handlerSpanAttributes(eventbus, event, event_result),\n start_time,\n })\n\n if (event_result.error !== undefined) {\n recordSpanError(span, event_result.error)\n } else {\n span.setStatus({ code: SpanStatusCode.OK })\n }\n span.end(endTimeAfterStart(start_time, dateFromIso(event_result.completed_at)))\n }\n}\n\nfunction handlerSpanKey(event_id: string, handler_id: string): string {\n return `${event_id}:${handler_id}`\n}\n\nfunction eventSpanName(eventbus: EventBus, event: BaseEvent): string {\n return `${eventbus.name}.emit(${event.event_type})`\n}\n\nfunction handlerSpanName(event: BaseEvent, event_result: EventResult): string {\n return `${event_result.handler_name}(${event.event_type})`\n}\n\nfunction createOtlpSpanProvider(options: OtelTracingMiddlewareOptions): OtelTracingSpanProvider {\n return new BasicTracerProvider({\n resource: resourceFromAttributes({\n 'service.name': options.service_name ?? 'abxbus',\n }),\n spanProcessors: [\n new SimpleSpanProcessor(\n new OTLPTraceExporter({\n url: normalizeOtlpTracesEndpoint(options.otlp_endpoint!),\n })\n ),\n ],\n })\n}\n\nfunction createProviderSpanFactory(\n trace_api: OpenTelemetryTraceApi,\n provider: OtelTracingSpanProvider,\n instrumentation_name: string\n): OtelTracingSpanFactory {\n const provider_internals = provider as OtelTracingSpanProviderInternals\n return (input: OtelTracingSpanFactoryInput): Span => {\n const span_processor = provider_internals._activeSpanProcessor\n const span_limits = provider_internals._config?.spanLimits\n const resource = provider_internals._resource ?? provider_internals._config?.resource\n if (!span_processor || !span_limits || !resource) {\n throw new Error('OtelTracingMiddleware span_provider must be an OpenTelemetry SDK trace provider with active span internals')\n }\n\n const parent_context = input.parent_span_context\n ? (trace_api.setSpanContext ?? trace.setSpanContext)(ROOT_CONTEXT, input.parent_span_context)\n : ROOT_CONTEXT\n return new SpanImpl({\n resource,\n scope: { name: instrumentation_name },\n context: parent_context,\n spanContext: input.span_context,\n parentSpanContext: input.parent_span_context,\n name: input.name,\n kind: SpanKind.INTERNAL,\n attributes: input.attributes,\n startTime: input.start_time,\n spanProcessor: span_processor,\n spanLimits: span_limits,\n } as ConstructorParameters<typeof SpanImpl>[0])\n }\n}\n\nfunction normalizeOtlpTracesEndpoint(endpoint: string): string {\n const trimmed = endpoint.replace(/\\/+$/, '')\n return trimmed.endsWith('/v1/traces') ? trimmed : `${trimmed}/v1/traces`\n}\n\nfunction eventSpanAttributes(eventbus: EventBus, event: BaseEvent): SpanAttributes {\n return compactAttributes({\n 'abxbus.bus.id': eventbus.id,\n 'abxbus.bus.name': eventbus.name,\n 'abxbus.event.id': event.event_id,\n 'abxbus.event.type': event.event_type,\n 'abxbus.event.version': event.event_version,\n 'abxbus.event.session_id': stringValue((event as { session_id?: unknown }).session_id),\n 'abxbus.event.parent_id': event.event_parent_id,\n 'abxbus.event.emitted_by_handler_id': event.event_emitted_by_handler_id,\n 'abxbus.event.path': event.event_path.join(' '),\n 'abxbus.event.status': event.event_status,\n 'abxbus.event.result_count': event.event_results.size,\n 'abxbus.event.error_count': event.event_errors.length,\n 'abxbus.event.child_count': event.event_children.length,\n })\n}\n\nfunction handlerSpanAttributes(eventbus: EventBus, event: BaseEvent, event_result: EventResult): SpanAttributes {\n return compactAttributes({\n 'abxbus.bus.id': eventbus.id,\n 'abxbus.bus.name': eventbus.name,\n 'abxbus.event.id': event.event_id,\n 'abxbus.event.type': event.event_type,\n 'abxbus.handler.id': event_result.handler_id,\n 'abxbus.handler.name': event_result.handler_name,\n 'abxbus.handler.file_path': event_result.handler_file_path,\n 'abxbus.handler.event_pattern': event_result.handler.event_pattern,\n 'abxbus.event_result.id': event_result.id,\n 'abxbus.event_result.status': event_result.status,\n 'abxbus.handler.child_count': event_result.event_children.length,\n })\n}\n\nfunction rootSpanAttributes(\n root_span_attributes: OtelTracingMiddlewareOptions['root_span_attributes'],\n eventbus: EventBus,\n event: BaseEvent\n): SpanAttributes {\n const session_id = stringValue((event as { session_id?: unknown }).session_id)\n return compactAttributes({\n ...resolveAttributes(root_span_attributes, eventbus, event),\n 'abxbus.trace.root': true,\n 'abxbus.bus.id': eventbus.id,\n 'abxbus.bus.name': eventbus.name,\n 'abxbus.root_event.id': event.event_id,\n 'abxbus.root_event.type': event.event_type,\n 'abxbus.root_event.session_id': session_id,\n 'abxbus.root_event.status': event.event_status,\n 'abxbus.root_event.error_count': event.event_errors.length,\n 'abxbus.root_event.child_count': event.event_children.length,\n })\n}\n\nfunction rootEventForEvent(eventbus: EventBus, event: BaseEvent): BaseEvent {\n let current = event._event_original ?? event\n const seen = new Set<string>()\n while (current.event_parent_id && !seen.has(current.event_id)) {\n seen.add(current.event_id)\n const parent = eventbus.findEventById(current.event_parent_id)\n if (!parent) {\n break\n }\n current = parent._event_original ?? parent\n }\n return current\n}\n\nfunction parentSpanContextForEvent(event: BaseEvent, trace_id: string): SpanContext {\n if (!event.event_parent_id) {\n return rootSpanContext(trace_id, event.event_id)\n }\n\n if (event.event_emitted_by_handler_id) {\n return handlerSpanContext(trace_id, event.event_parent_id, event.event_emitted_by_handler_id)\n }\n\n return eventSpanContext(trace_id, event.event_parent_id)\n}\n\nfunction rootSpanContext(trace_id: string, event_id: string): SpanContext {\n return {\n traceId: trace_id,\n spanId: deterministicSpanId(`abxbus.root:${event_id}`),\n traceFlags: 1,\n }\n}\n\nfunction eventSpanContext(trace_id: string, event_id: string): SpanContext {\n return {\n traceId: trace_id,\n spanId: deterministicSpanId(`abxbus.event:${event_id}`),\n traceFlags: 1,\n }\n}\n\nfunction handlerSpanContext(trace_id: string, event_id: string, handler_id: string): SpanContext {\n return {\n traceId: trace_id,\n spanId: deterministicSpanId(`abxbus.handler:${event_id}:${handler_id}`),\n traceFlags: 1,\n }\n}\n\nfunction traceIdForRootEvent(event_id: string): string {\n return `${fnv1a64Hex(`abxbus.trace.a:${event_id}`)}${fnv1a64Hex(`abxbus.trace.b:${event_id}`)}`\n}\n\nfunction deterministicSpanId(input: string): string {\n return fnv1a64Hex(input)\n}\n\nfunction fnv1a64Hex(input: string): string {\n let hash = 0xcbf29ce484222325n\n const prime = 0x100000001b3n\n const mask = 0xffffffffffffffffn\n for (let index = 0; index < input.length; index += 1) {\n hash ^= BigInt(input.charCodeAt(index))\n hash = (hash * prime) & mask\n }\n if (hash === 0n) {\n hash = 1n\n }\n return hash.toString(16).padStart(16, '0')\n}\n\nfunction dateFromIso(value: string | null | undefined): Date | undefined {\n if (value == null) {\n return undefined\n }\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? undefined : date\n}\n\nfunction endTimeAfterStart(start_time: Date | undefined, end_time: Date | undefined): Date | undefined {\n if (!start_time || !end_time) {\n return end_time\n }\n\n return end_time.getTime() > start_time.getTime() ? end_time : new Date(start_time.getTime() + 1)\n}\n\nfunction resolveRootSpanName(root_span_name: OtelTracingMiddlewareOptions['root_span_name'], eventbus: EventBus, event: BaseEvent): string {\n if (typeof root_span_name === 'function') {\n return root_span_name(eventbus, event)\n }\n return root_span_name ?? `abxbus.trace ${eventbus.name}`\n}\n\nfunction resolveAttributes(\n attributes: OtelTracingMiddlewareOptions['root_span_attributes'],\n eventbus: EventBus,\n event: BaseEvent\n): SpanAttributes {\n return typeof attributes === 'function' ? attributes(eventbus, event) : (attributes ?? {})\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction compactAttributes(attributes: Record<string, SpanAttributeValue | null | undefined>): SpanAttributes {\n const compacted: SpanAttributes = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (value !== null && value !== undefined) {\n compacted[key] = value\n }\n }\n return compacted\n}\n\nfunction recordSpanError(span: Span, error: unknown): void {\n if (error instanceof Error) {\n span.recordException(error)\n span.setStatus({ code: SpanStatusCode.ERROR, message: error.message })\n return\n }\n\n const message = typeof error === 'string' ? error : 'Unknown abxbus handler error'\n span.recordException(message)\n span.setStatus({ code: SpanStatusCode.ERROR, message })\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n ROOT_CONTEXT,\n SpanKind,\n SpanStatusCode,\n trace,\n type Context,\n type Span,\n type SpanAttributeValue,\n type SpanAttributes,\n type SpanContext,\n type Tracer,\n} from '@opentelemetry/api'\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'\nimport { resourceFromAttributes } from '@opentelemetry/resources'\nimport { BasicTracerProvider, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'\nimport type { SpanLimits, SpanProcessor } from '@opentelemetry/sdk-trace-base'\nimport { SpanImpl } from '@opentelemetry/sdk-trace-base/build/src/Span.js'\n\nimport type { BaseEvent } from './base_event.js'\nimport type { EventBus } from './event_bus.js'\nimport type { EventResult } from './event_result.js'\nimport type { EventBusMiddleware } from './middlewares.js'\nimport type { EventStatus } from './types.js'\n\ntype OpenTelemetryTraceApi = Pick<typeof trace, 'getTracer' | 'setSpan'> & Partial<Pick<typeof trace, 'setSpanContext'>>\n\nexport type OtelTracingSpanFactoryInput = {\n name: string\n span_context: SpanContext\n parent_span_context?: SpanContext\n attributes: SpanAttributes\n start_time?: Date\n}\n\nexport type OtelTracingSpanFactory = (input: OtelTracingSpanFactoryInput) => Span\n\ntype OtelTracingSpanProviderInternals = {\n _activeSpanProcessor?: SpanProcessor\n _config?: {\n resource?: unknown\n spanLimits?: SpanLimits\n }\n _resource?: unknown\n}\n\nexport type OtelTracingSpanProvider = object\n\nexport type OtelTracingMiddlewareOptions = {\n tracer?: Tracer\n trace_api?: OpenTelemetryTraceApi\n span_provider?: OtelTracingSpanProvider\n span_factory?: OtelTracingSpanFactory\n otlp_endpoint?: string\n service_name?: string\n instrumentation_name?: string\n root_span_attributes?: SpanAttributes | ((eventbus: EventBus, event: BaseEvent) => SpanAttributes)\n}\n\nexport class OtelTracingMiddleware implements EventBusMiddleware {\n private readonly tracer: Tracer\n private readonly trace_api: OpenTelemetryTraceApi\n private readonly span_factory?: OtelTracingSpanFactory\n private readonly span_provider?: OtelTracingSpanProvider\n private readonly root_span_attributes: OtelTracingMiddlewareOptions['root_span_attributes']\n private readonly event_spans = new Map<string, Span>()\n private readonly event_contexts = new Map<string, Context>()\n private readonly handler_spans = new Map<string, Span>()\n private readonly handler_contexts = new Map<string, Context>()\n\n constructor(options: OtelTracingMiddlewareOptions = {}) {\n this.trace_api = options.trace_api ?? trace\n this.tracer = options.tracer ?? this.trace_api.getTracer('abxbus')\n this.span_provider = options.span_provider ?? (options.otlp_endpoint ? createOtlpSpanProvider(options) : undefined)\n this.span_factory =\n options.span_factory ??\n (this.span_provider\n ? createProviderSpanFactory(this.trace_api, this.span_provider, options.instrumentation_name ?? 'abxbus')\n : undefined)\n this.root_span_attributes = options.root_span_attributes\n }\n\n onEventChange(eventbus: EventBus, event: BaseEvent, status: EventStatus): void {\n if (status === 'started') {\n if (this.span_factory) {\n return\n }\n this.startEventSpan(eventbus, event)\n return\n }\n\n if (status === 'completed') {\n this.completeEventSpan(eventbus, event)\n }\n }\n\n onEventResultChange(eventbus: EventBus, event: BaseEvent, event_result: EventResult, status: EventStatus): void {\n if (status === 'started') {\n if (this.span_factory) {\n return\n }\n this.startHandlerSpan(eventbus, event, event_result)\n return\n }\n\n if (status === 'completed') {\n this.completeHandlerSpan(eventbus, event, event_result)\n }\n }\n\n private startEventSpan(eventbus: EventBus, event: BaseEvent): Span {\n const existing = this.event_spans.get(event.event_id)\n if (existing) {\n return existing\n }\n\n const parent_context = this.parentContextForEvent(event) ?? ROOT_CONTEXT\n const start_time = dateFromIso(event.event_started_at)\n const span = this.tracer.startSpan(\n eventSpanName(eventbus, event),\n {\n attributes: event.event_parent_id ? eventStartedSpanAttributes(eventbus, event) : topLevelEventStartedSpanAttributes(this.root_span_attributes, eventbus, event),\n startTime: start_time,\n },\n parent_context\n )\n const span_context = this.trace_api.setSpan(parent_context, span)\n this.event_spans.set(event.event_id, span)\n this.event_contexts.set(event.event_id, span_context)\n return span\n }\n\n private completeEventSpan(eventbus: EventBus, event: BaseEvent): void {\n if (this.span_factory) {\n this.completeEventSpanWithFactory(eventbus, event)\n return\n }\n\n const span = this.event_spans.get(event.event_id) ?? this.startEventSpan(eventbus, event)\n if (event.event_errors.length > 0) {\n recordSpanError(span, event.event_errors[0])\n } else {\n span.setStatus({ code: SpanStatusCode.OK })\n }\n span.setAttributes(\n event.event_parent_id ? eventSpanAttributes(eventbus, event) : topLevelEventSpanAttributes(this.root_span_attributes, eventbus, event)\n )\n const start_time = dateFromIso(event.event_started_at)\n const end_time = endTimeAfterStart(start_time, dateFromIso(event.event_completed_at))\n span.end(end_time)\n this.event_spans.delete(event.event_id)\n this.event_contexts.delete(event.event_id)\n }\n\n private startHandlerSpan(eventbus: EventBus, event: BaseEvent, event_result: EventResult): Span {\n const existing = this.handler_spans.get(event_result.id)\n if (existing) {\n return existing\n }\n\n const parent_context =\n this.event_contexts.get(event.event_id) ?? this.trace_api.setSpan(ROOT_CONTEXT, this.startEventSpan(eventbus, event))\n const span = this.tracer.startSpan(\n handlerSpanName(event, event_result),\n {\n attributes: handlerSpanAttributes(eventbus, event, event_result),\n startTime: dateFromIso(event_result.started_at),\n },\n parent_context\n )\n const span_context = this.trace_api.setSpan(parent_context, span)\n this.handler_spans.set(event_result.id, span)\n this.handler_contexts.set(handlerSpanKey(event_result.event_id, event_result.handler_id), span_context)\n return span\n }\n\n private completeHandlerSpan(eventbus: EventBus, event: BaseEvent, event_result: EventResult): void {\n if (this.span_factory) {\n return\n }\n\n const span = this.handler_spans.get(event_result.id)\n if (!span) {\n return\n }\n\n if (event_result.error !== undefined) {\n recordSpanError(span, event_result.error)\n } else {\n span.setStatus({ code: SpanStatusCode.OK })\n }\n span.setAttributes(\n handlerSpanAttributes(eventbus, event, event_result)\n )\n span.end(endTimeAfterStart(dateFromIso(event_result.started_at), dateFromIso(event_result.completed_at)))\n this.handler_spans.delete(event_result.id)\n this.handler_contexts.delete(handlerSpanKey(event_result.event_id, event_result.handler_id))\n }\n\n private parentContextForEvent(event: BaseEvent): Context | undefined {\n if (event.event_parent_id && event.event_emitted_by_handler_id) {\n const handler_context = this.handler_contexts.get(handlerSpanKey(event.event_parent_id, event.event_emitted_by_handler_id))\n if (handler_context) {\n return handler_context\n }\n }\n\n return event.event_parent_id ? this.event_contexts.get(event.event_parent_id) : undefined\n }\n\n private completeEventSpanWithFactory(eventbus: EventBus, event: BaseEvent): void {\n if (event.event_parent_id) {\n return\n }\n\n const top_level_event = event._event_original ?? event\n const trace_id = traceIdForRootEvent(top_level_event.event_id)\n this.exportEventTreeWithFactory(eventbus, top_level_event, trace_id, undefined, new Set<string>())\n }\n\n private exportEventTreeWithFactory(\n eventbus: EventBus,\n event: BaseEvent,\n trace_id: string,\n parent_span_context: SpanContext | undefined,\n visited_event_ids: Set<string>\n ): void {\n const original_event = event._event_original ?? event\n if (visited_event_ids.has(original_event.event_id)) {\n return\n }\n visited_event_ids.add(original_event.event_id)\n\n const start_time = dateFromIso(original_event.event_started_at)\n const span_context = eventSpanContext(trace_id, original_event.event_id)\n const span = this.span_factory!({\n name: eventSpanName(eventbus, original_event),\n span_context,\n parent_span_context,\n attributes: original_event.event_parent_id\n ? eventSpanAttributes(eventbus, original_event)\n : topLevelEventSpanAttributes(this.root_span_attributes, eventbus, original_event),\n start_time,\n })\n if (original_event.event_errors.length > 0) {\n recordSpanError(span, original_event.event_errors[0])\n } else {\n span.setStatus({ code: SpanStatusCode.OK })\n }\n span.end(endTimeAfterStart(start_time, dateFromIso(original_event.event_completed_at)))\n\n for (const event_result of original_event.event_results.values()) {\n const handler_context = this.exportHandlerSpanWithFactory(eventbus, original_event, event_result, trace_id, span_context)\n for (const child of event_result.event_children) {\n this.exportEventTreeWithFactory(eventbus, child, trace_id, handler_context, visited_event_ids)\n }\n }\n }\n\n private exportHandlerSpanWithFactory(\n eventbus: EventBus,\n event: BaseEvent,\n event_result: EventResult,\n trace_id: string,\n parent_span_context: SpanContext\n ): SpanContext {\n const start_time = dateFromIso(event_result.started_at)\n const span_context = handlerSpanContext(trace_id, event_result.event_id, event_result.handler_id)\n const span = this.span_factory!({\n name: handlerSpanName(event, event_result),\n span_context,\n parent_span_context,\n attributes: handlerSpanAttributes(eventbus, event, event_result),\n start_time,\n })\n if (event_result.error !== undefined) {\n recordSpanError(span, event_result.error)\n } else {\n span.setStatus({ code: SpanStatusCode.OK })\n }\n span.end(endTimeAfterStart(start_time, dateFromIso(event_result.completed_at)))\n return span_context\n }\n}\n\nfunction handlerSpanKey(event_id: string, handler_id: string): string {\n return `${event_id}:${handler_id}`\n}\n\nfunction eventSpanName(eventbus: EventBus, event: BaseEvent): string {\n return `${eventbus.name}.emit(${event.event_type})`\n}\n\nfunction handlerSpanName(event: BaseEvent, event_result: EventResult): string {\n return `${event_result.handler_name}(${event.event_type})`\n}\n\nfunction createOtlpSpanProvider(options: OtelTracingMiddlewareOptions): OtelTracingSpanProvider {\n return new BasicTracerProvider({\n resource: resourceFromAttributes({\n 'service.name': options.service_name ?? 'abxbus',\n }),\n spanProcessors: [\n new SimpleSpanProcessor(\n new OTLPTraceExporter({\n url: normalizeOtlpTracesEndpoint(options.otlp_endpoint!),\n })\n ),\n ],\n })\n}\n\nfunction createProviderSpanFactory(\n trace_api: OpenTelemetryTraceApi,\n provider: OtelTracingSpanProvider,\n instrumentation_name: string\n): OtelTracingSpanFactory {\n const provider_internals = provider as OtelTracingSpanProviderInternals\n return (input: OtelTracingSpanFactoryInput): Span => {\n const span_processor = provider_internals._activeSpanProcessor\n const span_limits = provider_internals._config?.spanLimits\n const resource = provider_internals._resource ?? provider_internals._config?.resource\n if (!span_processor || !span_limits || !resource) {\n throw new Error('OtelTracingMiddleware span_provider must be an OpenTelemetry SDK trace provider with active span internals')\n }\n\n const parent_context = input.parent_span_context\n ? (trace_api.setSpanContext ?? trace.setSpanContext)(ROOT_CONTEXT, input.parent_span_context)\n : ROOT_CONTEXT\n return new SpanImpl({\n resource,\n scope: { name: instrumentation_name },\n context: parent_context,\n spanContext: input.span_context,\n parentSpanContext: input.parent_span_context,\n name: input.name,\n kind: SpanKind.INTERNAL,\n attributes: input.attributes,\n startTime: input.start_time,\n spanProcessor: span_processor,\n spanLimits: span_limits,\n } as ConstructorParameters<typeof SpanImpl>[0])\n }\n}\n\nfunction normalizeOtlpTracesEndpoint(endpoint: string): string {\n const trimmed = endpoint.replace(/\\/+$/, '')\n return trimmed.endsWith('/v1/traces') ? trimmed : `${trimmed}/v1/traces`\n}\n\nfunction eventStartedSpanAttributes(eventbus: EventBus, event: BaseEvent): SpanAttributes {\n return compactAttributes({\n 'abxbus.event_bus.id': eventbus.id,\n 'abxbus.event_bus.name': eventbus.name,\n 'abxbus.event_id': event.event_id,\n 'abxbus.event_type': event.event_type,\n 'abxbus.event_version': event.event_version,\n 'abxbus.session_id': stringValue((event as { session_id?: unknown }).session_id),\n 'abxbus.event_parent_id': event.event_parent_id,\n 'abxbus.event_emitted_by_handler_id': event.event_emitted_by_handler_id,\n 'abxbus.event_path': event.event_path.join(' '),\n })\n}\n\nfunction eventSpanAttributes(eventbus: EventBus, event: BaseEvent): SpanAttributes {\n return compactAttributes({\n ...eventStartedSpanAttributes(eventbus, event),\n 'abxbus.event_status': event.event_status,\n })\n}\n\nfunction handlerSpanAttributes(eventbus: EventBus, event: BaseEvent, event_result: EventResult): SpanAttributes {\n return compactAttributes({\n 'abxbus.event_bus.id': eventbus.id,\n 'abxbus.event_bus.name': eventbus.name,\n 'abxbus.event_id': event.event_id,\n 'abxbus.event_type': event.event_type,\n 'abxbus.handler_id': event_result.handler_id,\n 'abxbus.handler_name': event_result.handler_name,\n 'abxbus.handler_file_path': event_result.handler_file_path,\n 'abxbus.handler_event_pattern': event_result.handler.event_pattern,\n 'abxbus.event_result_id': event_result.id,\n 'abxbus.event_result_status': event_result.status,\n })\n}\n\nfunction topLevelEventStartedSpanAttributes(\n root_span_attributes: OtelTracingMiddlewareOptions['root_span_attributes'],\n eventbus: EventBus,\n event: BaseEvent\n): SpanAttributes {\n return compactAttributes({\n ...eventStartedSpanAttributes(eventbus, event),\n ...resolveAttributes(root_span_attributes, eventbus, event),\n 'abxbus.trace.root': true,\n })\n}\n\nfunction topLevelEventSpanAttributes(\n root_span_attributes: OtelTracingMiddlewareOptions['root_span_attributes'],\n eventbus: EventBus,\n event: BaseEvent\n): SpanAttributes {\n return compactAttributes({\n ...eventSpanAttributes(eventbus, event),\n ...resolveAttributes(root_span_attributes, eventbus, event),\n 'abxbus.trace.root': true,\n })\n}\n\nfunction eventSpanContext(trace_id: string, event_id: string): SpanContext {\n return {\n traceId: trace_id,\n spanId: deterministicSpanId(`abxbus.event:${event_id}`),\n traceFlags: 1,\n }\n}\n\nfunction handlerSpanContext(trace_id: string, event_id: string, handler_id: string): SpanContext {\n return {\n traceId: trace_id,\n spanId: deterministicSpanId(`abxbus.handler:${event_id}:${handler_id}`),\n traceFlags: 1,\n }\n}\n\nfunction traceIdForRootEvent(event_id: string): string {\n return `${fnv1a64Hex(`abxbus.trace.a:${event_id}`)}${fnv1a64Hex(`abxbus.trace.b:${event_id}`)}`\n}\n\nfunction deterministicSpanId(input: string): string {\n return fnv1a64Hex(input)\n}\n\nfunction fnv1a64Hex(input: string): string {\n let hash = 0xcbf29ce484222325n\n const prime = 0x100000001b3n\n const mask = 0xffffffffffffffffn\n for (let index = 0; index < input.length; index += 1) {\n hash ^= BigInt(input.charCodeAt(index))\n hash = (hash * prime) & mask\n }\n if (hash === 0n) {\n hash = 1n\n }\n return hash.toString(16).padStart(16, '0')\n}\n\nfunction dateFromIso(value: string | null | undefined): Date | undefined {\n if (value == null) {\n return undefined\n }\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? undefined : date\n}\n\nfunction endTimeAfterStart(start_time: Date | undefined, end_time: Date | undefined): Date | undefined {\n if (!start_time || !end_time) {\n return end_time\n }\n\n return end_time.getTime() > start_time.getTime() ? end_time : new Date(start_time.getTime() + 1)\n}\n\nfunction resolveAttributes(\n attributes: OtelTracingMiddlewareOptions['root_span_attributes'],\n eventbus: EventBus,\n event: BaseEvent\n): SpanAttributes {\n return typeof attributes === 'function' ? attributes(eventbus, event) : (attributes ?? {})\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction compactAttributes(attributes: Record<string, SpanAttributeValue | null | undefined>): SpanAttributes {\n const compacted: SpanAttributes = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (value !== null && value !== undefined) {\n compacted[key] = value\n }\n }\n return compacted\n}\n\nfunction recordSpanError(span: Span, error: unknown): void {\n if (error instanceof Error) {\n span.recordException(error)\n span.setStatus({ code: SpanStatusCode.ERROR, message: error.message })\n return\n }\n\n const message = typeof error === 'string' ? error : 'Unknown abxbus handler error'\n span.recordException(message)\n span.setStatus({ code: SpanStatusCode.ERROR, message })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|