UNPKG

@opentelemetry/otlp-transformer

Version:
63 lines 2.58 kB
import { sdkSpanToOtlpSpan } from './internal'; import { getOtlpEncoder } from '../common'; import { createInstrumentationScope } from '../common/internal'; import { createResource } from '../resource/internal'; export function createExportTraceServiceRequest(spans, options) { const encoder = getOtlpEncoder(options); return { resourceSpans: spanRecordsToResourceSpans(spans, encoder), }; } function createResourceMap(readableSpans) { const resourceMap = new Map(); for (const record of readableSpans) { let ilmMap = resourceMap.get(record.resource); if (!ilmMap) { ilmMap = new Map(); resourceMap.set(record.resource, ilmMap); } // TODO this is duplicated in basic tracer. Consolidate on a common helper in core const instrumentationLibraryKey = `${record.instrumentationLibrary.name}@${record.instrumentationLibrary.version || ''}:${record.instrumentationLibrary.schemaUrl || ''}`; let records = ilmMap.get(instrumentationLibraryKey); if (!records) { records = []; ilmMap.set(instrumentationLibraryKey, records); } records.push(record); } return resourceMap; } function spanRecordsToResourceSpans(readableSpans, encoder) { const resourceMap = createResourceMap(readableSpans); const out = []; const entryIterator = resourceMap.entries(); let entry = entryIterator.next(); while (!entry.done) { const [resource, ilmMap] = entry.value; const scopeResourceSpans = []; const ilmIterator = ilmMap.values(); let ilmEntry = ilmIterator.next(); while (!ilmEntry.done) { const scopeSpans = ilmEntry.value; if (scopeSpans.length > 0) { const spans = scopeSpans.map(readableSpan => sdkSpanToOtlpSpan(readableSpan, encoder)); scopeResourceSpans.push({ scope: createInstrumentationScope(scopeSpans[0].instrumentationLibrary), spans: spans, schemaUrl: scopeSpans[0].instrumentationLibrary.schemaUrl, }); } ilmEntry = ilmIterator.next(); } // TODO SDK types don't provide resource schema URL at this time const transformedSpans = { resource: createResource(resource), scopeSpans: scopeResourceSpans, schemaUrl: undefined, }; out.push(transformedSpans); entry = entryIterator.next(); } return out; } //# sourceMappingURL=index.js.map