Skip to content

Commit

Permalink
[chore] consolidate scope/resource creation in transformer
Browse files Browse the repository at this point in the history
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
  • Loading branch information
bogdandrutu committed Jan 18, 2024
1 parent 43e598e commit 4f82df5
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 31 deletions.
12 changes: 11 additions & 1 deletion experimental/packages/otlp-transformer/src/common/internal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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]));
Expand Down
15 changes: 5 additions & 10 deletions experimental/packages/otlp-transformer/src/logs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[],
Expand Down Expand Up @@ -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,
Expand Down
15 changes: 5 additions & 10 deletions experimental/packages/otlp-transformer/src/metrics/internal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import {
ResourceMetrics,
ScopeMetrics,
} from '@opentelemetry/sdk-metrics';
import { toAttributes } from '../common/internal';
import {
EAggregationTemporality,
IExponentialHistogramDataPoint,
Expand All @@ -35,18 +34,17 @@ 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,
options?: OtlpEncodingOptions
): 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),
};
Expand All @@ -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,
}))
Expand Down
26 changes: 26 additions & 0 deletions experimental/packages/otlp-transformer/src/resource/internal.ts
Original file line number Diff line number Diff line change
@@ -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,
}
}
16 changes: 6 additions & 10 deletions experimental/packages/otlp-transformer/src/trace/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[],
Expand Down Expand Up @@ -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,
};
Expand Down

0 comments on commit 4f82df5

Please sign in to comment.