From 767028c7c8c83c7e915aebbd5d85edef27cc2a10 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Tue, 27 Apr 2021 14:55:02 -0400 Subject: [PATCH] feat: add function to wrap SpanContext in NonRecordingSpan #50 --- src/api/trace.ts | 13 +++++++++---- src/index.ts | 1 + src/trace/spancontext-utils.ts | 11 +++++++++++ test/trace/spancontext-utils.test.ts | 13 +++++++++++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/api/trace.ts b/src/api/trace.ts index f2f083af..c5195969 100644 --- a/src/api/trace.ts +++ b/src/api/trace.ts @@ -14,15 +14,18 @@ * limitations under the License. */ -import { ProxyTracerProvider } from '../trace/ProxyTracerProvider'; -import { Tracer } from '../trace/tracer'; -import { TracerProvider } from '../trace/tracer_provider'; -import { isSpanContextValid } from '../trace/spancontext-utils'; import { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils'; +import { ProxyTracerProvider } from '../trace/ProxyTracerProvider'; +import { + isSpanContextValid, + wrapSpanContext, +} from '../trace/spancontext-utils'; +import { Tracer } from '../trace/tracer'; +import { TracerProvider } from '../trace/tracer_provider'; const API_NAME = 'trace'; @@ -76,5 +79,7 @@ export class TraceAPI { this._proxyTracerProvider = new ProxyTracerProvider(); } + public wrapSpanContext = wrapSpanContext; + public isSpanContextValid = isSpanContextValid; } diff --git a/src/index.ts b/src/index.ts index b36eaccd..6cfd455a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -48,6 +48,7 @@ export { isSpanContextValid, isValidTraceId, isValidSpanId, + wrapSpanContext, } from './trace/spancontext-utils'; export * from './context/context'; diff --git a/src/trace/spancontext-utils.ts b/src/trace/spancontext-utils.ts index ebcc3ce2..97743d79 100644 --- a/src/trace/spancontext-utils.ts +++ b/src/trace/spancontext-utils.ts @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { NonRecordingSpan } from './NonRecordingSpan'; +import { Span } from './span'; import { SpanContext } from './span_context'; import { TraceFlags } from './trace_flags'; @@ -43,3 +45,12 @@ export function isSpanContextValid(spanContext: SpanContext): boolean { isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId) ); } + +/** + * + * @param spanContext span context to be wrapped + * @returns a new {@link NonRecordingSpan} with the provided context + */ +export function wrapSpanContext(spanContext: SpanContext): Span { + return new NonRecordingSpan(spanContext); +} diff --git a/test/trace/spancontext-utils.test.ts b/test/trace/spancontext-utils.test.ts index e194f1d3..81dd3b1f 100644 --- a/test/trace/spancontext-utils.test.ts +++ b/test/trace/spancontext-utils.test.ts @@ -54,4 +54,17 @@ describe('spancontext-utils', () => { }; assert.ok(!context.isSpanContextValid(spanContext)); }); + + it('should wrap a SpanContext in a non-recording span', () => { + const spanContext = { + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, + }; + + const span = context.wrapSpanContext(spanContext); + + assert.deepStrictEqual(span.spanContext(), spanContext); + assert.strictEqual(span.isRecording(), false); + }); });