diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index b85f4c1d5f5..5373a22789a 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -13,6 +13,7 @@ All notable changes to experimental packages in this project will be documented * feat: use HTTP_ROUTE in span name [#3603](https://github.com/open-telemetry/opentelemetry-js/pull/3603) @Flarna * feat: add HTTP_ROUTE attribute to http incoming metrics if present [#3581](https://github.com/open-telemetry/opentelemetry-js/pull/3581) @hermogenes * feat(sdk-node): install diag logger with OTEL_LOG_LEVEL [#3627](https://github.com/open-telemetry/opentelemetry-js/pull/3627) @legendecas +* feat(sdk-node): override IdGenerator when using NodeSDK [#3645](https://github.com/open-telemetry/opentelemetry-js/pull/3645) @haddasbronfman ### :bug: (Bug Fix) diff --git a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts index faae12dc7d5..8b0e539eeba 100644 --- a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts +++ b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts @@ -117,6 +117,9 @@ export class NodeSDK { if (configuration.spanLimits) { tracerProviderConfig.spanLimits = configuration.spanLimits; } + if (configuration.idGenerator) { + tracerProviderConfig.idGenerator = configuration.idGenerator; + } const spanProcessor = configuration.spanProcessor ?? diff --git a/experimental/packages/opentelemetry-sdk-node/src/types.ts b/experimental/packages/opentelemetry-sdk-node/src/types.ts index 49dfae8f7c9..38178e58c56 100644 --- a/experimental/packages/opentelemetry-sdk-node/src/types.ts +++ b/experimental/packages/opentelemetry-sdk-node/src/types.ts @@ -24,6 +24,7 @@ import { SpanExporter, SpanLimits, SpanProcessor, + IdGenerator, } from '@opentelemetry/sdk-trace-base'; export interface NodeSDKConfiguration { @@ -41,4 +42,5 @@ export interface NodeSDKConfiguration { spanProcessor: SpanProcessor; traceExporter: SpanExporter; spanLimits: SpanLimits; + idGenerator: IdGenerator; } diff --git a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts index fb439017105..5fcdb7f94d5 100644 --- a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts +++ b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts @@ -45,6 +45,7 @@ import { SimpleSpanProcessor, BatchSpanProcessor, NoopSpanProcessor, + IdGenerator, } from '@opentelemetry/sdk-trace-base'; import * as assert from 'assert'; import * as semver from 'semver'; @@ -691,6 +692,33 @@ describe('Node SDK', () => { }); }); }); + + describe('configure IdGenerator', async () => { + class CustomIdGenerator implements IdGenerator { + generateTraceId(): string { + return 'constant-test-trace-id'; + } + generateSpanId(): string { + return 'constant-test-span-id'; + } + } + + it('should configure IdGenerator via config', async () => { + const idGenerator = new CustomIdGenerator(); + const spanProcessor = new SimpleSpanProcessor(new ConsoleSpanExporter()); + const sdk = new NodeSDK({ + idGenerator, + spanProcessor, + }); + sdk.start(); + + const span = trace.getTracer('test').startSpan('testName'); + span.end(); + + assert.strictEqual(span.spanContext().spanId, 'constant-test-span-id'); + assert.strictEqual(span.spanContext().traceId, 'constant-test-trace-id'); + }); + }); }); describe('setup exporter from env', () => {