{"version":3,"file":"TracerProvider.js","sourceRoot":"","sources":["../../src/TracerProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n TracerProvider as ApiTracerProvider,\n Tracer as ApiTracer,\n} from '@opentelemetry/api';\nimport { createNoopMeter } from '@opentelemetry/api';\nimport type { Resource } from '@opentelemetry/resources';\nimport { defaultResource } from '@opentelemetry/resources';\nimport type { SpanProcessor } from './SpanProcessor';\nimport { Tracer } from './Tracer';\nimport { MultiSpanProcessor } from './MultiSpanProcessor';\nimport type {\n ForceFlushOptions,\n TracerProviderOptions,\n TracerOptions,\n} from './types';\nimport { ParentBasedSampler } from './sampler/ParentBasedSampler';\nimport { AlwaysOnSampler } from './sampler/AlwaysOnSampler';\nimport { RandomIdGenerator } from './platform';\nimport type { InspectFn, InspectStylizeOptions } from './inspect';\nimport {\n formatInspect,\n inspectCustom,\n settledResourceAttributes,\n} from './inspect';\n\nenum ForceFlushState {\n 'resolved',\n 'timeout',\n 'error',\n 'unresolved',\n}\n\n/**\n * This class represents a basic tracer provider which platform libraries can extend\n */\nexport class TracerProvider implements ApiTracerProvider {\n private readonly _resource: Resource;\n private readonly _activeSpanProcessor: MultiSpanProcessor;\n private readonly _forceFlushTimeoutMillis: number;\n private readonly _tracerOptions: TracerOptions;\n private readonly _tracers: Map = new Map();\n\n constructor(options: TracerProviderOptions = {}) {\n this._forceFlushTimeoutMillis = options.forceFlushTimeoutMillis ?? 30000;\n this._resource = options.resource ?? defaultResource();\n const spanProcessors = options.spanProcessors ?? [];\n this._activeSpanProcessor = new MultiSpanProcessor(spanProcessors);\n\n this._tracerOptions = {\n resource: this._resource,\n sampler:\n options.sampler ??\n new ParentBasedSampler({\n root: new AlwaysOnSampler(),\n }),\n spanLimits: {\n attributeCountLimit: options.spanLimits?.attributeCountLimit ?? 128,\n attributeValueLengthLimit:\n options.spanLimits?.attributeValueLengthLimit ?? Infinity,\n eventCountLimit: options.spanLimits?.eventCountLimit ?? 128,\n linkCountLimit: options.spanLimits?.linkCountLimit ?? 128,\n attributePerEventCountLimit:\n options.spanLimits?.attributePerEventCountLimit ?? 128,\n attributePerLinkCountLimit:\n options.spanLimits?.attributePerLinkCountLimit ?? 128,\n },\n idGenerator: options.idGenerator || new RandomIdGenerator(),\n spanProcessor: this._activeSpanProcessor,\n meterProvider: options.meterProvider ?? {\n getMeter() {\n return createNoopMeter();\n },\n },\n };\n }\n\n getTracer(\n name: string,\n version?: string,\n options?: { schemaUrl?: string }\n ): ApiTracer {\n const key = `${name}@${version || ''}:${options?.schemaUrl || ''}`;\n if (!this._tracers.has(key)) {\n this._tracers.set(\n key,\n new Tracer(\n { name, version, schemaUrl: options?.schemaUrl },\n this._tracerOptions\n )\n );\n }\n\n return this._tracers.get(key)!;\n }\n\n forceFlush(options?: ForceFlushOptions): Promise {\n const timeout = options?.timeoutMillis ?? this._forceFlushTimeoutMillis;\n const promises = this._activeSpanProcessor['_spanProcessors'].map(\n (spanProcessor: SpanProcessor) => {\n return new Promise(resolve => {\n let state: ForceFlushState;\n const timeoutInterval = setTimeout(() => {\n resolve(\n new Error(\n `Span processor did not completed within timeout period of ${timeout} ms`\n )\n );\n state = ForceFlushState.timeout;\n }, timeout);\n\n spanProcessor\n .forceFlush()\n .then(() => {\n clearTimeout(timeoutInterval);\n if (state !== ForceFlushState.timeout) {\n state = ForceFlushState.resolved;\n resolve(state);\n }\n })\n .catch(error => {\n clearTimeout(timeoutInterval);\n state = ForceFlushState.error;\n resolve(error);\n });\n });\n }\n );\n\n return new Promise((resolve, reject) => {\n Promise.all(promises)\n .then(results => {\n const errors = results.filter(\n result => result !== ForceFlushState.resolved\n );\n if (errors.length > 0) {\n reject(errors);\n } else {\n resolve();\n }\n })\n .catch(error => reject([error]));\n });\n }\n\n shutdown(): Promise {\n return this._activeSpanProcessor.shutdown();\n }\n\n [inspectCustom](\n depth: number,\n options: InspectStylizeOptions | undefined,\n inspect: InspectFn | undefined\n ): unknown {\n const processors = this._activeSpanProcessor[\n '_spanProcessors'\n ] as SpanProcessor[];\n const payload = {\n resource: { attributes: settledResourceAttributes(this._resource) },\n tracers: Array.from(this._tracers.keys()),\n spanProcessors: processors.map(\n p => p.constructor?.name ?? 'SpanProcessor'\n ),\n };\n return formatInspect('TracerProvider', payload, depth, options, inspect);\n }\n}\n"]}