diff --git a/experimental/packages/otlp-transformer/src/common/internal.ts b/experimental/packages/otlp-transformer/src/common/internal.ts index 0fe649f525..aa394e3c82 100644 --- a/experimental/packages/otlp-transformer/src/common/internal.ts +++ b/experimental/packages/otlp-transformer/src/common/internal.ts @@ -13,8 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import type { IAnyValue, IKeyValue } from './types'; +import type { IAnyValue, IInstrumentationScope, IKeyValue } from './types'; import { Attributes } from '@opentelemetry/api'; +import {InstrumentationScope} from "@opentelemetry/core"; + +export function createInstrumentationScope( + scope: InstrumentationScope): IInstrumentationScope { + return { + name: scope.name, + version: scope.version, + droppedAttributesCount: 0, + } +} export function toAttributes(attributes: Attributes): IKeyValue[] { return Object.keys(attributes).map(key => toKeyValue(key, attributes[key])); diff --git a/experimental/packages/otlp-transformer/src/logs/index.ts b/experimental/packages/otlp-transformer/src/logs/index.ts index b690484a71..410b110ba1 100644 --- a/experimental/packages/otlp-transformer/src/logs/index.ts +++ b/experimental/packages/otlp-transformer/src/logs/index.ts @@ -23,10 +23,11 @@ import { } from './types'; import { IResource } from '@opentelemetry/resources'; import { Encoder, getOtlpEncoder } from '../common'; -import { toAnyValue, toAttributes, toKeyValue } from '../common/internal'; +import { createInstrumentationScope, toAnyValue, toKeyValue } from '../common/internal'; import { SeverityNumber } from '@opentelemetry/api-logs'; import { OtlpEncodingOptions, IKeyValue } from '../common/types'; import { LogAttributes } from '@opentelemetry/api-logs'; +import { createResource } from "../resource/internal"; export function createExportLogsServiceRequest( logRecords: ReadableLogRecord[], @@ -75,18 +76,12 @@ function logRecordsToResourceLogs( ): IResourceLogs[] { const resourceMap = createResourceMap(logRecords); return Array.from(resourceMap, ([resource, ismMap]) => ({ - resource: { - attributes: toAttributes(resource.attributes), - droppedAttributesCount: 0, - }, + resource: createResource(resource), scopeLogs: Array.from(ismMap, ([, scopeLogs]) => { - const { - instrumentationScope: { name, version, schemaUrl }, - } = scopeLogs[0]; return { - scope: { name, version }, + scope: createInstrumentationScope(scopeLogs[0].instrumentationScope), logRecords: scopeLogs.map(log => toLogRecord(log, encoder)), - schemaUrl, + schemaUrl: scopeLogs[0].instrumentationScope.schemaUrl, }; }), schemaUrl: undefined, diff --git a/experimental/packages/otlp-transformer/src/metrics/internal.ts b/experimental/packages/otlp-transformer/src/metrics/internal.ts index 1a621a4213..0fc5ef1abf 100644 --- a/experimental/packages/otlp-transformer/src/metrics/internal.ts +++ b/experimental/packages/otlp-transformer/src/metrics/internal.ts @@ -25,7 +25,6 @@ import { ResourceMetrics, ScopeMetrics, } from '@opentelemetry/sdk-metrics'; -import { toAttributes } from '../common/internal'; import { EAggregationTemporality, IExponentialHistogramDataPoint, @@ -35,7 +34,9 @@ import { IResourceMetrics, IScopeMetrics, } from './types'; -import { Encoder, getOtlpEncoder } from '../common'; +import {Encoder, getOtlpEncoder} from '../common'; +import { createInstrumentationScope, toAttributes } from '../common/internal'; +import { createResource } from "../resource/internal"; export function toResourceMetrics( resourceMetrics: ResourceMetrics, @@ -43,10 +44,7 @@ export function toResourceMetrics( ): IResourceMetrics { const encoder = getOtlpEncoder(options); return { - resource: { - attributes: toAttributes(resourceMetrics.resource.attributes), - droppedAttributesCount: 0, - }, + resource: createResource(resourceMetrics.resource), schemaUrl: undefined, scopeMetrics: toScopeMetrics(resourceMetrics.scopeMetrics, encoder), }; @@ -58,10 +56,7 @@ export function toScopeMetrics( ): IScopeMetrics[] { return Array.from( scopeMetrics.map(metrics => ({ - scope: { - name: metrics.scope.name, - version: metrics.scope.version, - }, + scope: createInstrumentationScope(metrics.scope), metrics: metrics.metrics.map(metricData => toMetric(metricData, encoder)), schemaUrl: metrics.scope.schemaUrl, })) diff --git a/experimental/packages/otlp-transformer/src/resource/internal.ts b/experimental/packages/otlp-transformer/src/resource/internal.ts new file mode 100644 index 0000000000..128f7aa493 --- /dev/null +++ b/experimental/packages/otlp-transformer/src/resource/internal.ts @@ -0,0 +1,26 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { IResource as ISdkResource } from '@opentelemetry/resources'; +import { toAttributes } from "../common/internal"; +import { IResource } from "./types"; + +export function createResource( + resource: ISdkResource): IResource { + return { + attributes: toAttributes(resource.attributes), + droppedAttributesCount: 0, + } +} diff --git a/experimental/packages/otlp-transformer/src/trace/index.ts b/experimental/packages/otlp-transformer/src/trace/index.ts index 5db18a082e..c385e7a679 100644 --- a/experimental/packages/otlp-transformer/src/trace/index.ts +++ b/experimental/packages/otlp-transformer/src/trace/index.ts @@ -16,14 +16,15 @@ import type { IResource } from '@opentelemetry/resources'; import type { ReadableSpan } from '@opentelemetry/sdk-trace-base'; import type { OtlpEncodingOptions } from '../common/types'; -import { toAttributes } from '../common/internal'; import { sdkSpanToOtlpSpan } from './internal'; import { IExportTraceServiceRequest, IResourceSpans, IScopeSpans, } from './types'; -import { Encoder, getOtlpEncoder } from '../common'; +import { Encoder, getOtlpEncoder} from '../common'; +import { createInstrumentationScope } from '../common/internal'; +import { createResource } from "../resource/internal"; export function createExportTraceServiceRequest( spans: ReadableSpan[], @@ -79,26 +80,21 @@ function spanRecordsToResourceSpans( while (!ilmEntry.done) { const scopeSpans = ilmEntry.value; if (scopeSpans.length > 0) { - const { name, version, schemaUrl } = - scopeSpans[0].instrumentationLibrary; const spans = scopeSpans.map(readableSpan => sdkSpanToOtlpSpan(readableSpan, encoder) ); scopeResourceSpans.push({ - scope: { name, version }, + scope: createInstrumentationScope(scopeSpans[0].instrumentationLibrary), spans: spans, - schemaUrl: schemaUrl, + schemaUrl: scopeSpans[0].instrumentationLibrary.schemaUrl, }); } ilmEntry = ilmIterator.next(); } // TODO SDK types don't provide resource schema URL at this time const transformedSpans: IResourceSpans = { - resource: { - attributes: toAttributes(resource.attributes), - droppedAttributesCount: 0, - }, + resource: createResource(resource), scopeSpans: scopeResourceSpans, schemaUrl: undefined, };