UNPKG

@opentelemetry/api

Version:
1 lines • 4.01 kB
{"version":3,"file":"NoopTracer.mjs","names":[],"sources":["../../src/trace/NoopTracer.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ContextAPI } from '../api/context';\nimport type { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport type { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport type { SpanOptions } from './SpanOptions';\nimport type { SpanContext } from './span_context';\nimport type { Tracer } from './tracer';\n\nconst contextApi = ContextAPI.getInstance();\n\n/**\n * No-op implementations of {@link Tracer}.\n */\nexport class NoopTracer implements Tracer {\n // startSpan starts a noop span.\n startSpan(\n name: string,\n options?: SpanOptions,\n context = contextApi.active()\n ): Span {\n const root = Boolean(options?.root);\n if (root) {\n return new NonRecordingSpan();\n }\n\n const parentFromContext = context && getSpanContext(context);\n\n if (\n isSpanContext(parentFromContext) &&\n isSpanContextValid(parentFromContext)\n ) {\n return new NonRecordingSpan(parentFromContext);\n } else {\n return new NonRecordingSpan();\n }\n }\n\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n opts: SpanOptions | undefined,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n opts: SpanOptions | undefined,\n ctx: Context | undefined,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n arg2?: F | SpanOptions,\n arg3?: F | Context,\n arg4?: F\n ): ReturnType<F> | undefined {\n let opts: SpanOptions | undefined;\n let ctx: Context | undefined;\n let fn: F;\n\n if (arguments.length < 2) {\n return;\n } else if (arguments.length === 2) {\n fn = arg2 as F;\n } else if (arguments.length === 3) {\n opts = arg2 as SpanOptions | undefined;\n fn = arg3 as F;\n } else {\n opts = arg2 as SpanOptions | undefined;\n ctx = arg3 as Context | undefined;\n fn = arg4 as F;\n }\n\n const parentContext = ctx ?? contextApi.active();\n const span = this.startSpan(name, opts, parentContext);\n const contextWithSpanSet = setSpan(parentContext, span);\n\n return contextApi.with(contextWithSpanSet, fn, undefined, span);\n }\n}\n\nfunction isSpanContext(spanContext: unknown): spanContext is SpanContext {\n return (\n spanContext !== null &&\n typeof spanContext === 'object' &&\n 'spanId' in spanContext &&\n typeof spanContext['spanId'] === 'string' &&\n 'traceId' in spanContext &&\n typeof spanContext['traceId'] === 'string' &&\n 'traceFlags' in spanContext &&\n typeof spanContext['traceFlags'] === 'number'\n );\n}\n"],"mappings":";;;;;AAeA,MAAM,aAAa,WAAW,YAAY;;;;AAK1C,IAAa,aAAb,MAA0C;CAExC,UACE,MACA,SACA,UAAU,WAAW,OAAO,GACtB;EAEN,IADa,QAAA,YAAA,QAAA,YAAA,KAAA,IAAA,KAAA,IAAQ,QAAS,IACvB,GACL,OAAO,IAAI,iBAAiB;EAG9B,MAAM,oBAAoB,WAAW,eAAe,OAAO;EAE3D,IACE,cAAc,iBAAiB,KAC/B,mBAAmB,iBAAiB,GAEpC,OAAO,IAAI,iBAAiB,iBAAiB;OAE7C,OAAO,IAAI,iBAAiB;CAEhC;CAiBA,gBACE,MACA,MACA,MACA,MAC2B;;EAC3B,IAAI;EACJ,IAAI;EACJ,IAAI;EAEJ,IAAI,UAAU,SAAS,GACrB;OACK,IAAI,UAAU,WAAW,GAC9B,KAAK;OACA,IAAI,UAAU,WAAW,GAAG;GACjC,OAAO;GACP,KAAK;EACP,OAAO;GACL,OAAO;GACP,MAAM;GACN,KAAK;EACP;EAEA,MAAM,iBAAA,OAAgB,SAAA,QAAA,SAAA,KAAA,IAAA,OAAO,WAAW,OAAO;EAC/C,MAAM,OAAO,KAAK,UAAU,MAAM,MAAM,aAAa;EACrD,MAAM,qBAAqB,QAAQ,eAAe,IAAI;EAEtD,OAAO,WAAW,KAAK,oBAAoB,IAAI,KAAA,GAAW,IAAI;CAChE;AACF;AAEA,SAAS,cAAc,aAAkD;CACvE,OACE,gBAAgB,QAChB,OAAO,gBAAgB,YACvB,YAAY,eACZ,OAAO,YAAY,cAAc,YACjC,aAAa,eACb,OAAO,YAAY,eAAe,YAClC,gBAAgB,eAChB,OAAO,YAAY,kBAAkB;AAEzC"}