UNPKG

@grafana/faro-web-tracing

Version:
58 lines 3.17 kB
import { ESpanKind } from '@opentelemetry/otlp-transformer/build/src/trace/internal-types'; import { faro, unknownString } from '@grafana/faro-core'; const DURATION_NS_KEY = 'duration_ns'; export function sendFaroEvents(resourceSpans = []) { var _a, _b; for (const resourceSpan of resourceSpans) { const { scopeSpans } = resourceSpan; for (const scopeSpan of scopeSpans) { const { scope, spans = [] } = scopeSpan; for (const span of spans) { if (span.kind !== ESpanKind.SPAN_KIND_CLIENT) { continue; } const spanContext = { traceId: span.traceId.toString(), spanId: span.spanId.toString(), }; const faroEventAttributes = {}; for (const attribute of span.attributes) { faroEventAttributes[attribute.key] = String(Object.values(attribute.value)[0]); } // Add span duration in nanoseconds if (!Number.isNaN(span.endTimeUnixNano) && !Number.isNaN(span.startTimeUnixNano)) { faroEventAttributes[DURATION_NS_KEY] = String(Number(span.endTimeUnixNano) - Number(span.startTimeUnixNano)); } const index = ((_a = scope === null || scope === void 0 ? void 0 : scope.name) !== null && _a !== void 0 ? _a : '').indexOf('-'); let eventName = unknownString; if (scope === null || scope === void 0 ? void 0 : scope.name) { if (index === -1) { eventName = (_b = scope.name.split('/')[1]) !== null && _b !== void 0 ? _b : scope.name; } if (index > -1) { eventName = scope === null || scope === void 0 ? void 0 : scope.name.substring(index + 1); } } faro.api.pushEvent(`faro.tracing.${eventName}`, faroEventAttributes, undefined, { spanContext, // Convert nanoseconds to milliseconds timestampOverwriteMs: Number(span.endTimeUnixNano) / 1000000, customPayloadTransformer: (payload) => { var _a, _b; if (faroEventAttributes['faro.action.user.name'] != null && faroEventAttributes['faro.action.user.parentId'] != null) { payload.action = { name: faroEventAttributes['faro.action.user.name'], parentId: faroEventAttributes['faro.action.user.parentId'], }; (_a = payload.attributes) === null || _a === void 0 ? true : delete _a['faro.action.user.name']; (_b = payload.attributes) === null || _b === void 0 ? true : delete _b['faro.action.user.parentId']; } return payload; }, }); } } } } //# sourceMappingURL=faroTraceExporter.utils.js.map