UNPKG

nestjs-otel

Version:
60 lines (59 loc) 1.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WideEventSpanProcessor = void 0; exports.getLocalRootSpan = getLocalRootSpan; const localRootSpans = new Map(); const isLocalRoot = (span) => { const parent = span.parentSpanContext; return !parent || parent.isRemote === true; }; /** * The local-root span for the given trace (the span with no in-process * parent — usually the HTTP server span created by instrumentation), or * undefined when the WideEventSpanProcessor is not registered or the span has * already ended. * * @internal */ function getLocalRootSpan(traceId) { return localRootSpans.get(traceId); } /** * Tracks the local-root span of every trace so the WideEventInterceptor can * flush accumulated attributes onto it instead of a nested instrumentation * span (e.g. the per-request span created by instrumentation-nestjs-core or * the per-phase spans created by @fastify/otel). * * Register it on your NodeSDK alongside the exporting processor: * * ```ts * new NodeSDK({ * spanProcessors: [ * new WideEventSpanProcessor(), * new BatchSpanProcessor(traceExporter), * ], * }); * ``` * * @publicApi */ class WideEventSpanProcessor { onStart(span, _parentContext) { if (isLocalRoot(span)) { localRootSpans.set(span.spanContext().traceId, span); } } onEnd(span) { if (isLocalRoot(span)) { localRootSpans.delete(span.spanContext().traceId); } } forceFlush() { return Promise.resolve(); } shutdown() { localRootSpans.clear(); return Promise.resolve(); } } exports.WideEventSpanProcessor = WideEventSpanProcessor;