@genkit-ai/telemetry-server
Version:
Genkit AI telemetry server
84 lines • 2.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.traceDataFromOtlp = void 0;
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;
}
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);
}
exports.traceDataFromOtlp = traceDataFromOtlp;
//# sourceMappingURL=otlp.js.map