diff --git a/packages/opentelemetry-basic-tracer/src/BasicTracer.ts b/packages/opentelemetry-basic-tracer/src/BasicTracer.ts index bf8d0d1a286..5dc04d7775e 100644 --- a/packages/opentelemetry-basic-tracer/src/BasicTracer.ts +++ b/packages/opentelemetry-basic-tracer/src/BasicTracer.ts @@ -19,10 +19,10 @@ import { ALWAYS_SAMPLER, BinaryTraceContext, HttpTraceContext, - NOOP_SPAN, randomTraceId, isValid, randomSpanId, + NoRecordingSpan, } from '@opentelemetry/core'; import { BinaryFormat, @@ -79,9 +79,7 @@ export class BasicTracer implements types.Tracer { const spanContext = { traceId, spanId, traceOptions, traceState }; if (!samplingDecision) { - // TODO: propagate SpanContext, for more information see - // https://github.com/open-telemetry/opentelemetry-js/pull/99#issuecomment-513325536 - return NOOP_SPAN; + return new NoRecordingSpan(spanContext); } const span = new Span( diff --git a/packages/opentelemetry-basic-tracer/test/BasicTracer.test.ts b/packages/opentelemetry-basic-tracer/test/BasicTracer.test.ts index 5643713b5bb..baa2a037593 100644 --- a/packages/opentelemetry-basic-tracer/test/BasicTracer.test.ts +++ b/packages/opentelemetry-basic-tracer/test/BasicTracer.test.ts @@ -20,9 +20,9 @@ import { BinaryTraceContext, HttpTraceContext, NEVER_SAMPLER, - NOOP_SPAN, NoopLogger, TraceState, + NoRecordingSpan, } from '@opentelemetry/core'; import { BasicTracer } from '../src/BasicTracer'; import { NoopScopeManager } from '@opentelemetry/scope-base'; @@ -153,13 +153,18 @@ describe('BasicTracer', () => { assert.deepStrictEqual(context.traceState, undefined); }); - it('should return a default span with no sampling', () => { + it('should return a no recording span when never sampling', () => { const tracer = new BasicTracer({ sampler: NEVER_SAMPLER, scopeManager: new NoopScopeManager(), }); const span = tracer.startSpan('my-span'); - assert.deepStrictEqual(span, NOOP_SPAN); + assert.ok(span instanceof NoRecordingSpan); + const context = span.context(); + assert.ok(context.traceId.match(/[a-f0-9]{32}/)); + assert.ok(context.spanId.match(/[a-f0-9]{16}/)); + assert.strictEqual(context.traceOptions, TraceOptions.UNSAMPLED); + assert.deepStrictEqual(context.traceState, undefined); }); // @todo: implement diff --git a/packages/opentelemetry-core/src/index.ts b/packages/opentelemetry-core/src/index.ts index b7c48af6d03..e64f54dcfb0 100644 --- a/packages/opentelemetry-core/src/index.ts +++ b/packages/opentelemetry-core/src/index.ts @@ -23,6 +23,7 @@ export * from './trace/globaltracer-utils'; export * from './trace/instrumentation/BasePlugin'; export * from './trace/NoopSpan'; export * from './trace/NoopTracer'; +export * from './trace/NoRecordingSpan'; export * from './trace/sampler/ProbabilitySampler'; export * from './trace/spancontext-utils'; export * from './trace/TracerDelegate';