UNPKG

@genkit-ai/telemetry-server

Version:
80 lines 2.31 kB
function toMillis(nano) { return Math.round(parseInt(nano) / 1000000); } function toSpanData(span, scope) { const attributes = {}; span.attributes.forEach((attr) => { if (attr.value.stringValue) { attributes[attr.key] = attr.value.stringValue; } else if (attr.value.intValue) { attributes[attr.key] = attr.value.intValue; } else if (attr.value.boolValue) { attributes[attr.key] = attr.value.boolValue; } }); let spanKind; switch (span.kind) { case 1: spanKind = 'INTERNAL'; break; case 2: spanKind = 'SERVER'; break; case 3: spanKind = 'CLIENT'; break; case 4: spanKind = 'PRODUCER'; break; case 5: spanKind = 'CONSUMER'; break; default: spanKind = 'UNSPECIFIED'; break; } const spanData = { traceId: span.traceId, spanId: span.spanId, parentSpanId: span.parentSpanId, startTime: toMillis(span.startTimeUnixNano), endTime: toMillis(span.endTimeUnixNano), displayName: span.name, attributes, instrumentationLibrary: { name: scope.name, version: scope.version, }, spanKind, }; if (span.status && span.status.code !== 0) { const status = { code: span.status.code, }; if (span.status.message) { status.message = span.status.message; } spanData.status = status; } return spanData; } export function traceDataFromOtlp(otlpData) { const traces = {}; otlpData.resourceSpans.forEach((resourceSpan) => { resourceSpan.scopeSpans.forEach((scopeSpan) => { scopeSpan.spans.forEach((span) => { if (!traces[span.traceId]) { traces[span.traceId] = { traceId: span.traceId, spans: {}, }; } traces[span.traceId].spans[span.spanId] = toSpanData(span, scopeSpan.scope); }); }); }); return Object.values(traces); } //# sourceMappingURL=otlp.js.map