@opentelemetry/sdk-node 0.214.0 → 0.216.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -243,6 +243,7 @@ OTEL_NODE_EXPERIMENTAL_SDK_METRICS=true
243
243
  Currently a subset of the specified metrics are implemented. See the following
244
244
  linkes for details:
245
245
 
246
+ - Logger metrics: [LoggerMetrics.ts](../sdk-logs/src/LoggerMetrics.ts)
246
247
  - Span metrics: [TracerMetrics.ts](../../../packages/opentelemetry-sdk-trace-base/src/TracerMetrics.ts)
247
248
 
248
249
  ## Useful links
@@ -10,4 +10,5 @@ export { NodeSDK } from './sdk';
10
10
  export type { LoggerProviderConfig, MeterProviderConfig } from './sdk';
11
11
  export type { NodeSDKConfiguration } from './types';
12
12
  export { startNodeSDK } from './start';
13
+ export { buildSamplerFromConfig } from './utils';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.startNodeSDK = exports.NodeSDK = exports.tracing = exports.resources = exports.node = exports.metrics = exports.logs = exports.core = exports.contextBase = exports.api = void 0;
7
+ exports.buildSamplerFromConfig = exports.startNodeSDK = exports.NodeSDK = exports.tracing = exports.resources = exports.node = exports.metrics = exports.logs = exports.core = exports.contextBase = exports.api = void 0;
8
8
  // This is a meta-package, and these exist in to re-export *all* items from
9
9
  // the individual packages as individual _namespaces_, so wildcard exports are
10
10
  // appropriate here. Otherwise, it'd be a pain to enumerate and keep things
@@ -23,4 +23,6 @@ var sdk_1 = require("./sdk");
23
23
  Object.defineProperty(exports, "NodeSDK", { enumerable: true, get: function () { return sdk_1.NodeSDK; } });
24
24
  var start_1 = require("./start");
25
25
  Object.defineProperty(exports, "startNodeSDK", { enumerable: true, get: function () { return start_1.startNodeSDK; } });
26
+ var utils_1 = require("./utils");
27
+ Object.defineProperty(exports, "buildSamplerFromConfig", { enumerable: true, get: function () { return utils_1.buildSamplerFromConfig; } });
26
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,0CAA0C;AAE1C,yCAAyC;AACzC,4CAA0C;AAC1C,oDAAkD;AAClD,8CAA4C;AAC5C,kDAAgD;AAChD,wDAAsD;AACtD,wDAAsD;AACtD,wDAAsD;AACtD,2DAAyD;AACzD,wCAAwC;AAExC,6BAAgC;AAAvB,8FAAA,OAAO,OAAA;AAGhB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// This is a meta-package, and these exist in to re-export *all* items from\n// the individual packages as individual _namespaces_, so wildcard exports are\n// appropriate here. Otherwise, it'd be a pain to enumerate and keep things\n// in-sync with all the upstream packages.\n\n/* eslint-disable no-restricted-syntax */\nexport * as api from '@opentelemetry/api';\nexport * as contextBase from '@opentelemetry/api';\nexport * as core from '@opentelemetry/core';\nexport * as logs from '@opentelemetry/sdk-logs';\nexport * as metrics from '@opentelemetry/sdk-metrics';\nexport * as node from '@opentelemetry/sdk-trace-node';\nexport * as resources from '@opentelemetry/resources';\nexport * as tracing from '@opentelemetry/sdk-trace-base';\n/* eslint-enable no-restricted-syntax */\n\nexport { NodeSDK } from './sdk';\nexport type { LoggerProviderConfig, MeterProviderConfig } from './sdk';\nexport type { NodeSDKConfiguration } from './types';\nexport { startNodeSDK } from './start';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,0CAA0C;AAE1C,yCAAyC;AACzC,4CAA0C;AAC1C,oDAAkD;AAClD,8CAA4C;AAC5C,kDAAgD;AAChD,wDAAsD;AACtD,wDAAsD;AACtD,wDAAsD;AACtD,2DAAyD;AACzD,wCAAwC;AAExC,6BAAgC;AAAvB,8FAAA,OAAO,OAAA;AAGhB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,iCAAiD;AAAxC,+GAAA,sBAAsB,OAAA","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// This is a meta-package, and these exist in to re-export *all* items from\n// the individual packages as individual _namespaces_, so wildcard exports are\n// appropriate here. Otherwise, it'd be a pain to enumerate and keep things\n// in-sync with all the upstream packages.\n\n/* eslint-disable no-restricted-syntax */\nexport * as api from '@opentelemetry/api';\nexport * as contextBase from '@opentelemetry/api';\nexport * as core from '@opentelemetry/core';\nexport * as logs from '@opentelemetry/sdk-logs';\nexport * as metrics from '@opentelemetry/sdk-metrics';\nexport * as node from '@opentelemetry/sdk-trace-node';\nexport * as resources from '@opentelemetry/resources';\nexport * as tracing from '@opentelemetry/sdk-trace-base';\n/* eslint-enable no-restricted-syntax */\n\nexport { NodeSDK } from './sdk';\nexport type { LoggerProviderConfig, MeterProviderConfig } from './sdk';\nexport type { NodeSDKConfiguration } from './types';\nexport { startNodeSDK } from './start';\nexport { buildSamplerFromConfig } from './utils';\n"]}
package/build/src/sdk.js CHANGED
@@ -203,6 +203,9 @@ class NodeSDK {
203
203
  : this._resource.merge((0, resources_1.resourceFromAttributes)({
204
204
  [semantic_conventions_1.ATTR_SERVICE_NAME]: this._serviceName,
205
205
  }));
206
+ // While SDK metrics are unstable, we require an opt-in.
207
+ // https://opentelemetry.io/docs/specs/semconv/otel/sdk-metrics/
208
+ const sdkMetricsEnabled = (0, core_1.getBooleanFromEnv)('OTEL_NODE_EXPERIMENTAL_SDK_METRICS');
206
209
  if (this._meterProviderConfig?.readers &&
207
210
  // only register if there is a reader, otherwise we waste compute/memory.
208
211
  this._meterProviderConfig.readers.length > 0) {
@@ -225,9 +228,6 @@ class NodeSDK {
225
228
  : (0, utils_1.getSpanProcessorsFromEnv)();
226
229
  // Only register if there is a span processor
227
230
  if (spanProcessors.length > 0) {
228
- // While SDK metrics are unstable, we require an opt-in.
229
- // https://opentelemetry.io/docs/specs/semconv/otel/sdk-metrics/
230
- const sdkMetricsEnabled = (0, core_1.getBooleanFromEnv)('OTEL_NODE_EXPERIMENTAL_SDK_METRICS');
231
231
  this._tracerProvider = new sdk_trace_node_1.NodeTracerProvider({
232
232
  ...this._configuration,
233
233
  resource: this._resource,
@@ -241,6 +241,7 @@ class NodeSDK {
241
241
  ...(0, utils_1.getLoggerProviderConfigFromEnv)(),
242
242
  resource: this._resource,
243
243
  processors: this._loggerProviderConfig.logRecordProcessors,
244
+ meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,
244
245
  });
245
246
  this._loggerProvider = loggerProvider;
246
247
  api_logs_1.logs.setGlobalLoggerProvider(loggerProvider);
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { metrics, trace, diag, DiagConsoleLogger } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport type { Instrumentation } from '@opentelemetry/instrumentation';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type {\n Resource,\n ResourceDetectionConfig,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n defaultResource,\n detectResources,\n envDetector,\n hostDetector,\n processDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport type {\n LogRecordProcessor,\n LogRecordExporter,\n} from '@opentelemetry/sdk-logs';\nimport {\n LoggerProvider,\n ConsoleLogRecordExporter,\n SimpleLogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport { OTLPLogExporter as OTLPHttpLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { OTLPLogExporter as OTLPGrpcLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc';\nimport { OTLPLogExporter as OTLPProtoLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';\nimport { PrometheusExporter as PrometheusMetricExporter } from '@opentelemetry/exporter-prometheus';\nimport type { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';\nimport {\n MeterProvider,\n ConsoleMetricExporter,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport type { SpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport type { NodeTracerConfig } from '@opentelemetry/sdk-trace-node';\nimport { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';\nimport type { NodeSDKConfiguration } from './types';\nimport {\n getBooleanFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n diagLogLevelFromString,\n} from '@opentelemetry/core';\nimport {\n getResourceDetectorsFromEnv,\n getSpanProcessorsFromEnv,\n getPropagatorFromEnv,\n setupPropagator,\n setupContextManager,\n getPeriodicExportingMetricReaderFromEnv,\n getOtlpMetricExporterFromEnv,\n getBatchLogRecordProcessorFromEnv,\n getLoggerProviderConfigFromEnv,\n} from './utils';\n\ntype TracerProviderConfig = {\n tracerConfig: NodeTracerConfig;\n spanProcessors: SpanProcessor[];\n};\n\nexport type MeterProviderConfig = {\n /**\n * Reference to the MetricReader instances by the NodeSDK\n */\n readers?: IMetricReader[];\n /**\n * List of {@link ViewOptions}s that should be passed to the MeterProvider\n */\n views?: ViewOptions[];\n};\n\nexport type LoggerProviderConfig = {\n /**\n * Reference to the LoggerRecordProcessor instance by the NodeSDK\n */\n logRecordProcessors: LogRecordProcessor[];\n};\n\n/**\n *\n * @returns MetricReader[] if appropriate environment variables are configured\n */\nfunction getMetricReadersFromEnv(): IMetricReader[] {\n const metricReaders: IMetricReader[] = [];\n const enabledExporters = Array.from(\n new Set(getStringListFromEnv('OTEL_METRICS_EXPORTER') ?? [])\n );\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_METRICS_EXPORTER is empty. Using default otlp exporter.');\n enabledExporters.push('otlp');\n }\n\n if (enabledExporters.includes('none')) {\n diag.info(\n `OTEL_METRICS_EXPORTER contains \"none\". Metric provider will not be initialized.`\n );\n return metricReaders;\n }\n\n enabledExporters.forEach(exporter => {\n if (exporter === 'otlp') {\n metricReaders.push(\n getPeriodicExportingMetricReaderFromEnv(getOtlpMetricExporterFromEnv())\n );\n } else if (exporter === 'console') {\n metricReaders.push(\n new PeriodicExportingMetricReader({\n exporter: new ConsoleMetricExporter(),\n })\n );\n } else if (exporter === 'prometheus') {\n metricReaders.push(new PrometheusMetricExporter());\n } else {\n diag.warn(\n `Unsupported OTEL_METRICS_EXPORTER value: \"${exporter}\". Supported values are: otlp, console, prometheus, none.`\n );\n }\n });\n\n return metricReaders;\n}\n\n/**\n * A setup helper for the OpenTelemetry SDKs (logs, metrics, traces).\n * <p> After successful setup using {@link NodeSDK#start()}, use `@opentelemetry/api` to obtain the registered components.\n * <p> Use the shutdown handler {@link NodeSDK#shutdown()} to ensure your telemetry is exported before the process exits.\n *\n * @example <caption> Register SDK by using environment variables </caption>\n * const nodeSdk = new NodeSDK(); // providing no options uses OTEL_* environment variables for SDK setup.\n * nodeSdk.start(); // registers all configured SDK components\n * @example <caption> Override environment variable config with your own components </caption>\n * const nodeSdk = new NodeSDK({\n * // override the list of metric reader with your own options and ignore environment variable config\n * // explore the docs of other options to learn more!\n * metricReaders: [ new PeriodicExportingMetricReader({\n * exporter: new OTLPMetricsExporter()\n * })]\n * });\n * nodeSdk.start(); // registers all configured SDK components\n */\nexport class NodeSDK {\n private _tracerProviderConfig?: TracerProviderConfig;\n private _loggerProviderConfig?: LoggerProviderConfig;\n private _meterProviderConfig?: MeterProviderConfig;\n private _instrumentations: Instrumentation[];\n\n private _resource: Resource;\n private _resourceDetectors: Array<ResourceDetector>;\n\n private _autoDetectResources: boolean;\n\n private _tracerProvider?: NodeTracerProvider;\n private _loggerProvider?: LoggerProvider;\n private _meterProvider?: MeterProvider;\n private _serviceName?: string;\n private _configuration?: Partial<NodeSDKConfiguration>;\n\n private _disabled?: boolean;\n\n /**\n * Create a new NodeJS SDK instance\n */\n public constructor(configuration: Partial<NodeSDKConfiguration> = {}) {\n if (getBooleanFromEnv('OTEL_SDK_DISABLED')) {\n this._disabled = true;\n // Functions with possible side-effects are set\n // to no-op via the _disabled flag\n }\n\n const logLevel = getStringFromEnv('OTEL_LOG_LEVEL');\n if (logLevel != null) {\n diag.setLogger(new DiagConsoleLogger(), {\n logLevel: diagLogLevelFromString(logLevel),\n });\n }\n\n this._configuration = configuration;\n\n this._resource = configuration.resource ?? defaultResource();\n this._autoDetectResources = configuration.autoDetectResources ?? true;\n if (!this._autoDetectResources) {\n this._resourceDetectors = [];\n } else if (configuration.resourceDetectors != null) {\n this._resourceDetectors = configuration.resourceDetectors;\n } else if (getStringFromEnv('OTEL_NODE_RESOURCE_DETECTORS')) {\n this._resourceDetectors = getResourceDetectorsFromEnv();\n } else {\n this._resourceDetectors = [envDetector, processDetector, hostDetector];\n }\n\n this._serviceName = configuration.serviceName;\n\n // If a tracer provider can be created from manual configuration, create it\n if (\n configuration.traceExporter ||\n configuration.spanProcessor ||\n configuration.spanProcessors\n ) {\n const tracerProviderConfig: NodeTracerConfig = {};\n\n if (configuration.sampler) {\n tracerProviderConfig.sampler = configuration.sampler;\n }\n if (configuration.spanLimits) {\n tracerProviderConfig.spanLimits = configuration.spanLimits;\n }\n if (configuration.idGenerator) {\n tracerProviderConfig.idGenerator = configuration.idGenerator;\n }\n\n if (configuration.spanProcessor) {\n diag.warn(\n \"The 'spanProcessor' option is deprecated. Please use 'spanProcessors' instead.\"\n );\n }\n\n const spanProcessor =\n configuration.spanProcessor ??\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n new BatchSpanProcessor(configuration.traceExporter!);\n\n const spanProcessors = configuration.spanProcessors ?? [spanProcessor];\n\n this._tracerProviderConfig = {\n tracerConfig: tracerProviderConfig,\n spanProcessors,\n };\n }\n\n if (configuration.logRecordProcessors) {\n this._loggerProviderConfig = {\n logRecordProcessors: configuration.logRecordProcessors,\n };\n } else if (configuration.logRecordProcessor) {\n this._loggerProviderConfig = {\n logRecordProcessors: [configuration.logRecordProcessor],\n };\n diag.warn(\n \"The 'logRecordProcessor' option is deprecated. Please use 'logRecordProcessors' instead.\"\n );\n } else {\n this.configureLoggerProviderFromEnv();\n }\n\n if (configuration.metricReaders) {\n this._meterProviderConfig = {\n readers: configuration.metricReaders,\n views: configuration.views,\n };\n } else if (configuration.metricReader) {\n this._meterProviderConfig = {\n readers: [configuration.metricReader],\n views: configuration.views,\n };\n diag.warn(\n \"The 'metricReader' option is deprecated. Please use 'metricReaders' instead.\"\n );\n } else {\n this._meterProviderConfig = {\n readers: getMetricReadersFromEnv(),\n views: configuration.views,\n };\n }\n\n this._instrumentations = configuration.instrumentations?.flat() ?? [];\n }\n\n /**\n * Call this method to construct SDK components and register them with the OpenTelemetry API.\n */\n public start(): void {\n if (this._disabled) {\n return;\n }\n\n registerInstrumentations({\n instrumentations: this._instrumentations,\n });\n\n setupContextManager(this._configuration?.contextManager);\n setupPropagator(\n this._configuration?.textMapPropagator === null\n ? null // null means don't set, so we cannot fall back to env config.\n : (this._configuration?.textMapPropagator ?? getPropagatorFromEnv())\n );\n\n if (this._autoDetectResources) {\n const internalConfig: ResourceDetectionConfig = {\n detectors: this._resourceDetectors,\n };\n\n this._resource = this._resource.merge(detectResources(internalConfig));\n }\n\n this._resource =\n this._serviceName === undefined\n ? this._resource\n : this._resource.merge(\n resourceFromAttributes({\n [ATTR_SERVICE_NAME]: this._serviceName,\n })\n );\n\n if (\n this._meterProviderConfig?.readers &&\n // only register if there is a reader, otherwise we waste compute/memory.\n this._meterProviderConfig.readers.length > 0\n ) {\n const meterProvider = new MeterProvider({\n resource: this._resource,\n views: this._meterProviderConfig?.views ?? [],\n readers: this._meterProviderConfig.readers,\n });\n\n this._meterProvider = meterProvider;\n metrics.setGlobalMeterProvider(meterProvider);\n\n // TODO: This is a workaround to fix https://github.com/open-telemetry/opentelemetry-js/issues/3609\n // If the MeterProvider is not yet registered when instrumentations are registered, all metrics are dropped.\n // This code is obsolete once https://github.com/open-telemetry/opentelemetry-js/issues/3622 is implemented.\n for (const instrumentation of this._instrumentations) {\n instrumentation.setMeterProvider(metrics.getMeterProvider());\n }\n }\n\n const spanProcessors = this._tracerProviderConfig\n ? this._tracerProviderConfig.spanProcessors\n : getSpanProcessorsFromEnv();\n\n // Only register if there is a span processor\n if (spanProcessors.length > 0) {\n // While SDK metrics are unstable, we require an opt-in.\n // https://opentelemetry.io/docs/specs/semconv/otel/sdk-metrics/\n const sdkMetricsEnabled = getBooleanFromEnv(\n 'OTEL_NODE_EXPERIMENTAL_SDK_METRICS'\n );\n this._tracerProvider = new NodeTracerProvider({\n ...this._configuration,\n resource: this._resource,\n meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,\n spanProcessors,\n });\n trace.setGlobalTracerProvider(this._tracerProvider);\n }\n\n if (this._loggerProviderConfig) {\n const loggerProvider = new LoggerProvider({\n ...getLoggerProviderConfigFromEnv(),\n resource: this._resource,\n processors: this._loggerProviderConfig.logRecordProcessors,\n });\n\n this._loggerProvider = loggerProvider;\n\n logs.setGlobalLoggerProvider(loggerProvider);\n }\n }\n\n public shutdown(): Promise<void> {\n const promises: Promise<unknown>[] = [];\n if (this._tracerProvider) {\n promises.push(this._tracerProvider.shutdown());\n }\n if (this._loggerProvider) {\n promises.push(this._loggerProvider.shutdown());\n }\n if (this._meterProvider) {\n promises.push(this._meterProvider.shutdown());\n }\n\n return (\n Promise.all(promises)\n // return void instead of the array from Promise.all\n .then(() => {})\n );\n }\n\n private configureLoggerProviderFromEnv(): void {\n const enabledExporters = Array.from(\n new Set(getStringListFromEnv('OTEL_LOGS_EXPORTER') ?? [])\n );\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_LOGS_EXPORTER is empty. Using default otlp exporter.');\n enabledExporters.push('otlp');\n }\n\n if (enabledExporters.includes('none')) {\n diag.info(\n `OTEL_LOGS_EXPORTER contains \"none\". Logger provider will not be initialized.`\n );\n return;\n }\n\n const exporters: LogRecordExporter[] = [];\n\n enabledExporters.forEach(exporter => {\n if (exporter === 'otlp') {\n const protocol =\n (\n getStringFromEnv('OTEL_EXPORTER_OTLP_LOGS_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL')\n )?.trim() || 'http/protobuf'; // Using || to also fall back on empty string\n\n switch (protocol) {\n case 'grpc':\n exporters.push(new OTLPGrpcLogExporter());\n break;\n case 'http/json':\n exporters.push(new OTLPHttpLogExporter());\n break;\n case 'http/protobuf':\n exporters.push(new OTLPProtoLogExporter());\n break;\n default:\n diag.warn(\n `Unsupported OTLP logs protocol: \"${protocol}\". Using http/protobuf.`\n );\n exporters.push(new OTLPProtoLogExporter());\n }\n } else if (exporter === 'console') {\n exporters.push(new ConsoleLogRecordExporter());\n } else {\n diag.warn(\n `Unsupported OTEL_LOGS_EXPORTER value: \"${exporter}\". Supported values are: otlp, console, none.`\n );\n }\n });\n\n if (exporters.length > 0) {\n this._loggerProviderConfig = {\n logRecordProcessors: exporters.map(exporter => {\n if (exporter instanceof ConsoleLogRecordExporter) {\n return new SimpleLogRecordProcessor(exporter);\n } else {\n return getBatchLogRecordProcessorFromEnv(exporter);\n }\n }),\n };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { metrics, trace, diag, DiagConsoleLogger } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport type { Instrumentation } from '@opentelemetry/instrumentation';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type {\n Resource,\n ResourceDetectionConfig,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n defaultResource,\n detectResources,\n envDetector,\n hostDetector,\n processDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport type {\n LogRecordProcessor,\n LogRecordExporter,\n} from '@opentelemetry/sdk-logs';\nimport {\n LoggerProvider,\n ConsoleLogRecordExporter,\n SimpleLogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport { OTLPLogExporter as OTLPHttpLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { OTLPLogExporter as OTLPGrpcLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc';\nimport { OTLPLogExporter as OTLPProtoLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';\nimport { PrometheusExporter as PrometheusMetricExporter } from '@opentelemetry/exporter-prometheus';\nimport type { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';\nimport {\n MeterProvider,\n ConsoleMetricExporter,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport type { SpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport type { NodeTracerConfig } from '@opentelemetry/sdk-trace-node';\nimport { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';\nimport type { NodeSDKConfiguration } from './types';\nimport {\n getBooleanFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n diagLogLevelFromString,\n} from '@opentelemetry/core';\nimport {\n getResourceDetectorsFromEnv,\n getSpanProcessorsFromEnv,\n getPropagatorFromEnv,\n setupPropagator,\n setupContextManager,\n getPeriodicExportingMetricReaderFromEnv,\n getOtlpMetricExporterFromEnv,\n getBatchLogRecordProcessorFromEnv,\n getLoggerProviderConfigFromEnv,\n} from './utils';\n\ntype TracerProviderConfig = {\n tracerConfig: NodeTracerConfig;\n spanProcessors: SpanProcessor[];\n};\n\nexport type MeterProviderConfig = {\n /**\n * Reference to the MetricReader instances by the NodeSDK\n */\n readers?: IMetricReader[];\n /**\n * List of {@link ViewOptions}s that should be passed to the MeterProvider\n */\n views?: ViewOptions[];\n};\n\nexport type LoggerProviderConfig = {\n /**\n * Reference to the LoggerRecordProcessor instance by the NodeSDK\n */\n logRecordProcessors: LogRecordProcessor[];\n};\n\n/**\n *\n * @returns MetricReader[] if appropriate environment variables are configured\n */\nfunction getMetricReadersFromEnv(): IMetricReader[] {\n const metricReaders: IMetricReader[] = [];\n const enabledExporters = Array.from(\n new Set(getStringListFromEnv('OTEL_METRICS_EXPORTER') ?? [])\n );\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_METRICS_EXPORTER is empty. Using default otlp exporter.');\n enabledExporters.push('otlp');\n }\n\n if (enabledExporters.includes('none')) {\n diag.info(\n `OTEL_METRICS_EXPORTER contains \"none\". Metric provider will not be initialized.`\n );\n return metricReaders;\n }\n\n enabledExporters.forEach(exporter => {\n if (exporter === 'otlp') {\n metricReaders.push(\n getPeriodicExportingMetricReaderFromEnv(getOtlpMetricExporterFromEnv())\n );\n } else if (exporter === 'console') {\n metricReaders.push(\n new PeriodicExportingMetricReader({\n exporter: new ConsoleMetricExporter(),\n })\n );\n } else if (exporter === 'prometheus') {\n metricReaders.push(new PrometheusMetricExporter());\n } else {\n diag.warn(\n `Unsupported OTEL_METRICS_EXPORTER value: \"${exporter}\". Supported values are: otlp, console, prometheus, none.`\n );\n }\n });\n\n return metricReaders;\n}\n\n/**\n * A setup helper for the OpenTelemetry SDKs (logs, metrics, traces).\n * <p> After successful setup using {@link NodeSDK#start()}, use `@opentelemetry/api` to obtain the registered components.\n * <p> Use the shutdown handler {@link NodeSDK#shutdown()} to ensure your telemetry is exported before the process exits.\n *\n * @example <caption> Register SDK by using environment variables </caption>\n * const nodeSdk = new NodeSDK(); // providing no options uses OTEL_* environment variables for SDK setup.\n * nodeSdk.start(); // registers all configured SDK components\n * @example <caption> Override environment variable config with your own components </caption>\n * const nodeSdk = new NodeSDK({\n * // override the list of metric reader with your own options and ignore environment variable config\n * // explore the docs of other options to learn more!\n * metricReaders: [ new PeriodicExportingMetricReader({\n * exporter: new OTLPMetricsExporter()\n * })]\n * });\n * nodeSdk.start(); // registers all configured SDK components\n */\nexport class NodeSDK {\n private _tracerProviderConfig?: TracerProviderConfig;\n private _loggerProviderConfig?: LoggerProviderConfig;\n private _meterProviderConfig?: MeterProviderConfig;\n private _instrumentations: Instrumentation[];\n\n private _resource: Resource;\n private _resourceDetectors: Array<ResourceDetector>;\n\n private _autoDetectResources: boolean;\n\n private _tracerProvider?: NodeTracerProvider;\n private _loggerProvider?: LoggerProvider;\n private _meterProvider?: MeterProvider;\n private _serviceName?: string;\n private _configuration?: Partial<NodeSDKConfiguration>;\n\n private _disabled?: boolean;\n\n /**\n * Create a new NodeJS SDK instance\n */\n public constructor(configuration: Partial<NodeSDKConfiguration> = {}) {\n if (getBooleanFromEnv('OTEL_SDK_DISABLED')) {\n this._disabled = true;\n // Functions with possible side-effects are set\n // to no-op via the _disabled flag\n }\n\n const logLevel = getStringFromEnv('OTEL_LOG_LEVEL');\n if (logLevel != null) {\n diag.setLogger(new DiagConsoleLogger(), {\n logLevel: diagLogLevelFromString(logLevel),\n });\n }\n\n this._configuration = configuration;\n\n this._resource = configuration.resource ?? defaultResource();\n this._autoDetectResources = configuration.autoDetectResources ?? true;\n if (!this._autoDetectResources) {\n this._resourceDetectors = [];\n } else if (configuration.resourceDetectors != null) {\n this._resourceDetectors = configuration.resourceDetectors;\n } else if (getStringFromEnv('OTEL_NODE_RESOURCE_DETECTORS')) {\n this._resourceDetectors = getResourceDetectorsFromEnv();\n } else {\n this._resourceDetectors = [envDetector, processDetector, hostDetector];\n }\n\n this._serviceName = configuration.serviceName;\n\n // If a tracer provider can be created from manual configuration, create it\n if (\n configuration.traceExporter ||\n configuration.spanProcessor ||\n configuration.spanProcessors\n ) {\n const tracerProviderConfig: NodeTracerConfig = {};\n\n if (configuration.sampler) {\n tracerProviderConfig.sampler = configuration.sampler;\n }\n if (configuration.spanLimits) {\n tracerProviderConfig.spanLimits = configuration.spanLimits;\n }\n if (configuration.idGenerator) {\n tracerProviderConfig.idGenerator = configuration.idGenerator;\n }\n\n if (configuration.spanProcessor) {\n diag.warn(\n \"The 'spanProcessor' option is deprecated. Please use 'spanProcessors' instead.\"\n );\n }\n\n const spanProcessor =\n configuration.spanProcessor ??\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n new BatchSpanProcessor(configuration.traceExporter!);\n\n const spanProcessors = configuration.spanProcessors ?? [spanProcessor];\n\n this._tracerProviderConfig = {\n tracerConfig: tracerProviderConfig,\n spanProcessors,\n };\n }\n\n if (configuration.logRecordProcessors) {\n this._loggerProviderConfig = {\n logRecordProcessors: configuration.logRecordProcessors,\n };\n } else if (configuration.logRecordProcessor) {\n this._loggerProviderConfig = {\n logRecordProcessors: [configuration.logRecordProcessor],\n };\n diag.warn(\n \"The 'logRecordProcessor' option is deprecated. Please use 'logRecordProcessors' instead.\"\n );\n } else {\n this.configureLoggerProviderFromEnv();\n }\n\n if (configuration.metricReaders) {\n this._meterProviderConfig = {\n readers: configuration.metricReaders,\n views: configuration.views,\n };\n } else if (configuration.metricReader) {\n this._meterProviderConfig = {\n readers: [configuration.metricReader],\n views: configuration.views,\n };\n diag.warn(\n \"The 'metricReader' option is deprecated. Please use 'metricReaders' instead.\"\n );\n } else {\n this._meterProviderConfig = {\n readers: getMetricReadersFromEnv(),\n views: configuration.views,\n };\n }\n\n this._instrumentations = configuration.instrumentations?.flat() ?? [];\n }\n\n /**\n * Call this method to construct SDK components and register them with the OpenTelemetry API.\n */\n public start(): void {\n if (this._disabled) {\n return;\n }\n\n registerInstrumentations({\n instrumentations: this._instrumentations,\n });\n\n setupContextManager(this._configuration?.contextManager);\n setupPropagator(\n this._configuration?.textMapPropagator === null\n ? null // null means don't set, so we cannot fall back to env config.\n : (this._configuration?.textMapPropagator ?? getPropagatorFromEnv())\n );\n\n if (this._autoDetectResources) {\n const internalConfig: ResourceDetectionConfig = {\n detectors: this._resourceDetectors,\n };\n\n this._resource = this._resource.merge(detectResources(internalConfig));\n }\n\n this._resource =\n this._serviceName === undefined\n ? this._resource\n : this._resource.merge(\n resourceFromAttributes({\n [ATTR_SERVICE_NAME]: this._serviceName,\n })\n );\n\n // While SDK metrics are unstable, we require an opt-in.\n // https://opentelemetry.io/docs/specs/semconv/otel/sdk-metrics/\n const sdkMetricsEnabled = getBooleanFromEnv(\n 'OTEL_NODE_EXPERIMENTAL_SDK_METRICS'\n );\n\n if (\n this._meterProviderConfig?.readers &&\n // only register if there is a reader, otherwise we waste compute/memory.\n this._meterProviderConfig.readers.length > 0\n ) {\n const meterProvider = new MeterProvider({\n resource: this._resource,\n views: this._meterProviderConfig?.views ?? [],\n readers: this._meterProviderConfig.readers,\n });\n\n this._meterProvider = meterProvider;\n metrics.setGlobalMeterProvider(meterProvider);\n\n // TODO: This is a workaround to fix https://github.com/open-telemetry/opentelemetry-js/issues/3609\n // If the MeterProvider is not yet registered when instrumentations are registered, all metrics are dropped.\n // This code is obsolete once https://github.com/open-telemetry/opentelemetry-js/issues/3622 is implemented.\n for (const instrumentation of this._instrumentations) {\n instrumentation.setMeterProvider(metrics.getMeterProvider());\n }\n }\n\n const spanProcessors = this._tracerProviderConfig\n ? this._tracerProviderConfig.spanProcessors\n : getSpanProcessorsFromEnv();\n\n // Only register if there is a span processor\n if (spanProcessors.length > 0) {\n this._tracerProvider = new NodeTracerProvider({\n ...this._configuration,\n resource: this._resource,\n meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,\n spanProcessors,\n });\n trace.setGlobalTracerProvider(this._tracerProvider);\n }\n\n if (this._loggerProviderConfig) {\n const loggerProvider = new LoggerProvider({\n ...getLoggerProviderConfigFromEnv(),\n resource: this._resource,\n processors: this._loggerProviderConfig.logRecordProcessors,\n meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,\n });\n\n this._loggerProvider = loggerProvider;\n\n logs.setGlobalLoggerProvider(loggerProvider);\n }\n }\n\n public shutdown(): Promise<void> {\n const promises: Promise<unknown>[] = [];\n if (this._tracerProvider) {\n promises.push(this._tracerProvider.shutdown());\n }\n if (this._loggerProvider) {\n promises.push(this._loggerProvider.shutdown());\n }\n if (this._meterProvider) {\n promises.push(this._meterProvider.shutdown());\n }\n\n return (\n Promise.all(promises)\n // return void instead of the array from Promise.all\n .then(() => {})\n );\n }\n\n private configureLoggerProviderFromEnv(): void {\n const enabledExporters = Array.from(\n new Set(getStringListFromEnv('OTEL_LOGS_EXPORTER') ?? [])\n );\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_LOGS_EXPORTER is empty. Using default otlp exporter.');\n enabledExporters.push('otlp');\n }\n\n if (enabledExporters.includes('none')) {\n diag.info(\n `OTEL_LOGS_EXPORTER contains \"none\". Logger provider will not be initialized.`\n );\n return;\n }\n\n const exporters: LogRecordExporter[] = [];\n\n enabledExporters.forEach(exporter => {\n if (exporter === 'otlp') {\n const protocol =\n (\n getStringFromEnv('OTEL_EXPORTER_OTLP_LOGS_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL')\n )?.trim() || 'http/protobuf'; // Using || to also fall back on empty string\n\n switch (protocol) {\n case 'grpc':\n exporters.push(new OTLPGrpcLogExporter());\n break;\n case 'http/json':\n exporters.push(new OTLPHttpLogExporter());\n break;\n case 'http/protobuf':\n exporters.push(new OTLPProtoLogExporter());\n break;\n default:\n diag.warn(\n `Unsupported OTLP logs protocol: \"${protocol}\". Using http/protobuf.`\n );\n exporters.push(new OTLPProtoLogExporter());\n }\n } else if (exporter === 'console') {\n exporters.push(new ConsoleLogRecordExporter());\n } else {\n diag.warn(\n `Unsupported OTEL_LOGS_EXPORTER value: \"${exporter}\". Supported values are: otlp, console, none.`\n );\n }\n });\n\n if (exporters.length > 0) {\n this._loggerProviderConfig = {\n logRecordProcessors: exporters.map(exporter => {\n if (exporter instanceof ConsoleLogRecordExporter) {\n return new SimpleLogRecordProcessor(exporter);\n } else {\n return getBatchLogRecordProcessorFromEnv(exporter);\n }\n }),\n };\n }\n }\n}\n"]}
@@ -11,6 +11,7 @@ const api_logs_1 = require("@opentelemetry/api-logs");
11
11
  const resources_1 = require("@opentelemetry/resources");
12
12
  const context_async_hooks_1 = require("@opentelemetry/context-async-hooks");
13
13
  const semconv_1 = require("./semconv");
14
+ const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
14
15
  /**
15
16
  * @experimental Function to start the OpenTelemetry Node SDK
16
17
  * @param sdkOptions
@@ -36,6 +37,9 @@ function startNodeSDK(sdkOptions) {
36
37
  if (components.meterProvider) {
37
38
  api_1.metrics.setGlobalMeterProvider(components.meterProvider);
38
39
  }
40
+ if (components.tracerProvider) {
41
+ api_1.trace.setGlobalTracerProvider(components.tracerProvider);
42
+ }
39
43
  if (components.propagator) {
40
44
  api_1.propagation.setGlobalPropagator(components.propagator);
41
45
  }
@@ -47,6 +51,9 @@ function startNodeSDK(sdkOptions) {
47
51
  if (components.meterProvider) {
48
52
  promises.push(components.meterProvider.shutdown());
49
53
  }
54
+ if (components.tracerProvider) {
55
+ promises.push(components.tracerProvider.shutdown());
56
+ }
50
57
  await Promise.all(promises);
51
58
  };
52
59
  return { shutdown: shutdownFn };
@@ -90,6 +97,23 @@ function create(config, sdkOptions) {
90
97
  });
91
98
  components.meterProvider = meterProvider;
92
99
  }
100
+ const spanProcessors = (0, utils_1.getSpanProcessorsFromConfiguration)(config);
101
+ if (spanProcessors) {
102
+ const spanLimits = (0, utils_1.getSpanLimitsFromConfiguration)(config);
103
+ // TODO (6506): support sampler configuration from config
104
+ const tracerProvider = new sdk_trace_base_1.BasicTracerProvider({
105
+ resource,
106
+ spanProcessors,
107
+ spanLimits,
108
+ generalLimits: {
109
+ attributeValueLengthLimit: config.attribute_limits?.attribute_value_length_limit,
110
+ attributeCountLimit: config.attribute_limits?.attribute_count_limit,
111
+ },
112
+ // TODO (6616): support idGenerator configuration from config
113
+ // TODO (6624): support for `meterProvider: components.meterProvider`
114
+ });
115
+ components.tracerProvider = tracerProvider;
116
+ }
93
117
  return components;
94
118
  }
95
119
  function setupResource(config, sdkOptions) {
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n ConfigFactory,\n ConfigurationModel,\n} from '@opentelemetry/configuration';\nimport { createConfigFactory } from '@opentelemetry/configuration';\nimport {\n context,\n diag,\n DiagConsoleLogger,\n metrics,\n propagation,\n} from '@opentelemetry/api';\nimport {\n getInstanceID,\n getLogRecordProcessorsFromConfiguration,\n getMeterReadersFromConfiguration,\n getMeterViewsFromConfiguration,\n getPropagatorFromConfiguration,\n getResourceDetectorsFromConfiguration,\n getResourceFromConfiguration,\n} from './utils';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type { SDKComponents, SDKOptions } from './types';\nimport { LoggerProvider } from '@opentelemetry/sdk-logs';\nimport { MeterProvider } from '@opentelemetry/sdk-metrics';\nimport { logs } from '@opentelemetry/api-logs';\nimport type {\n Resource,\n ResourceDetectionConfig,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n defaultResource,\n detectResources,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { ATTR_SERVICE_INSTANCE_ID } from './semconv';\n\n/**\n * @experimental Function to start the OpenTelemetry Node SDK\n * @param sdkOptions\n */\nexport function startNodeSDK(sdkOptions: SDKOptions): {\n shutdown: () => Promise<void>;\n} {\n const configFactory: ConfigFactory = createConfigFactory();\n const config = configFactory.getConfigModel();\n\n if (config.disabled) {\n diag.info('OpenTelemetry SDK is disabled');\n return NOOP_SDK;\n }\n if (config.log_level != null) {\n diag.setLogger(new DiagConsoleLogger(), { logLevel: config.log_level });\n }\n\n registerInstrumentations({\n instrumentations: sdkOptions?.instrumentations?.flat() ?? [],\n });\n\n const components = create(config, sdkOptions);\n context.setGlobalContextManager(components.contextManager);\n if (components.loggerProvider) {\n logs.setGlobalLoggerProvider(components.loggerProvider);\n }\n if (components.meterProvider) {\n metrics.setGlobalMeterProvider(components.meterProvider);\n }\n if (components.propagator) {\n propagation.setGlobalPropagator(components.propagator);\n }\n\n const shutdownFn = async () => {\n const promises: Promise<unknown>[] = [];\n if (components.loggerProvider) {\n promises.push(components.loggerProvider.shutdown());\n }\n if (components.meterProvider) {\n promises.push(components.meterProvider.shutdown());\n }\n await Promise.all(promises);\n };\n return { shutdown: shutdownFn };\n}\nconst NOOP_SDK = {\n shutdown: async () => {},\n};\n\n/**\n * Interpret configuration model and return SDK components.\n */\nfunction create(\n config: ConfigurationModel,\n sdkOptions: SDKOptions\n): SDKComponents {\n const defaultContextManager = new AsyncLocalStorageContextManager();\n defaultContextManager.enable();\n const components: SDKComponents = {\n contextManager: defaultContextManager,\n };\n const resource = setupResource(config, sdkOptions);\n\n const propagator =\n sdkOptions?.textMapPropagator === null\n ? null\n : (sdkOptions?.textMapPropagator ??\n getPropagatorFromConfiguration(config));\n if (propagator) {\n components.propagator = propagator;\n }\n\n const logProcessors = getLogRecordProcessorsFromConfiguration(config);\n if (logProcessors) {\n const loggerProvider = new LoggerProvider({\n resource: resource,\n processors: logProcessors,\n });\n components.loggerProvider = loggerProvider;\n }\n\n const meterReaders = getMeterReadersFromConfiguration(config);\n if (meterReaders) {\n const meterViews = getMeterViewsFromConfiguration(config);\n const meterProvider = new MeterProvider({\n resource: resource,\n readers: meterReaders,\n views: meterViews ?? [],\n });\n components.meterProvider = meterProvider;\n }\n\n return components;\n}\n\nexport function setupResource(\n config: ConfigurationModel,\n sdkOptions: SDKOptions\n): Resource {\n let resource: Resource =\n getResourceFromConfiguration(config) ?? defaultResource();\n let resourceDetectors: ResourceDetector[] = [];\n\n if (sdkOptions.resourceDetectors != null) {\n resourceDetectors = sdkOptions.resourceDetectors;\n } else if (config.resource?.['detection/development']?.detectors) {\n resourceDetectors = getResourceDetectorsFromConfiguration(config);\n }\n\n if (resourceDetectors.length > 0) {\n const internalConfig: ResourceDetectionConfig = {\n detectors: resourceDetectors,\n };\n resource = resource.merge(detectResources(internalConfig));\n }\n\n const instanceId = getInstanceID(config);\n resource =\n instanceId === undefined\n ? resource\n : resource.merge(\n resourceFromAttributes({\n [ATTR_SERVICE_INSTANCE_ID]: instanceId,\n })\n );\n\n return resource;\n}\n"]}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":";;;AAQA,gEAAmE;AACnE,4CAO4B;AAC5B,mCAUiB;AACjB,oEAA0E;AAE1E,sDAAyD;AACzD,4DAA2D;AAC3D,sDAA+C;AAM/C,wDAIkC;AAClC,4EAAqF;AACrF,uCAAqD;AACrD,kEAAoE;AAEpE;;;GAGG;AACH,SAAgB,YAAY,CAAC,UAAsB;IAGjD,MAAM,aAAa,GAAkB,IAAA,mCAAmB,GAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;IAE9C,IAAI,MAAM,CAAC,QAAQ,EAAE;QACnB,UAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC;KACjB;IACD,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE;QAC5B,UAAI,CAAC,SAAS,CAAC,IAAI,uBAAiB,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;KACzE;IAED,IAAA,0CAAwB,EAAC;QACvB,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE;KAC7D,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9C,aAAO,CAAC,uBAAuB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,cAAc,EAAE;QAC7B,eAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;KACzD;IACD,IAAI,UAAU,CAAC,aAAa,EAAE;QAC5B,aAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;KAC1D;IACD,IAAI,UAAU,CAAC,cAAc,EAAE;QAC7B,WAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;KAC1D;IACD,IAAI,UAAU,CAAC,UAAU,EAAE;QACzB,iBAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KACxD;IAED,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,IAAI,UAAU,CAAC,cAAc,EAAE;YAC7B,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;SACrD;QACD,IAAI,UAAU,CAAC,aAAa,EAAE;YAC5B,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;SACpD;QACD,IAAI,UAAU,CAAC,cAAc,EAAE;YAC7B,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;SACrD;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AA/CD,oCA+CC;AACD,MAAM,QAAQ,GAAG;IACf,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,SAAS,MAAM,CACb,MAA0B,EAC1B,UAAsB;IAEtB,MAAM,qBAAqB,GAAG,IAAI,qDAA+B,EAAE,CAAC;IACpE,qBAAqB,CAAC,MAAM,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAkB;QAChC,cAAc,EAAE,qBAAqB;KACtC,CAAC;IACF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEnD,MAAM,UAAU,GACd,UAAU,EAAE,iBAAiB,KAAK,IAAI;QACpC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,UAAU,EAAE,iBAAiB;YAC9B,IAAA,sCAA8B,EAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,IAAI,UAAU,EAAE;QACd,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC;KACpC;IAED,MAAM,aAAa,GAAG,IAAA,+CAAuC,EAAC,MAAM,CAAC,CAAC;IACtE,IAAI,aAAa,EAAE;QACjB,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC;YACxC,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAC;QACH,UAAU,CAAC,cAAc,GAAG,cAAc,CAAC;KAC5C;IAED,MAAM,YAAY,GAAG,IAAA,wCAAgC,EAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,YAAY,EAAE;QAChB,MAAM,UAAU,GAAG,IAAA,sCAA8B,EAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,2BAAa,CAAC;YACtC,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,UAAU,IAAI,EAAE;SACxB,CAAC,CAAC;QACH,UAAU,CAAC,aAAa,GAAG,aAAa,CAAC;KAC1C;IAED,MAAM,cAAc,GAAG,IAAA,0CAAkC,EAAC,MAAM,CAAC,CAAC;IAClE,IAAI,cAAc,EAAE;QAClB,MAAM,UAAU,GAAG,IAAA,sCAA8B,EAAC,MAAM,CAAC,CAAC;QAC1D,yDAAyD;QACzD,MAAM,cAAc,GAAG,IAAI,oCAAmB,CAAC;YAC7C,QAAQ;YACR,cAAc;YACd,UAAU;YACV,aAAa,EAAE;gBACb,yBAAyB,EACvB,MAAM,CAAC,gBAAgB,EAAE,4BAA4B;gBACvD,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,qBAAqB;aACpE;YACD,6DAA6D;YAC7D,qEAAqE;SACtE,CAAC,CAAC;QACH,UAAU,CAAC,cAAc,GAAG,cAAc,CAAC;KAC5C;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,aAAa,CAC3B,MAA0B,EAC1B,UAAsB;IAEtB,IAAI,QAAQ,GACV,IAAA,oCAA4B,EAAC,MAAM,CAAC,IAAI,IAAA,2BAAe,GAAE,CAAC;IAC5D,IAAI,iBAAiB,GAAuB,EAAE,CAAC;IAE/C,IAAI,UAAU,CAAC,iBAAiB,IAAI,IAAI,EAAE;QACxC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;KAClD;SAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE;QAChE,iBAAiB,GAAG,IAAA,6CAAqC,EAAC,MAAM,CAAC,CAAC;KACnE;IAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;QAChC,MAAM,cAAc,GAA4B;YAC9C,SAAS,EAAE,iBAAiB;SAC7B,CAAC;QACF,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAA,2BAAe,EAAC,cAAc,CAAC,CAAC,CAAC;KAC5D;IAED,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC;IACzC,QAAQ;QACN,UAAU,KAAK,SAAS;YACtB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,CAAC,KAAK,CACZ,IAAA,kCAAsB,EAAC;gBACrB,CAAC,kCAAwB,CAAC,EAAE,UAAU;aACvC,CAAC,CACH,CAAC;IAER,OAAO,QAAQ,CAAC;AAClB,CAAC;AAhCD,sCAgCC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n ConfigFactory,\n ConfigurationModel,\n} from '@opentelemetry/configuration';\nimport { createConfigFactory } from '@opentelemetry/configuration';\nimport {\n context,\n diag,\n DiagConsoleLogger,\n metrics,\n trace,\n propagation,\n} from '@opentelemetry/api';\nimport {\n getInstanceID,\n getLogRecordProcessorsFromConfiguration,\n getMeterReadersFromConfiguration,\n getMeterViewsFromConfiguration,\n getPropagatorFromConfiguration,\n getResourceDetectorsFromConfiguration,\n getResourceFromConfiguration,\n getSpanLimitsFromConfiguration,\n getSpanProcessorsFromConfiguration,\n} from './utils';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type { SDKComponents, SDKOptions } from './types';\nimport { LoggerProvider } from '@opentelemetry/sdk-logs';\nimport { MeterProvider } from '@opentelemetry/sdk-metrics';\nimport { logs } from '@opentelemetry/api-logs';\nimport type {\n Resource,\n ResourceDetectionConfig,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n defaultResource,\n detectResources,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { ATTR_SERVICE_INSTANCE_ID } from './semconv';\nimport { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';\n\n/**\n * @experimental Function to start the OpenTelemetry Node SDK\n * @param sdkOptions\n */\nexport function startNodeSDK(sdkOptions: SDKOptions): {\n shutdown: () => Promise<void>;\n} {\n const configFactory: ConfigFactory = createConfigFactory();\n const config = configFactory.getConfigModel();\n\n if (config.disabled) {\n diag.info('OpenTelemetry SDK is disabled');\n return NOOP_SDK;\n }\n if (config.log_level != null) {\n diag.setLogger(new DiagConsoleLogger(), { logLevel: config.log_level });\n }\n\n registerInstrumentations({\n instrumentations: sdkOptions?.instrumentations?.flat() ?? [],\n });\n\n const components = create(config, sdkOptions);\n context.setGlobalContextManager(components.contextManager);\n if (components.loggerProvider) {\n logs.setGlobalLoggerProvider(components.loggerProvider);\n }\n if (components.meterProvider) {\n metrics.setGlobalMeterProvider(components.meterProvider);\n }\n if (components.tracerProvider) {\n trace.setGlobalTracerProvider(components.tracerProvider);\n }\n if (components.propagator) {\n propagation.setGlobalPropagator(components.propagator);\n }\n\n const shutdownFn = async () => {\n const promises: Promise<unknown>[] = [];\n if (components.loggerProvider) {\n promises.push(components.loggerProvider.shutdown());\n }\n if (components.meterProvider) {\n promises.push(components.meterProvider.shutdown());\n }\n if (components.tracerProvider) {\n promises.push(components.tracerProvider.shutdown());\n }\n await Promise.all(promises);\n };\n return { shutdown: shutdownFn };\n}\nconst NOOP_SDK = {\n shutdown: async () => {},\n};\n\n/**\n * Interpret configuration model and return SDK components.\n */\nfunction create(\n config: ConfigurationModel,\n sdkOptions: SDKOptions\n): SDKComponents {\n const defaultContextManager = new AsyncLocalStorageContextManager();\n defaultContextManager.enable();\n const components: SDKComponents = {\n contextManager: defaultContextManager,\n };\n const resource = setupResource(config, sdkOptions);\n\n const propagator =\n sdkOptions?.textMapPropagator === null\n ? null\n : (sdkOptions?.textMapPropagator ??\n getPropagatorFromConfiguration(config));\n if (propagator) {\n components.propagator = propagator;\n }\n\n const logProcessors = getLogRecordProcessorsFromConfiguration(config);\n if (logProcessors) {\n const loggerProvider = new LoggerProvider({\n resource: resource,\n processors: logProcessors,\n });\n components.loggerProvider = loggerProvider;\n }\n\n const meterReaders = getMeterReadersFromConfiguration(config);\n if (meterReaders) {\n const meterViews = getMeterViewsFromConfiguration(config);\n const meterProvider = new MeterProvider({\n resource: resource,\n readers: meterReaders,\n views: meterViews ?? [],\n });\n components.meterProvider = meterProvider;\n }\n\n const spanProcessors = getSpanProcessorsFromConfiguration(config);\n if (spanProcessors) {\n const spanLimits = getSpanLimitsFromConfiguration(config);\n // TODO (6506): support sampler configuration from config\n const tracerProvider = new BasicTracerProvider({\n resource,\n spanProcessors,\n spanLimits,\n generalLimits: {\n attributeValueLengthLimit:\n config.attribute_limits?.attribute_value_length_limit,\n attributeCountLimit: config.attribute_limits?.attribute_count_limit,\n },\n // TODO (6616): support idGenerator configuration from config\n // TODO (6624): support for `meterProvider: components.meterProvider`\n });\n components.tracerProvider = tracerProvider;\n }\n\n return components;\n}\n\nexport function setupResource(\n config: ConfigurationModel,\n sdkOptions: SDKOptions\n): Resource {\n let resource: Resource =\n getResourceFromConfiguration(config) ?? defaultResource();\n let resourceDetectors: ResourceDetector[] = [];\n\n if (sdkOptions.resourceDetectors != null) {\n resourceDetectors = sdkOptions.resourceDetectors;\n } else if (config.resource?.['detection/development']?.detectors) {\n resourceDetectors = getResourceDetectorsFromConfiguration(config);\n }\n\n if (resourceDetectors.length > 0) {\n const internalConfig: ResourceDetectionConfig = {\n detectors: resourceDetectors,\n };\n resource = resource.merge(detectResources(internalConfig));\n }\n\n const instanceId = getInstanceID(config);\n resource =\n instanceId === undefined\n ? resource\n : resource.merge(\n resourceFromAttributes({\n [ATTR_SERVICE_INSTANCE_ID]: instanceId,\n })\n );\n\n return resource;\n}\n"]}
@@ -6,6 +6,7 @@ import type { LoggerProvider, LogRecordProcessor } from '@opentelemetry/sdk-logs
6
6
  import type { MeterProvider } from '@opentelemetry/sdk-metrics';
7
7
  import type { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';
8
8
  import type { Sampler, SpanExporter, SpanLimits, SpanProcessor, IdGenerator } from '@opentelemetry/sdk-trace-base';
9
+ import type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
9
10
  export interface NodeSDKConfiguration {
10
11
  autoDetectResources: boolean;
11
12
  contextManager: ContextManager;
@@ -41,6 +42,7 @@ export interface SDKComponents {
41
42
  contextManager: ContextManager;
42
43
  loggerProvider?: LoggerProvider;
43
44
  meterProvider?: MeterProvider;
45
+ tracerProvider?: BasicTracerProvider;
44
46
  propagator?: TextMapPropagator;
45
47
  }
46
48
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ContextManager } from '@opentelemetry/api';\nimport type { TextMapPropagator } from '@opentelemetry/api';\nimport type { Instrumentation } from '@opentelemetry/instrumentation';\nimport type { Resource, ResourceDetector } from '@opentelemetry/resources';\nimport type {\n LoggerProvider,\n LogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport type { MeterProvider } from '@opentelemetry/sdk-metrics';\nimport type { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';\nimport type {\n Sampler,\n SpanExporter,\n SpanLimits,\n SpanProcessor,\n IdGenerator,\n} from '@opentelemetry/sdk-trace-base';\n\nexport interface NodeSDKConfiguration {\n autoDetectResources: boolean;\n contextManager: ContextManager;\n textMapPropagator: TextMapPropagator | null;\n /** @deprecated use logRecordProcessors instead*/\n logRecordProcessor: LogRecordProcessor;\n logRecordProcessors?: LogRecordProcessor[];\n /** @deprecated use metricReaders instead*/\n metricReader: IMetricReader;\n metricReaders?: IMetricReader[];\n views: ViewOptions[];\n instrumentations: (Instrumentation | Instrumentation[])[];\n resource: Resource;\n resourceDetectors: Array<ResourceDetector>;\n sampler: Sampler;\n serviceName?: string;\n /** @deprecated use spanProcessors instead*/\n spanProcessor?: SpanProcessor;\n spanProcessors?: SpanProcessor[];\n traceExporter: SpanExporter;\n spanLimits: SpanLimits;\n idGenerator: IdGenerator;\n}\n/**\n * @experimental Options for new experimental SDK setup\n */\nexport interface SDKOptions {\n instrumentations?: (Instrumentation | Instrumentation[])[];\n resourceDetectors?: ResourceDetector[];\n textMapPropagator?: TextMapPropagator | null;\n}\n\nexport interface SDKComponents {\n contextManager: ContextManager;\n loggerProvider?: LoggerProvider;\n meterProvider?: MeterProvider;\n propagator?: TextMapPropagator;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ContextManager } from '@opentelemetry/api';\nimport type { TextMapPropagator } from '@opentelemetry/api';\nimport type { Instrumentation } from '@opentelemetry/instrumentation';\nimport type { Resource, ResourceDetector } from '@opentelemetry/resources';\nimport type {\n LoggerProvider,\n LogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport type { MeterProvider } from '@opentelemetry/sdk-metrics';\nimport type { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';\nimport type {\n Sampler,\n SpanExporter,\n SpanLimits,\n SpanProcessor,\n IdGenerator,\n} from '@opentelemetry/sdk-trace-base';\nimport type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';\n\nexport interface NodeSDKConfiguration {\n autoDetectResources: boolean;\n contextManager: ContextManager;\n textMapPropagator: TextMapPropagator | null;\n /** @deprecated use logRecordProcessors instead*/\n logRecordProcessor: LogRecordProcessor;\n logRecordProcessors?: LogRecordProcessor[];\n /** @deprecated use metricReaders instead*/\n metricReader: IMetricReader;\n metricReaders?: IMetricReader[];\n views: ViewOptions[];\n instrumentations: (Instrumentation | Instrumentation[])[];\n resource: Resource;\n resourceDetectors: Array<ResourceDetector>;\n sampler: Sampler;\n serviceName?: string;\n /** @deprecated use spanProcessors instead*/\n spanProcessor?: SpanProcessor;\n spanProcessors?: SpanProcessor[];\n traceExporter: SpanExporter;\n spanLimits: SpanLimits;\n idGenerator: IdGenerator;\n}\n/**\n * @experimental Options for new experimental SDK setup\n */\nexport interface SDKOptions {\n instrumentations?: (Instrumentation | Instrumentation[])[];\n resourceDetectors?: ResourceDetector[];\n textMapPropagator?: TextMapPropagator | null;\n}\n\nexport interface SDKComponents {\n contextManager: ContextManager;\n loggerProvider?: LoggerProvider;\n meterProvider?: MeterProvider;\n tracerProvider?: BasicTracerProvider;\n propagator?: TextMapPropagator;\n}\n"]}
@@ -1,7 +1,9 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
1
3
  import type { ContextManager, TextMapPropagator } from '@opentelemetry/api';
2
4
  import type { Resource, ResourceDetector } from '@opentelemetry/resources';
3
- import type { SpanProcessor } from '@opentelemetry/sdk-trace-base';
4
- import type { ConfigurationModel, LogRecordExporterConfigModel, InstrumentTypeConfigModel, AggregationConfigModel, PeriodicMetricReaderConfigModel } from '@opentelemetry/configuration';
5
+ import type { Sampler, SpanExporter, SpanLimits, SpanProcessor } from '@opentelemetry/sdk-trace-base';
6
+ import type { ConfigurationModel, LogRecordExporterConfigModel, InstrumentTypeConfigModel, AggregationConfigModel, PeriodicMetricReaderConfigModel, SpanExporterConfigModel, SamplerConfigModel, NameStringValuePairConfigModel, HttpTlsConfigModel } from '@opentelemetry/configuration';
5
7
  import type { AggregationOption, IMetricReader, PushMetricExporter, ViewOptions } from '@opentelemetry/sdk-metrics';
6
8
  import { InstrumentType } from '@opentelemetry/sdk-metrics';
7
9
  import type { BufferConfig, LogRecordExporter, LoggerProviderConfig, LogRecordProcessor } from '@opentelemetry/sdk-logs';
@@ -37,9 +39,23 @@ export declare function getBatchLogRecordProcessorConfigFromEnv(): BufferConfig;
37
39
  export declare function getBatchLogRecordProcessorFromEnv(exporter: LogRecordExporter): BatchLogRecordProcessor;
38
40
  export declare function getLogRecordExporter(exporter: LogRecordExporterConfigModel): LogRecordExporter | undefined;
39
41
  export declare function getLogRecordProcessorsFromConfiguration(config: ConfigurationModel): LogRecordProcessor[] | undefined;
42
+ export declare function getHeadersFromConfiguration(headers: NameStringValuePairConfigModel[] | undefined): Record<string, string> | undefined;
43
+ export declare function getHttpAgentOptionsFromTls(tls: HttpTlsConfigModel | undefined): {
44
+ ca?: Buffer;
45
+ cert?: Buffer;
46
+ key?: Buffer;
47
+ } | undefined;
48
+ export declare function getSpanExporter(exporter: SpanExporterConfigModel): SpanExporter | undefined;
49
+ export declare function getSpanProcessorsFromConfiguration(config: ConfigurationModel): SpanProcessor[] | undefined;
50
+ export declare function getSpanLimitsFromConfiguration(config: ConfigurationModel): SpanLimits | undefined;
40
51
  export declare function getMeterReadersFromConfiguration(config: ConfigurationModel): IMetricReader[] | undefined;
41
52
  export declare function getInstrumentType(instrument: InstrumentTypeConfigModel): InstrumentType | undefined;
42
53
  export declare function getAggregationType(aggregation: AggregationConfigModel): AggregationOption | undefined;
43
54
  export declare function getMeterViewsFromConfiguration(config: ConfigurationModel): ViewOptions[] | undefined;
44
55
  export declare function getInstanceID(config: ConfigurationModel): string | undefined;
56
+ /**
57
+ * Builds a {@link Sampler} from a {@link SamplerConfigModel} data model.
58
+ * This allows sampler construction from declarative configuration.
59
+ */
60
+ export declare function buildSamplerFromConfig(config: SamplerConfigModel): Sampler;
45
61
  //# sourceMappingURL=utils.d.ts.map
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.getInstanceID = exports.getMeterViewsFromConfiguration = exports.getAggregationType = exports.getInstrumentType = exports.getMeterReadersFromConfiguration = exports.getLogRecordProcessorsFromConfiguration = exports.getLogRecordExporter = exports.getBatchLogRecordProcessorFromEnv = exports.getBatchLogRecordProcessorConfigFromEnv = exports.getLoggerProviderConfigFromEnv = exports.getPeriodicMetricReaderFromConfiguration = exports.getOtlpMetricExporterFromEnv = exports.getPeriodicExportingMetricReaderFromEnv = exports.getNonNegativeNumberFromEnv = exports.getKeyListFromObjectArray = exports.setupPropagator = exports.setupContextManager = exports.getPropagatorFromConfiguration = exports.getPropagatorFromEnv = exports.getSpanProcessorsFromEnv = exports.getOtlpProtocolFromEnv = exports.getResourceDetectorsFromConfiguration = exports.getResourceDetectorsFromEnv = exports.getResourceFromConfiguration = void 0;
7
+ exports.buildSamplerFromConfig = exports.getInstanceID = exports.getMeterViewsFromConfiguration = exports.getAggregationType = exports.getInstrumentType = exports.getMeterReadersFromConfiguration = exports.getSpanLimitsFromConfiguration = exports.getSpanProcessorsFromConfiguration = exports.getSpanExporter = exports.getHttpAgentOptionsFromTls = exports.getHeadersFromConfiguration = exports.getLogRecordProcessorsFromConfiguration = exports.getLogRecordExporter = exports.getBatchLogRecordProcessorFromEnv = exports.getBatchLogRecordProcessorConfigFromEnv = exports.getLoggerProviderConfigFromEnv = exports.getPeriodicMetricReaderFromConfiguration = exports.getOtlpMetricExporterFromEnv = exports.getPeriodicExportingMetricReaderFromEnv = exports.getNonNegativeNumberFromEnv = exports.getKeyListFromObjectArray = exports.setupPropagator = exports.setupContextManager = exports.getPropagatorFromConfiguration = exports.getPropagatorFromEnv = exports.getSpanProcessorsFromEnv = exports.getOtlpProtocolFromEnv = exports.getResourceDetectorsFromConfiguration = exports.getResourceDetectorsFromEnv = exports.getResourceFromConfiguration = void 0;
8
8
  const api_1 = require("@opentelemetry/api");
9
9
  const core_1 = require("@opentelemetry/core");
10
10
  const exporter_trace_otlp_proto_1 = require("@opentelemetry/exporter-trace-otlp-proto");
@@ -25,6 +25,7 @@ const exporter_metrics_otlp_grpc_1 = require("@opentelemetry/exporter-metrics-ot
25
25
  const exporter_metrics_otlp_http_1 = require("@opentelemetry/exporter-metrics-otlp-http");
26
26
  const exporter_metrics_otlp_proto_1 = require("@opentelemetry/exporter-metrics-otlp-proto");
27
27
  const sdk_logs_1 = require("@opentelemetry/sdk-logs");
28
+ const fs = require("fs");
28
29
  const RESOURCE_DETECTOR_ENVIRONMENT = 'env';
29
30
  const RESOURCE_DETECTOR_HOST = 'host';
30
31
  const RESOURCE_DETECTOR_OS = 'os';
@@ -289,9 +290,13 @@ function getKeyListFromObjectArray(obj) {
289
290
  if (!obj || obj.length === 0) {
290
291
  return undefined;
291
292
  }
292
- return obj
293
- .map(item => Object.keys(item))
294
- .reduce((prev, curr) => prev.concat(curr), []);
293
+ const keys = [];
294
+ for (const item of obj) {
295
+ for (const key of Object.keys(item)) {
296
+ keys.push(key);
297
+ }
298
+ }
299
+ return keys;
295
300
  }
296
301
  exports.getKeyListFromObjectArray = getKeyListFromObjectArray;
297
302
  function getNonNegativeNumberFromEnv(envVarName) {
@@ -495,6 +500,140 @@ function getLogRecordProcessorsFromConfiguration(config) {
495
500
  return undefined;
496
501
  }
497
502
  exports.getLogRecordProcessorsFromConfiguration = getLogRecordProcessorsFromConfiguration;
503
+ function getHeadersFromConfiguration(headers) {
504
+ if (!headers) {
505
+ return undefined;
506
+ }
507
+ const result = {};
508
+ headers.forEach(header => {
509
+ result[header.name] = header.value;
510
+ });
511
+ return result;
512
+ }
513
+ exports.getHeadersFromConfiguration = getHeadersFromConfiguration;
514
+ function getHttpAgentOptionsFromTls(tls) {
515
+ if (tls && (tls.ca_file || tls.cert_file || tls.key_file)) {
516
+ const httpsAgentOptions = {};
517
+ if (tls.ca_file) {
518
+ try {
519
+ httpsAgentOptions.ca = fs.readFileSync(tls.ca_file);
520
+ }
521
+ catch (e) {
522
+ api_1.diag.warn(`Failed to read TLS CA file at ${tls.ca_file}: ${e}`);
523
+ }
524
+ }
525
+ if (tls.cert_file) {
526
+ try {
527
+ httpsAgentOptions.cert = fs.readFileSync(tls.cert_file);
528
+ }
529
+ catch (e) {
530
+ api_1.diag.warn(`Failed to read TLS cert file at ${tls.cert_file}: ${e}`);
531
+ }
532
+ }
533
+ if (tls.key_file) {
534
+ try {
535
+ httpsAgentOptions.key = fs.readFileSync(tls.key_file);
536
+ }
537
+ catch (e) {
538
+ api_1.diag.warn(`Failed to read TLS key file at ${tls.key_file}: ${e}`);
539
+ }
540
+ }
541
+ return httpsAgentOptions;
542
+ }
543
+ return undefined;
544
+ }
545
+ exports.getHttpAgentOptionsFromTls = getHttpAgentOptionsFromTls;
546
+ function getSpanExporter(exporter) {
547
+ if (exporter.otlp_http) {
548
+ const encoding = exporter.otlp_http.encoding;
549
+ if (encoding === 'json') {
550
+ return new exporter_trace_otlp_http_1.OTLPTraceExporter({
551
+ compression: exporter.otlp_http.compression === 'gzip'
552
+ ? otlp_exporter_base_1.CompressionAlgorithm.GZIP
553
+ : otlp_exporter_base_1.CompressionAlgorithm.NONE,
554
+ url: exporter.otlp_http.endpoint,
555
+ headers: getHeadersFromConfiguration(exporter.otlp_http.headers),
556
+ timeoutMillis: exporter.otlp_http.timeout,
557
+ httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http.tls),
558
+ });
559
+ }
560
+ else {
561
+ return new exporter_trace_otlp_proto_1.OTLPTraceExporter({
562
+ compression: exporter.otlp_http.compression === 'gzip'
563
+ ? otlp_exporter_base_1.CompressionAlgorithm.GZIP
564
+ : otlp_exporter_base_1.CompressionAlgorithm.NONE,
565
+ url: exporter.otlp_http.endpoint,
566
+ headers: getHeadersFromConfiguration(exporter.otlp_http.headers),
567
+ timeoutMillis: exporter.otlp_http.timeout,
568
+ httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http.tls),
569
+ });
570
+ }
571
+ }
572
+ else if (exporter.otlp_grpc) {
573
+ return new exporter_trace_otlp_grpc_1.OTLPTraceExporter({
574
+ compression: exporter.otlp_grpc.compression === 'gzip'
575
+ ? otlp_exporter_base_1.CompressionAlgorithm.GZIP
576
+ : otlp_exporter_base_1.CompressionAlgorithm.NONE,
577
+ url: exporter.otlp_grpc.endpoint,
578
+ timeoutMillis: exporter.otlp_grpc.timeout,
579
+ // TODO (6614): add support for credentials
580
+ // TODO (6615): add metadata (headers) support
581
+ });
582
+ }
583
+ else if (exporter.console) {
584
+ return new sdk_trace_base_1.ConsoleSpanExporter();
585
+ }
586
+ api_1.diag.warn(`Unsupported Exporter value. No Span Exporter registered`);
587
+ return undefined;
588
+ }
589
+ exports.getSpanExporter = getSpanExporter;
590
+ function getSpanProcessorsFromConfiguration(config) {
591
+ const spanProcessors = [];
592
+ config.tracer_provider?.processors?.forEach(processor => {
593
+ if (processor.batch) {
594
+ const exporter = getSpanExporter(processor.batch.exporter);
595
+ if (exporter) {
596
+ spanProcessors.push(new sdk_trace_base_1.BatchSpanProcessor(exporter, {
597
+ maxQueueSize: processor.batch.max_queue_size,
598
+ maxExportBatchSize: processor.batch.max_export_batch_size,
599
+ scheduledDelayMillis: processor.batch.schedule_delay,
600
+ exportTimeoutMillis: processor.batch.export_timeout,
601
+ }));
602
+ }
603
+ }
604
+ if (processor.simple) {
605
+ const exporter = getSpanExporter(processor.simple.exporter);
606
+ if (exporter) {
607
+ spanProcessors.push(new sdk_trace_base_1.SimpleSpanProcessor(exporter));
608
+ }
609
+ }
610
+ });
611
+ if (spanProcessors.length > 0) {
612
+ return spanProcessors;
613
+ }
614
+ return undefined;
615
+ }
616
+ exports.getSpanProcessorsFromConfiguration = getSpanProcessorsFromConfiguration;
617
+ function getSpanLimitsFromConfiguration(config) {
618
+ if (config.tracer_provider?.limits) {
619
+ const limitsConfig = config.tracer_provider.limits;
620
+ const spanLimits = {};
621
+ spanLimits.attributeCountLimit = limitsConfig.attribute_count_limit ?? 128;
622
+ spanLimits.eventCountLimit = limitsConfig.event_count_limit ?? 128;
623
+ spanLimits.linkCountLimit = limitsConfig.link_count_limit ?? 128;
624
+ spanLimits.attributePerLinkCountLimit =
625
+ limitsConfig.link_attribute_count_limit ?? 128;
626
+ spanLimits.attributePerEventCountLimit =
627
+ limitsConfig.event_attribute_count_limit ?? 128;
628
+ if (limitsConfig.attribute_value_length_limit != null) {
629
+ spanLimits.attributeValueLengthLimit =
630
+ limitsConfig.attribute_value_length_limit;
631
+ }
632
+ return spanLimits;
633
+ }
634
+ return undefined;
635
+ }
636
+ exports.getSpanLimitsFromConfiguration = getSpanLimitsFromConfiguration;
498
637
  function getMeterReadersFromConfiguration(config) {
499
638
  const metricReaders = [];
500
639
  config.meter_provider?.readers?.forEach(reader => {
@@ -607,7 +746,9 @@ function getMeterViewsFromConfiguration(config) {
607
746
  }
608
747
  }
609
748
  if (view.stream) {
610
- viewOption.name = view.stream.name ?? view.selector?.instrument_name;
749
+ if (view.stream.name) {
750
+ viewOption.name = view.stream.name;
751
+ }
611
752
  viewOption.aggregationCardinalityLimit =
612
753
  view.stream.aggregation_cardinality_limit ?? 2000;
613
754
  if (view.stream.description) {
@@ -619,7 +760,20 @@ function getMeterViewsFromConfiguration(config) {
619
760
  viewOption.aggregation = aggregationType;
620
761
  }
621
762
  }
622
- // TODO(6427): add support for view.stream.attribute_keys and correspondent attributes processor configuration
763
+ if (view.stream.attribute_keys) {
764
+ const processors = [];
765
+ if (view.stream.attribute_keys.included &&
766
+ view.stream.attribute_keys.included.length > 0) {
767
+ processors.push((0, sdk_metrics_1.createAllowListAttributesProcessor)(view.stream.attribute_keys.included));
768
+ }
769
+ if (view.stream.attribute_keys.excluded &&
770
+ view.stream.attribute_keys.excluded.length > 0) {
771
+ processors.push((0, sdk_metrics_1.createDenyListAttributesProcessor)(view.stream.attribute_keys.excluded));
772
+ }
773
+ if (processors.length > 0) {
774
+ viewOption.attributesProcessors = processors;
775
+ }
776
+ }
623
777
  }
624
778
  if (Object.keys(viewOption).length > 0) {
625
779
  metricViews.push(viewOption);
@@ -643,4 +797,41 @@ function getInstanceID(config) {
643
797
  return undefined;
644
798
  }
645
799
  exports.getInstanceID = getInstanceID;
800
+ const DEFAULT_RATIO = 1;
801
+ /**
802
+ * Builds a {@link Sampler} from a {@link SamplerConfigModel} data model.
803
+ * This allows sampler construction from declarative configuration.
804
+ */
805
+ function buildSamplerFromConfig(config) {
806
+ if (config.always_on !== undefined) {
807
+ return new sdk_trace_base_1.AlwaysOnSampler();
808
+ }
809
+ if (config.always_off !== undefined) {
810
+ return new sdk_trace_base_1.AlwaysOffSampler();
811
+ }
812
+ if (config.trace_id_ratio_based !== undefined) {
813
+ return new sdk_trace_base_1.TraceIdRatioBasedSampler(config.trace_id_ratio_based.ratio ?? DEFAULT_RATIO);
814
+ }
815
+ if (config.parent_based !== undefined) {
816
+ const pb = config.parent_based;
817
+ return new sdk_trace_base_1.ParentBasedSampler({
818
+ root: pb.root ? buildSamplerFromConfig(pb.root) : new sdk_trace_base_1.AlwaysOnSampler(),
819
+ remoteParentSampled: pb.remote_parent_sampled
820
+ ? buildSamplerFromConfig(pb.remote_parent_sampled)
821
+ : undefined,
822
+ remoteParentNotSampled: pb.remote_parent_not_sampled
823
+ ? buildSamplerFromConfig(pb.remote_parent_not_sampled)
824
+ : undefined,
825
+ localParentSampled: pb.local_parent_sampled
826
+ ? buildSamplerFromConfig(pb.local_parent_sampled)
827
+ : undefined,
828
+ localParentNotSampled: pb.local_parent_not_sampled
829
+ ? buildSamplerFromConfig(pb.local_parent_not_sampled)
830
+ : undefined,
831
+ });
832
+ }
833
+ api_1.diag.error('Unknown sampler config, defaulting to ParentBased(AlwaysOn).');
834
+ return new sdk_trace_base_1.ParentBasedSampler({ root: new sdk_trace_base_1.AlwaysOnSampler() });
835
+ }
836
+ exports.buildSamplerFromConfig = buildSamplerFromConfig;
646
837
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ContextManager, TextMapPropagator } from '@opentelemetry/api';\nimport { context, diag, propagation } from '@opentelemetry/api';\nimport {\n CompositePropagator,\n getNumberFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n W3CBaggagePropagator,\n W3CTraceContextPropagator,\n} from '@opentelemetry/core';\nimport { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';\nimport { ZipkinExporter } from '@opentelemetry/exporter-zipkin';\nimport type {\n DetectedResourceAttributes,\n Resource,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n envDetector,\n hostDetector,\n osDetector,\n processDetector,\n resourceFromAttributes,\n serviceInstanceIdDetector,\n} from '@opentelemetry/resources';\nimport type {\n SpanExporter,\n SpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport {\n BatchSpanProcessor,\n ConsoleSpanExporter,\n SimpleSpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3';\nimport { JaegerPropagator } from '@opentelemetry/propagator-jaeger';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { OTLPLogExporter as OTLPHttpLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { OTLPLogExporter as OTLPGrpcLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc';\nimport { OTLPLogExporter as OTLPProtoLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';\nimport { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';\nimport type {\n ConfigurationModel,\n LogRecordExporterConfigModel,\n InstrumentTypeConfigModel,\n AggregationConfigModel,\n PeriodicMetricReaderConfigModel,\n} from '@opentelemetry/configuration';\nimport type {\n AggregationOption,\n IMetricReader,\n PushMetricExporter,\n ViewOptions,\n} from '@opentelemetry/sdk-metrics';\nimport {\n AggregationType,\n ConsoleMetricExporter,\n InstrumentType,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport { OTLPMetricExporter as OTLPGrpcMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';\nimport { OTLPMetricExporter as OTLPHttpMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { OTLPMetricExporter as OTLPProtoMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto';\nimport type {\n BufferConfig,\n LogRecordExporter,\n LoggerProviderConfig,\n LogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport {\n BatchLogRecordProcessor,\n ConsoleLogRecordExporter,\n SimpleLogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\n\nconst RESOURCE_DETECTOR_ENVIRONMENT = 'env';\nconst RESOURCE_DETECTOR_HOST = 'host';\nconst RESOURCE_DETECTOR_OS = 'os';\nconst RESOURCE_DETECTOR_PROCESS = 'process';\nconst RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = 'serviceinstance';\n\nexport function getResourceFromConfiguration(\n config: ConfigurationModel\n): Resource | undefined {\n if (config.resource && config.resource.attributes) {\n const attr: DetectedResourceAttributes = {};\n for (let i = 0; i < config.resource.attributes.length; i++) {\n const a = config.resource.attributes[i];\n attr[a.name] = a.value;\n }\n return resourceFromAttributes(attr, {\n schemaUrl: config.resource.schema_url,\n });\n }\n return undefined;\n}\n\nexport function getResourceDetectorsFromEnv(): Array<ResourceDetector> {\n // When updating this list, make sure to also update the section `resourceDetectors` on README.\n const resourceDetectors = new Map<string, ResourceDetector>([\n [RESOURCE_DETECTOR_HOST, hostDetector],\n [RESOURCE_DETECTOR_OS, osDetector],\n [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, serviceInstanceIdDetector],\n [RESOURCE_DETECTOR_PROCESS, processDetector],\n [RESOURCE_DETECTOR_ENVIRONMENT, envDetector],\n ]);\n\n const resourceDetectorsFromEnv = getStringListFromEnv(\n 'OTEL_NODE_RESOURCE_DETECTORS'\n ) ?? ['all'];\n\n if (resourceDetectorsFromEnv.includes('all')) {\n return [...resourceDetectors.values()].flat();\n }\n\n if (resourceDetectorsFromEnv.includes('none')) {\n return [];\n }\n\n return resourceDetectorsFromEnv.flatMap(detector => {\n const resourceDetector = resourceDetectors.get(detector);\n if (!resourceDetector) {\n diag.warn(\n `Invalid resource detector \"${detector}\" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`\n );\n }\n return resourceDetector || [];\n });\n}\n\nexport function getResourceDetectorsFromConfiguration(\n config: ConfigurationModel\n): Array<ResourceDetector> {\n const detectors = config.resource?.['detection/development']?.detectors ?? [];\n\n return detectors.flatMap(detector => {\n const result: ResourceDetector[] = [];\n if (detector.host != null) result.push(hostDetector);\n if (detector.os != null) result.push(osDetector);\n if (detector.process != null) result.push(processDetector);\n if (detector.service != null) result.push(serviceInstanceIdDetector);\n if (detector.env != null) result.push(envDetector);\n return result;\n });\n}\n\nexport function getOtlpProtocolFromEnv(): string {\n return (\n getStringFromEnv('OTEL_EXPORTER_OTLP_TRACES_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL') ??\n 'http/protobuf'\n );\n}\n\nfunction getOtlpExporterFromEnv(): SpanExporter {\n const protocol = getOtlpProtocolFromEnv();\n\n switch (protocol) {\n case 'grpc':\n return new OTLPGrpcTraceExporter();\n case 'http/json':\n return new OTLPHttpTraceExporter();\n case 'http/protobuf':\n return new OTLPProtoTraceExporter();\n default:\n diag.warn(\n `Unsupported OTLP traces protocol: ${protocol}. Using http/protobuf.`\n );\n return new OTLPProtoTraceExporter();\n }\n}\n\nexport function getSpanProcessorsFromEnv(): SpanProcessor[] {\n const exportersMap = new Map<string, () => SpanExporter>([\n ['otlp', () => getOtlpExporterFromEnv()],\n ['zipkin', () => new ZipkinExporter()],\n ['console', () => new ConsoleSpanExporter()],\n ]);\n const exporters: SpanExporter[] = [];\n const processors: SpanProcessor[] = [];\n let traceExportersList = Array.from(\n new Set(getStringListFromEnv('OTEL_TRACES_EXPORTER'))\n ).filter(s => s !== 'null');\n\n if (traceExportersList[0] === 'none') {\n diag.warn(\n 'OTEL_TRACES_EXPORTER contains \"none\". SDK will not be initialized.'\n );\n return [];\n }\n\n if (traceExportersList.length === 0) {\n diag.debug('OTEL_TRACES_EXPORTER is empty. Using default otlp exporter.');\n traceExportersList = ['otlp'];\n } else if (\n traceExportersList.length > 1 &&\n traceExportersList.includes('none')\n ) {\n diag.warn(\n 'OTEL_TRACES_EXPORTER contains \"none\" along with other exporters. Using default otlp exporter.'\n );\n traceExportersList = ['otlp'];\n }\n\n for (const name of traceExportersList) {\n const exporter = exportersMap.get(name)?.();\n if (exporter) {\n exporters.push(exporter);\n } else {\n diag.warn(`Unrecognized OTEL_TRACES_EXPORTER value: ${name}.`);\n }\n }\n\n for (const exp of exporters) {\n if (exp instanceof ConsoleSpanExporter) {\n processors.push(new SimpleSpanProcessor(exp));\n } else {\n processors.push(new BatchSpanProcessor(exp));\n }\n }\n\n if (exporters.length === 0) {\n diag.warn(\n 'Unable to set up trace exporter(s) due to invalid exporter and/or protocol values.'\n );\n }\n\n return processors;\n}\n\n/**\n * Get a propagator as defined by environment variables\n */\nexport function getPropagatorFromEnv(): TextMapPropagator | null | undefined {\n // Empty and undefined MUST be treated equal.\n const propagatorsEnvVarValue = getStringListFromEnv('OTEL_PROPAGATORS');\n if (propagatorsEnvVarValue == null) {\n // return undefined to fall back to default\n return undefined;\n }\n\n if (propagatorsEnvVarValue.includes('none')) {\n return null;\n }\n\n // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n ['tracecontext', () => new W3CTraceContextPropagator()],\n ['baggage', () => new W3CBaggagePropagator()],\n ['b3', () => new B3Propagator()],\n [\n 'b3multi',\n () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n ],\n ['jaeger', () => new JaegerPropagator()],\n ]);\n\n // Values MUST be deduplicated in order to register a Propagator only once.\n const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue));\n const validPropagators: TextMapPropagator[] = [];\n\n uniquePropagatorNames.forEach(name => {\n const propagator = propagatorsFactory.get(name)?.();\n if (!propagator) {\n diag.warn(\n `Propagator \"${name}\" requested through environment variable is unavailable.`\n );\n return;\n }\n\n validPropagators.push(propagator);\n });\n\n if (validPropagators.length === 0) {\n // null to signal that the default should **not** be used in its place.\n return null;\n } else if (uniquePropagatorNames.length === 1) {\n return validPropagators[0];\n } else {\n return new CompositePropagator({\n propagators: validPropagators,\n });\n }\n}\n\n/**\n * Get a propagator as defined by configuration model from configuration\n */\nexport function getPropagatorFromConfiguration(\n config: ConfigurationModel\n): TextMapPropagator | null | undefined {\n const propagatorsValue = getKeyListFromObjectArray(\n config.propagator?.composite\n );\n if (propagatorsValue == null) {\n // return undefined to fall back to default\n return undefined;\n }\n\n if (propagatorsValue.includes('none')) {\n return null;\n }\n\n // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n ['tracecontext', () => new W3CTraceContextPropagator()],\n ['baggage', () => new W3CBaggagePropagator()],\n ['b3', () => new B3Propagator()],\n [\n 'b3multi',\n () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n ],\n ['jaeger', () => new JaegerPropagator()],\n ]);\n\n // Values MUST be deduplicated in order to register a Propagator only once.\n const uniquePropagatorNames = Array.from(new Set(propagatorsValue));\n const validPropagators: TextMapPropagator[] = [];\n\n uniquePropagatorNames.forEach(name => {\n const propagator = propagatorsFactory.get(name)?.();\n if (!propagator) {\n diag.warn(\n `Propagator \"${name}\" requested through configuration is unavailable.`\n );\n return;\n }\n\n validPropagators.push(propagator);\n });\n\n if (validPropagators.length === 0) {\n // null to signal that the default should **not** be used in its place.\n return null;\n } else if (uniquePropagatorNames.length === 1) {\n return validPropagators[0];\n } else {\n return new CompositePropagator({\n propagators: validPropagators,\n });\n }\n}\n\nexport function setupContextManager(\n contextManager: ContextManager | null | undefined\n) {\n // null means 'do not register'\n if (contextManager === null) {\n return;\n }\n\n // undefined means 'register default'\n if (contextManager === undefined) {\n const defaultContextManager = new AsyncLocalStorageContextManager();\n defaultContextManager.enable();\n context.setGlobalContextManager(defaultContextManager);\n return;\n }\n\n contextManager.enable();\n context.setGlobalContextManager(contextManager);\n}\n\nexport function setupPropagator(\n propagator: TextMapPropagator | null | undefined\n) {\n // null means 'do not register'\n if (propagator === null) {\n return;\n }\n\n // undefined means 'register default'\n if (propagator === undefined) {\n propagation.setGlobalPropagator(\n new CompositePropagator({\n propagators: [\n new W3CTraceContextPropagator(),\n new W3CBaggagePropagator(),\n ],\n })\n );\n return;\n }\n\n propagation.setGlobalPropagator(propagator);\n}\n\nexport function getKeyListFromObjectArray(\n obj: object[] | undefined\n): string[] | undefined {\n if (!obj || obj.length === 0) {\n return undefined;\n }\n return obj\n .map(item => Object.keys(item))\n .reduce((prev, curr) => prev.concat(curr), []);\n}\n\nexport function getNonNegativeNumberFromEnv(\n envVarName: string\n): number | undefined {\n const value = getNumberFromEnv(envVarName);\n if (value != null && value <= 0) {\n diag.warn(\n `${envVarName} (${value}) is invalid, expected number greater than 0, using default.`\n );\n return undefined;\n }\n return value;\n}\n\nexport function getPeriodicExportingMetricReaderFromEnv(\n exporter: PushMetricExporter\n): IMetricReader {\n const defaultTimeoutMillis = 30_000;\n const defaultIntervalMillis = 60_000;\n\n const rawExportIntervalMillis = getNonNegativeNumberFromEnv(\n 'OTEL_METRIC_EXPORT_INTERVAL'\n );\n const rawExportTimeoutMillis = getNonNegativeNumberFromEnv(\n 'OTEL_METRIC_EXPORT_TIMEOUT'\n );\n\n // Apply defaults\n const exportIntervalMillis = rawExportIntervalMillis ?? defaultIntervalMillis;\n let exportTimeoutMillis = rawExportTimeoutMillis ?? defaultTimeoutMillis;\n\n // Ensure timeout doesn't exceed interval\n if (exportTimeoutMillis > exportIntervalMillis) {\n // determine which env vars were set and which ones defaulted for logging purposes\n const timeoutSource =\n rawExportTimeoutMillis != null\n ? rawExportTimeoutMillis.toString()\n : `${defaultTimeoutMillis}, default`;\n const intervalSource =\n rawExportIntervalMillis != null\n ? rawExportIntervalMillis.toString()\n : `${defaultIntervalMillis}, default`;\n\n const bothSetByUser =\n rawExportTimeoutMillis != null && rawExportIntervalMillis != null;\n const logMessage = `OTEL_METRIC_EXPORT_TIMEOUT (${timeoutSource}) is greater than OTEL_METRIC_EXPORT_INTERVAL (${intervalSource}). Clamping timeout to interval value.`;\n\n // only bother users if they explicitly set both values.\n if (bothSetByUser) {\n diag.warn(logMessage);\n } else {\n diag.info(logMessage);\n }\n\n exportTimeoutMillis = exportIntervalMillis;\n }\n\n return new PeriodicExportingMetricReader({\n exportTimeoutMillis,\n exportIntervalMillis,\n exporter,\n });\n}\n\nexport function getOtlpMetricExporterFromEnv(): PushMetricExporter {\n const protocol =\n (\n getStringFromEnv('OTEL_EXPORTER_OTLP_METRICS_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL')\n )?.trim() || 'http/protobuf'; // Using || to also fall back on empty string\n\n switch (protocol) {\n case 'grpc':\n return new OTLPGrpcMetricExporter();\n case 'http/json':\n return new OTLPHttpMetricExporter();\n case 'http/protobuf':\n return new OTLPProtoMetricExporter();\n }\n\n diag.warn(\n `Unsupported OTLP metrics protocol: \"${protocol}\". Using http/protobuf.`\n );\n return new OTLPProtoMetricExporter();\n}\n\nexport function getPeriodicMetricReaderFromConfiguration(\n periodic: PeriodicMetricReaderConfigModel\n): IMetricReader | undefined {\n if (periodic.exporter) {\n let exporter;\n if (periodic.exporter.otlp_http) {\n const encoding = periodic.exporter.otlp_http.encoding;\n if (encoding === 'json') {\n exporter = new OTLPHttpMetricExporter({\n compression:\n periodic.exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n } else if (encoding === 'protobuf') {\n exporter = new OTLPProtoMetricExporter({\n compression:\n periodic.exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n } else {\n diag.warn(`Unsupported OTLP metrics encoding: ${encoding}.`);\n }\n }\n if (periodic.exporter.otlp_grpc) {\n exporter = new OTLPGrpcMetricExporter({\n compression:\n periodic.exporter.otlp_grpc.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n }\n\n if (exporter) {\n // TODO(6425): add cardinality_limits\n return new PeriodicExportingMetricReader({\n exportIntervalMillis: periodic.interval ?? 60_000,\n exportTimeoutMillis: periodic.timeout ?? 30_000,\n exporter,\n });\n }\n if (periodic.exporter.console) {\n return new PeriodicExportingMetricReader({\n exporter: new ConsoleMetricExporter(),\n });\n }\n }\n diag.warn(`Unsupported Metric Exporter.`);\n return undefined;\n}\n\n/**\n * Get LoggerProviderConfig from environment variables.\n */\nexport function getLoggerProviderConfigFromEnv(): LoggerProviderConfig {\n return {\n logRecordLimits: {\n attributeCountLimit:\n getNonNegativeNumberFromEnv('OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT') ??\n getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT'),\n attributeValueLengthLimit:\n getNonNegativeNumberFromEnv(\n 'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT'\n ) ?? getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'),\n },\n };\n}\n\n/**\n * Get configuration for BatchLogRecordProcessor from environment variables.\n */\nexport function getBatchLogRecordProcessorConfigFromEnv(): BufferConfig {\n return {\n maxQueueSize: getNonNegativeNumberFromEnv('OTEL_BLRP_MAX_QUEUE_SIZE'),\n scheduledDelayMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_SCHEDULE_DELAY'\n ),\n exportTimeoutMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_EXPORT_TIMEOUT'\n ),\n maxExportBatchSize: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE'\n ),\n };\n}\n\nexport function getBatchLogRecordProcessorFromEnv(\n exporter: LogRecordExporter\n): BatchLogRecordProcessor {\n return new BatchLogRecordProcessor(\n exporter,\n getBatchLogRecordProcessorConfigFromEnv()\n );\n}\n\nexport function getLogRecordExporter(\n exporter: LogRecordExporterConfigModel\n): LogRecordExporter | undefined {\n if (exporter.otlp_http) {\n const encoding = exporter.otlp_http.encoding;\n if (encoding === 'json') {\n return new OTLPHttpLogExporter({\n compression:\n exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n }\n if (encoding === 'protobuf') {\n return new OTLPProtoLogExporter({\n compression:\n exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n }\n diag.warn(\n `Unsupported OTLP logs encoding: ${encoding}. Using http/protobuf.`\n );\n return new OTLPProtoLogExporter({\n compression:\n exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n } else if (exporter.otlp_grpc) {\n return new OTLPGrpcLogExporter({\n compression:\n exporter.otlp_grpc.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n } else if (exporter.console) {\n return new ConsoleLogRecordExporter();\n }\n diag.warn(`Unsupported Exporter value. No Log Record Exporter registered`);\n return undefined;\n}\n\nexport function getLogRecordProcessorsFromConfiguration(\n config: ConfigurationModel\n): LogRecordProcessor[] | undefined {\n const logRecordProcessors: LogRecordProcessor[] = [];\n config.logger_provider?.processors?.forEach(processor => {\n if (processor.batch) {\n const exporter = getLogRecordExporter(processor.batch.exporter);\n if (exporter) {\n logRecordProcessors.push(\n new BatchLogRecordProcessor(exporter, {\n maxQueueSize: processor.batch.max_queue_size,\n maxExportBatchSize: processor.batch.max_export_batch_size,\n scheduledDelayMillis: processor.batch.schedule_delay,\n exportTimeoutMillis: processor.batch.export_timeout,\n })\n );\n }\n }\n if (processor.simple) {\n const exporter = getLogRecordExporter(processor.simple.exporter);\n if (exporter) {\n logRecordProcessors.push(new SimpleLogRecordProcessor(exporter));\n }\n }\n });\n if (logRecordProcessors.length > 0) {\n return logRecordProcessors;\n }\n return undefined;\n}\n\nexport function getMeterReadersFromConfiguration(\n config: ConfigurationModel\n): IMetricReader[] | undefined {\n const metricReaders: IMetricReader[] = [];\n config.meter_provider?.readers?.forEach(reader => {\n if (reader.periodic) {\n const periodicReader = getPeriodicMetricReaderFromConfiguration(\n reader.periodic\n );\n if (periodicReader) {\n metricReaders.push(periodicReader);\n }\n }\n });\n if (metricReaders.length > 0) {\n return metricReaders;\n }\n return undefined;\n}\n\nexport function getInstrumentType(\n instrument: InstrumentTypeConfigModel\n): InstrumentType | undefined {\n switch (instrument) {\n case 'counter':\n return InstrumentType.COUNTER;\n case 'gauge':\n return InstrumentType.GAUGE;\n case 'histogram':\n return InstrumentType.HISTOGRAM;\n case 'observable_counter':\n return InstrumentType.OBSERVABLE_COUNTER;\n case 'observable_gauge':\n return InstrumentType.OBSERVABLE_GAUGE;\n case 'observable_up_down_counter':\n return InstrumentType.OBSERVABLE_UP_DOWN_COUNTER;\n case 'up_down_counter':\n return InstrumentType.UP_DOWN_COUNTER;\n default:\n diag.warn(`Unsupported instrument type: ${instrument}`);\n return undefined;\n }\n}\n\nexport function getAggregationType(\n aggregation: AggregationConfigModel\n): AggregationOption | undefined {\n if (aggregation.default) {\n return {\n type: AggregationType.DEFAULT,\n };\n }\n if (aggregation.drop) {\n return {\n type: AggregationType.DROP,\n };\n }\n if (aggregation.explicit_bucket_histogram) {\n return {\n type: AggregationType.EXPLICIT_BUCKET_HISTOGRAM,\n options: {\n recordMinMax:\n aggregation.explicit_bucket_histogram.record_min_max ?? true,\n boundaries: aggregation.explicit_bucket_histogram.boundaries ?? [\n 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500,\n 10000,\n ],\n },\n };\n }\n\n if (aggregation.base2_exponential_bucket_histogram) {\n return {\n type: AggregationType.EXPONENTIAL_HISTOGRAM,\n options: {\n recordMinMax:\n aggregation.base2_exponential_bucket_histogram.record_min_max ?? true,\n maxSize: aggregation.base2_exponential_bucket_histogram.max_size,\n },\n };\n }\n if (aggregation.last_value) {\n return {\n type: AggregationType.LAST_VALUE,\n };\n }\n if (aggregation.sum) {\n return {\n type: AggregationType.SUM,\n };\n }\n\n diag.warn(`Unsupported aggregation type`);\n return undefined;\n}\n\nexport function getMeterViewsFromConfiguration(\n config: ConfigurationModel\n): ViewOptions[] | undefined {\n const metricViews: ViewOptions[] = [];\n config.meter_provider?.views?.forEach(view => {\n const viewOption: ViewOptions = {};\n if (view.selector) {\n if (view.selector.instrument_name) {\n viewOption.instrumentName = view.selector.instrument_name;\n }\n if (view.selector.instrument_type) {\n const instrumentType = getInstrumentType(view.selector.instrument_type);\n if (instrumentType) {\n viewOption.instrumentType = instrumentType;\n }\n }\n if (view.selector.unit) {\n viewOption.instrumentUnit = view.selector.unit;\n }\n if (view.selector.meter_name) {\n viewOption.meterName = view.selector.meter_name;\n }\n if (view.selector.meter_version) {\n viewOption.meterVersion = view.selector.meter_version;\n }\n if (view.selector.meter_schema_url) {\n viewOption.meterSchemaUrl = view.selector.meter_schema_url;\n }\n }\n if (view.stream) {\n viewOption.name = view.stream.name ?? view.selector?.instrument_name;\n viewOption.aggregationCardinalityLimit =\n view.stream.aggregation_cardinality_limit ?? 2_000;\n if (view.stream.description) {\n viewOption.description = view.stream.description;\n }\n if (view.stream.aggregation) {\n const aggregationType = getAggregationType(view.stream.aggregation);\n if (aggregationType) {\n viewOption.aggregation = aggregationType;\n }\n }\n // TODO(6427): add support for view.stream.attribute_keys and correspondent attributes processor configuration\n }\n\n if (Object.keys(viewOption).length > 0) {\n metricViews.push(viewOption);\n }\n });\n if (metricViews.length > 0) {\n return metricViews;\n }\n return undefined;\n}\n\nexport function getInstanceID(config: ConfigurationModel): string | undefined {\n if (config.resource?.attributes) {\n for (let i = 0; i < config.resource.attributes.length; i++) {\n const element = config.resource.attributes[i];\n if (element.name === 'service.instance.id') {\n return element.value?.toString();\n }\n }\n }\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ContextManager, TextMapPropagator } from '@opentelemetry/api';\nimport { context, diag, propagation } from '@opentelemetry/api';\nimport {\n CompositePropagator,\n getNumberFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n W3CBaggagePropagator,\n W3CTraceContextPropagator,\n} from '@opentelemetry/core';\nimport { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';\nimport { ZipkinExporter } from '@opentelemetry/exporter-zipkin';\nimport type {\n DetectedResourceAttributes,\n Resource,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n envDetector,\n hostDetector,\n osDetector,\n processDetector,\n resourceFromAttributes,\n serviceInstanceIdDetector,\n} from '@opentelemetry/resources';\nimport type {\n Sampler,\n SpanExporter,\n SpanLimits,\n SpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport {\n AlwaysOffSampler,\n AlwaysOnSampler,\n BatchSpanProcessor,\n ConsoleSpanExporter,\n ParentBasedSampler,\n SimpleSpanProcessor,\n TraceIdRatioBasedSampler,\n} from '@opentelemetry/sdk-trace-base';\nimport { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3';\nimport { JaegerPropagator } from '@opentelemetry/propagator-jaeger';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { OTLPLogExporter as OTLPHttpLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { OTLPLogExporter as OTLPGrpcLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc';\nimport { OTLPLogExporter as OTLPProtoLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';\nimport { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';\nimport type {\n ConfigurationModel,\n LogRecordExporterConfigModel,\n InstrumentTypeConfigModel,\n AggregationConfigModel,\n PeriodicMetricReaderConfigModel,\n SpanExporterConfigModel,\n SamplerConfigModel,\n NameStringValuePairConfigModel,\n HttpTlsConfigModel,\n} from '@opentelemetry/configuration';\nimport type {\n AggregationOption,\n IAttributesProcessor,\n IMetricReader,\n PushMetricExporter,\n ViewOptions,\n} from '@opentelemetry/sdk-metrics';\nimport {\n AggregationType,\n ConsoleMetricExporter,\n createAllowListAttributesProcessor,\n createDenyListAttributesProcessor,\n InstrumentType,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport { OTLPMetricExporter as OTLPGrpcMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';\nimport { OTLPMetricExporter as OTLPHttpMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { OTLPMetricExporter as OTLPProtoMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto';\nimport type {\n BufferConfig,\n LogRecordExporter,\n LoggerProviderConfig,\n LogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport {\n BatchLogRecordProcessor,\n ConsoleLogRecordExporter,\n SimpleLogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport * as fs from 'fs';\n\nconst RESOURCE_DETECTOR_ENVIRONMENT = 'env';\nconst RESOURCE_DETECTOR_HOST = 'host';\nconst RESOURCE_DETECTOR_OS = 'os';\nconst RESOURCE_DETECTOR_PROCESS = 'process';\nconst RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = 'serviceinstance';\n\nexport function getResourceFromConfiguration(\n config: ConfigurationModel\n): Resource | undefined {\n if (config.resource && config.resource.attributes) {\n const attr: DetectedResourceAttributes = {};\n for (let i = 0; i < config.resource.attributes.length; i++) {\n const a = config.resource.attributes[i];\n attr[a.name] = a.value;\n }\n return resourceFromAttributes(attr, {\n schemaUrl: config.resource.schema_url,\n });\n }\n return undefined;\n}\n\nexport function getResourceDetectorsFromEnv(): Array<ResourceDetector> {\n // When updating this list, make sure to also update the section `resourceDetectors` on README.\n const resourceDetectors = new Map<string, ResourceDetector>([\n [RESOURCE_DETECTOR_HOST, hostDetector],\n [RESOURCE_DETECTOR_OS, osDetector],\n [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, serviceInstanceIdDetector],\n [RESOURCE_DETECTOR_PROCESS, processDetector],\n [RESOURCE_DETECTOR_ENVIRONMENT, envDetector],\n ]);\n\n const resourceDetectorsFromEnv = getStringListFromEnv(\n 'OTEL_NODE_RESOURCE_DETECTORS'\n ) ?? ['all'];\n\n if (resourceDetectorsFromEnv.includes('all')) {\n return [...resourceDetectors.values()].flat();\n }\n\n if (resourceDetectorsFromEnv.includes('none')) {\n return [];\n }\n\n return resourceDetectorsFromEnv.flatMap(detector => {\n const resourceDetector = resourceDetectors.get(detector);\n if (!resourceDetector) {\n diag.warn(\n `Invalid resource detector \"${detector}\" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`\n );\n }\n return resourceDetector || [];\n });\n}\n\nexport function getResourceDetectorsFromConfiguration(\n config: ConfigurationModel\n): Array<ResourceDetector> {\n const detectors = config.resource?.['detection/development']?.detectors ?? [];\n\n return detectors.flatMap(detector => {\n const result: ResourceDetector[] = [];\n if (detector.host != null) result.push(hostDetector);\n if (detector.os != null) result.push(osDetector);\n if (detector.process != null) result.push(processDetector);\n if (detector.service != null) result.push(serviceInstanceIdDetector);\n if (detector.env != null) result.push(envDetector);\n return result;\n });\n}\n\nexport function getOtlpProtocolFromEnv(): string {\n return (\n getStringFromEnv('OTEL_EXPORTER_OTLP_TRACES_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL') ??\n 'http/protobuf'\n );\n}\n\nfunction getOtlpExporterFromEnv(): SpanExporter {\n const protocol = getOtlpProtocolFromEnv();\n\n switch (protocol) {\n case 'grpc':\n return new OTLPGrpcTraceExporter();\n case 'http/json':\n return new OTLPHttpTraceExporter();\n case 'http/protobuf':\n return new OTLPProtoTraceExporter();\n default:\n diag.warn(\n `Unsupported OTLP traces protocol: ${protocol}. Using http/protobuf.`\n );\n return new OTLPProtoTraceExporter();\n }\n}\n\nexport function getSpanProcessorsFromEnv(): SpanProcessor[] {\n const exportersMap = new Map<string, () => SpanExporter>([\n ['otlp', () => getOtlpExporterFromEnv()],\n ['zipkin', () => new ZipkinExporter()],\n ['console', () => new ConsoleSpanExporter()],\n ]);\n const exporters: SpanExporter[] = [];\n const processors: SpanProcessor[] = [];\n let traceExportersList = Array.from(\n new Set(getStringListFromEnv('OTEL_TRACES_EXPORTER'))\n ).filter(s => s !== 'null');\n\n if (traceExportersList[0] === 'none') {\n diag.warn(\n 'OTEL_TRACES_EXPORTER contains \"none\". SDK will not be initialized.'\n );\n return [];\n }\n\n if (traceExportersList.length === 0) {\n diag.debug('OTEL_TRACES_EXPORTER is empty. Using default otlp exporter.');\n traceExportersList = ['otlp'];\n } else if (\n traceExportersList.length > 1 &&\n traceExportersList.includes('none')\n ) {\n diag.warn(\n 'OTEL_TRACES_EXPORTER contains \"none\" along with other exporters. Using default otlp exporter.'\n );\n traceExportersList = ['otlp'];\n }\n\n for (const name of traceExportersList) {\n const exporter = exportersMap.get(name)?.();\n if (exporter) {\n exporters.push(exporter);\n } else {\n diag.warn(`Unrecognized OTEL_TRACES_EXPORTER value: ${name}.`);\n }\n }\n\n for (const exp of exporters) {\n if (exp instanceof ConsoleSpanExporter) {\n processors.push(new SimpleSpanProcessor(exp));\n } else {\n processors.push(new BatchSpanProcessor(exp));\n }\n }\n\n if (exporters.length === 0) {\n diag.warn(\n 'Unable to set up trace exporter(s) due to invalid exporter and/or protocol values.'\n );\n }\n\n return processors;\n}\n\n/**\n * Get a propagator as defined by environment variables\n */\nexport function getPropagatorFromEnv(): TextMapPropagator | null | undefined {\n // Empty and undefined MUST be treated equal.\n const propagatorsEnvVarValue = getStringListFromEnv('OTEL_PROPAGATORS');\n if (propagatorsEnvVarValue == null) {\n // return undefined to fall back to default\n return undefined;\n }\n\n if (propagatorsEnvVarValue.includes('none')) {\n return null;\n }\n\n // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n ['tracecontext', () => new W3CTraceContextPropagator()],\n ['baggage', () => new W3CBaggagePropagator()],\n ['b3', () => new B3Propagator()],\n [\n 'b3multi',\n () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n ],\n ['jaeger', () => new JaegerPropagator()],\n ]);\n\n // Values MUST be deduplicated in order to register a Propagator only once.\n const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue));\n const validPropagators: TextMapPropagator[] = [];\n\n uniquePropagatorNames.forEach(name => {\n const propagator = propagatorsFactory.get(name)?.();\n if (!propagator) {\n diag.warn(\n `Propagator \"${name}\" requested through environment variable is unavailable.`\n );\n return;\n }\n\n validPropagators.push(propagator);\n });\n\n if (validPropagators.length === 0) {\n // null to signal that the default should **not** be used in its place.\n return null;\n } else if (uniquePropagatorNames.length === 1) {\n return validPropagators[0];\n } else {\n return new CompositePropagator({\n propagators: validPropagators,\n });\n }\n}\n\n/**\n * Get a propagator as defined by configuration model from configuration\n */\nexport function getPropagatorFromConfiguration(\n config: ConfigurationModel\n): TextMapPropagator | null | undefined {\n const propagatorsValue = getKeyListFromObjectArray(\n config.propagator?.composite\n );\n if (propagatorsValue == null) {\n // return undefined to fall back to default\n return undefined;\n }\n\n if (propagatorsValue.includes('none')) {\n return null;\n }\n\n // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n ['tracecontext', () => new W3CTraceContextPropagator()],\n ['baggage', () => new W3CBaggagePropagator()],\n ['b3', () => new B3Propagator()],\n [\n 'b3multi',\n () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n ],\n ['jaeger', () => new JaegerPropagator()],\n ]);\n\n // Values MUST be deduplicated in order to register a Propagator only once.\n const uniquePropagatorNames = Array.from(new Set(propagatorsValue));\n const validPropagators: TextMapPropagator[] = [];\n\n uniquePropagatorNames.forEach(name => {\n const propagator = propagatorsFactory.get(name)?.();\n if (!propagator) {\n diag.warn(\n `Propagator \"${name}\" requested through configuration is unavailable.`\n );\n return;\n }\n\n validPropagators.push(propagator);\n });\n\n if (validPropagators.length === 0) {\n // null to signal that the default should **not** be used in its place.\n return null;\n } else if (uniquePropagatorNames.length === 1) {\n return validPropagators[0];\n } else {\n return new CompositePropagator({\n propagators: validPropagators,\n });\n }\n}\n\nexport function setupContextManager(\n contextManager: ContextManager | null | undefined\n) {\n // null means 'do not register'\n if (contextManager === null) {\n return;\n }\n\n // undefined means 'register default'\n if (contextManager === undefined) {\n const defaultContextManager = new AsyncLocalStorageContextManager();\n defaultContextManager.enable();\n context.setGlobalContextManager(defaultContextManager);\n return;\n }\n\n contextManager.enable();\n context.setGlobalContextManager(contextManager);\n}\n\nexport function setupPropagator(\n propagator: TextMapPropagator | null | undefined\n) {\n // null means 'do not register'\n if (propagator === null) {\n return;\n }\n\n // undefined means 'register default'\n if (propagator === undefined) {\n propagation.setGlobalPropagator(\n new CompositePropagator({\n propagators: [\n new W3CTraceContextPropagator(),\n new W3CBaggagePropagator(),\n ],\n })\n );\n return;\n }\n\n propagation.setGlobalPropagator(propagator);\n}\n\nexport function getKeyListFromObjectArray(\n obj: object[] | undefined\n): string[] | undefined {\n if (!obj || obj.length === 0) {\n return undefined;\n }\n\n const keys: string[] = [];\n for (const item of obj) {\n for (const key of Object.keys(item)) {\n keys.push(key);\n }\n }\n return keys;\n}\n\nexport function getNonNegativeNumberFromEnv(\n envVarName: string\n): number | undefined {\n const value = getNumberFromEnv(envVarName);\n if (value != null && value <= 0) {\n diag.warn(\n `${envVarName} (${value}) is invalid, expected number greater than 0, using default.`\n );\n return undefined;\n }\n return value;\n}\n\nexport function getPeriodicExportingMetricReaderFromEnv(\n exporter: PushMetricExporter\n): IMetricReader {\n const defaultTimeoutMillis = 30_000;\n const defaultIntervalMillis = 60_000;\n\n const rawExportIntervalMillis = getNonNegativeNumberFromEnv(\n 'OTEL_METRIC_EXPORT_INTERVAL'\n );\n const rawExportTimeoutMillis = getNonNegativeNumberFromEnv(\n 'OTEL_METRIC_EXPORT_TIMEOUT'\n );\n\n // Apply defaults\n const exportIntervalMillis = rawExportIntervalMillis ?? defaultIntervalMillis;\n let exportTimeoutMillis = rawExportTimeoutMillis ?? defaultTimeoutMillis;\n\n // Ensure timeout doesn't exceed interval\n if (exportTimeoutMillis > exportIntervalMillis) {\n // determine which env vars were set and which ones defaulted for logging purposes\n const timeoutSource =\n rawExportTimeoutMillis != null\n ? rawExportTimeoutMillis.toString()\n : `${defaultTimeoutMillis}, default`;\n const intervalSource =\n rawExportIntervalMillis != null\n ? rawExportIntervalMillis.toString()\n : `${defaultIntervalMillis}, default`;\n\n const bothSetByUser =\n rawExportTimeoutMillis != null && rawExportIntervalMillis != null;\n const logMessage = `OTEL_METRIC_EXPORT_TIMEOUT (${timeoutSource}) is greater than OTEL_METRIC_EXPORT_INTERVAL (${intervalSource}). Clamping timeout to interval value.`;\n\n // only bother users if they explicitly set both values.\n if (bothSetByUser) {\n diag.warn(logMessage);\n } else {\n diag.info(logMessage);\n }\n\n exportTimeoutMillis = exportIntervalMillis;\n }\n\n return new PeriodicExportingMetricReader({\n exportTimeoutMillis,\n exportIntervalMillis,\n exporter,\n });\n}\n\nexport function getOtlpMetricExporterFromEnv(): PushMetricExporter {\n const protocol =\n (\n getStringFromEnv('OTEL_EXPORTER_OTLP_METRICS_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL')\n )?.trim() || 'http/protobuf'; // Using || to also fall back on empty string\n\n switch (protocol) {\n case 'grpc':\n return new OTLPGrpcMetricExporter();\n case 'http/json':\n return new OTLPHttpMetricExporter();\n case 'http/protobuf':\n return new OTLPProtoMetricExporter();\n }\n\n diag.warn(\n `Unsupported OTLP metrics protocol: \"${protocol}\". Using http/protobuf.`\n );\n return new OTLPProtoMetricExporter();\n}\n\nexport function getPeriodicMetricReaderFromConfiguration(\n periodic: PeriodicMetricReaderConfigModel\n): IMetricReader | undefined {\n if (periodic.exporter) {\n let exporter;\n if (periodic.exporter.otlp_http) {\n const encoding = periodic.exporter.otlp_http.encoding;\n if (encoding === 'json') {\n exporter = new OTLPHttpMetricExporter({\n compression:\n periodic.exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n } else if (encoding === 'protobuf') {\n exporter = new OTLPProtoMetricExporter({\n compression:\n periodic.exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n } else {\n diag.warn(`Unsupported OTLP metrics encoding: ${encoding}.`);\n }\n }\n if (periodic.exporter.otlp_grpc) {\n exporter = new OTLPGrpcMetricExporter({\n compression:\n periodic.exporter.otlp_grpc.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n }\n\n if (exporter) {\n // TODO(6425): add cardinality_limits\n return new PeriodicExportingMetricReader({\n exportIntervalMillis: periodic.interval ?? 60_000,\n exportTimeoutMillis: periodic.timeout ?? 30_000,\n exporter,\n });\n }\n if (periodic.exporter.console) {\n return new PeriodicExportingMetricReader({\n exporter: new ConsoleMetricExporter(),\n });\n }\n }\n diag.warn(`Unsupported Metric Exporter.`);\n return undefined;\n}\n\n/**\n * Get LoggerProviderConfig from environment variables.\n */\nexport function getLoggerProviderConfigFromEnv(): LoggerProviderConfig {\n return {\n logRecordLimits: {\n attributeCountLimit:\n getNonNegativeNumberFromEnv('OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT') ??\n getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT'),\n attributeValueLengthLimit:\n getNonNegativeNumberFromEnv(\n 'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT'\n ) ?? getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'),\n },\n };\n}\n\n/**\n * Get configuration for BatchLogRecordProcessor from environment variables.\n */\nexport function getBatchLogRecordProcessorConfigFromEnv(): BufferConfig {\n return {\n maxQueueSize: getNonNegativeNumberFromEnv('OTEL_BLRP_MAX_QUEUE_SIZE'),\n scheduledDelayMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_SCHEDULE_DELAY'\n ),\n exportTimeoutMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_EXPORT_TIMEOUT'\n ),\n maxExportBatchSize: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE'\n ),\n };\n}\n\nexport function getBatchLogRecordProcessorFromEnv(\n exporter: LogRecordExporter\n): BatchLogRecordProcessor {\n return new BatchLogRecordProcessor(\n exporter,\n getBatchLogRecordProcessorConfigFromEnv()\n );\n}\n\nexport function getLogRecordExporter(\n exporter: LogRecordExporterConfigModel\n): LogRecordExporter | undefined {\n if (exporter.otlp_http) {\n const encoding = exporter.otlp_http.encoding;\n if (encoding === 'json') {\n return new OTLPHttpLogExporter({\n compression:\n exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n }\n if (encoding === 'protobuf') {\n return new OTLPProtoLogExporter({\n compression:\n exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n }\n diag.warn(\n `Unsupported OTLP logs encoding: ${encoding}. Using http/protobuf.`\n );\n return new OTLPProtoLogExporter({\n compression:\n exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n } else if (exporter.otlp_grpc) {\n return new OTLPGrpcLogExporter({\n compression:\n exporter.otlp_grpc.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n });\n } else if (exporter.console) {\n return new ConsoleLogRecordExporter();\n }\n diag.warn(`Unsupported Exporter value. No Log Record Exporter registered`);\n return undefined;\n}\n\nexport function getLogRecordProcessorsFromConfiguration(\n config: ConfigurationModel\n): LogRecordProcessor[] | undefined {\n const logRecordProcessors: LogRecordProcessor[] = [];\n config.logger_provider?.processors?.forEach(processor => {\n if (processor.batch) {\n const exporter = getLogRecordExporter(processor.batch.exporter);\n if (exporter) {\n logRecordProcessors.push(\n new BatchLogRecordProcessor(exporter, {\n maxQueueSize: processor.batch.max_queue_size,\n maxExportBatchSize: processor.batch.max_export_batch_size,\n scheduledDelayMillis: processor.batch.schedule_delay,\n exportTimeoutMillis: processor.batch.export_timeout,\n })\n );\n }\n }\n if (processor.simple) {\n const exporter = getLogRecordExporter(processor.simple.exporter);\n if (exporter) {\n logRecordProcessors.push(new SimpleLogRecordProcessor(exporter));\n }\n }\n });\n if (logRecordProcessors.length > 0) {\n return logRecordProcessors;\n }\n return undefined;\n}\n\nexport function getHeadersFromConfiguration(\n headers: NameStringValuePairConfigModel[] | undefined\n): Record<string, string> | undefined {\n if (!headers) {\n return undefined;\n }\n const result: Record<string, string> = {};\n headers.forEach(header => {\n result[header.name] = header.value;\n });\n return result;\n}\n\nexport function getHttpAgentOptionsFromTls(\n tls: HttpTlsConfigModel | undefined\n): { ca?: Buffer; cert?: Buffer; key?: Buffer } | undefined {\n if (tls && (tls.ca_file || tls.cert_file || tls.key_file)) {\n const httpsAgentOptions: { ca?: Buffer; cert?: Buffer; key?: Buffer } = {};\n if (tls.ca_file) {\n try {\n httpsAgentOptions.ca = fs.readFileSync(tls.ca_file);\n } catch (e) {\n diag.warn(`Failed to read TLS CA file at ${tls.ca_file}: ${e}`);\n }\n }\n if (tls.cert_file) {\n try {\n httpsAgentOptions.cert = fs.readFileSync(tls.cert_file);\n } catch (e) {\n diag.warn(`Failed to read TLS cert file at ${tls.cert_file}: ${e}`);\n }\n }\n if (tls.key_file) {\n try {\n httpsAgentOptions.key = fs.readFileSync(tls.key_file);\n } catch (e) {\n diag.warn(`Failed to read TLS key file at ${tls.key_file}: ${e}`);\n }\n }\n return httpsAgentOptions;\n }\n return undefined;\n}\n\nexport function getSpanExporter(\n exporter: SpanExporterConfigModel\n): SpanExporter | undefined {\n if (exporter.otlp_http) {\n const encoding = exporter.otlp_http.encoding;\n if (encoding === 'json') {\n return new OTLPHttpTraceExporter({\n compression:\n exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_http.endpoint,\n headers: getHeadersFromConfiguration(exporter.otlp_http.headers),\n timeoutMillis: exporter.otlp_http.timeout,\n httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http.tls),\n });\n } else {\n return new OTLPProtoTraceExporter({\n compression:\n exporter.otlp_http.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_http.endpoint,\n headers: getHeadersFromConfiguration(exporter.otlp_http.headers),\n timeoutMillis: exporter.otlp_http.timeout,\n httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http.tls),\n });\n }\n } else if (exporter.otlp_grpc) {\n return new OTLPGrpcTraceExporter({\n compression:\n exporter.otlp_grpc.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_grpc.endpoint,\n timeoutMillis: exporter.otlp_grpc.timeout,\n // TODO (6614): add support for credentials\n // TODO (6615): add metadata (headers) support\n });\n } else if (exporter.console) {\n return new ConsoleSpanExporter();\n }\n diag.warn(`Unsupported Exporter value. No Span Exporter registered`);\n return undefined;\n}\n\nexport function getSpanProcessorsFromConfiguration(\n config: ConfigurationModel\n): SpanProcessor[] | undefined {\n const spanProcessors: SpanProcessor[] = [];\n config.tracer_provider?.processors?.forEach(processor => {\n if (processor.batch) {\n const exporter = getSpanExporter(processor.batch.exporter);\n if (exporter) {\n spanProcessors.push(\n new BatchSpanProcessor(exporter, {\n maxQueueSize: processor.batch.max_queue_size,\n maxExportBatchSize: processor.batch.max_export_batch_size,\n scheduledDelayMillis: processor.batch.schedule_delay,\n exportTimeoutMillis: processor.batch.export_timeout,\n })\n );\n }\n }\n if (processor.simple) {\n const exporter = getSpanExporter(processor.simple.exporter);\n if (exporter) {\n spanProcessors.push(new SimpleSpanProcessor(exporter));\n }\n }\n });\n if (spanProcessors.length > 0) {\n return spanProcessors;\n }\n return undefined;\n}\n\nexport function getSpanLimitsFromConfiguration(\n config: ConfigurationModel\n): SpanLimits | undefined {\n if (config.tracer_provider?.limits) {\n const limitsConfig = config.tracer_provider.limits;\n const spanLimits: SpanLimits = {};\n spanLimits.attributeCountLimit = limitsConfig.attribute_count_limit ?? 128;\n spanLimits.eventCountLimit = limitsConfig.event_count_limit ?? 128;\n spanLimits.linkCountLimit = limitsConfig.link_count_limit ?? 128;\n spanLimits.attributePerLinkCountLimit =\n limitsConfig.link_attribute_count_limit ?? 128;\n spanLimits.attributePerEventCountLimit =\n limitsConfig.event_attribute_count_limit ?? 128;\n\n if (limitsConfig.attribute_value_length_limit != null) {\n spanLimits.attributeValueLengthLimit =\n limitsConfig.attribute_value_length_limit;\n }\n\n return spanLimits;\n }\n return undefined;\n}\n\nexport function getMeterReadersFromConfiguration(\n config: ConfigurationModel\n): IMetricReader[] | undefined {\n const metricReaders: IMetricReader[] = [];\n config.meter_provider?.readers?.forEach(reader => {\n if (reader.periodic) {\n const periodicReader = getPeriodicMetricReaderFromConfiguration(\n reader.periodic\n );\n if (periodicReader) {\n metricReaders.push(periodicReader);\n }\n }\n });\n if (metricReaders.length > 0) {\n return metricReaders;\n }\n return undefined;\n}\n\nexport function getInstrumentType(\n instrument: InstrumentTypeConfigModel\n): InstrumentType | undefined {\n switch (instrument) {\n case 'counter':\n return InstrumentType.COUNTER;\n case 'gauge':\n return InstrumentType.GAUGE;\n case 'histogram':\n return InstrumentType.HISTOGRAM;\n case 'observable_counter':\n return InstrumentType.OBSERVABLE_COUNTER;\n case 'observable_gauge':\n return InstrumentType.OBSERVABLE_GAUGE;\n case 'observable_up_down_counter':\n return InstrumentType.OBSERVABLE_UP_DOWN_COUNTER;\n case 'up_down_counter':\n return InstrumentType.UP_DOWN_COUNTER;\n default:\n diag.warn(`Unsupported instrument type: ${instrument}`);\n return undefined;\n }\n}\n\nexport function getAggregationType(\n aggregation: AggregationConfigModel\n): AggregationOption | undefined {\n if (aggregation.default) {\n return {\n type: AggregationType.DEFAULT,\n };\n }\n if (aggregation.drop) {\n return {\n type: AggregationType.DROP,\n };\n }\n if (aggregation.explicit_bucket_histogram) {\n return {\n type: AggregationType.EXPLICIT_BUCKET_HISTOGRAM,\n options: {\n recordMinMax:\n aggregation.explicit_bucket_histogram.record_min_max ?? true,\n boundaries: aggregation.explicit_bucket_histogram.boundaries ?? [\n 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500,\n 10000,\n ],\n },\n };\n }\n\n if (aggregation.base2_exponential_bucket_histogram) {\n return {\n type: AggregationType.EXPONENTIAL_HISTOGRAM,\n options: {\n recordMinMax:\n aggregation.base2_exponential_bucket_histogram.record_min_max ?? true,\n maxSize: aggregation.base2_exponential_bucket_histogram.max_size,\n },\n };\n }\n if (aggregation.last_value) {\n return {\n type: AggregationType.LAST_VALUE,\n };\n }\n if (aggregation.sum) {\n return {\n type: AggregationType.SUM,\n };\n }\n\n diag.warn(`Unsupported aggregation type`);\n return undefined;\n}\n\nexport function getMeterViewsFromConfiguration(\n config: ConfigurationModel\n): ViewOptions[] | undefined {\n const metricViews: ViewOptions[] = [];\n config.meter_provider?.views?.forEach(view => {\n const viewOption: ViewOptions = {};\n if (view.selector) {\n if (view.selector.instrument_name) {\n viewOption.instrumentName = view.selector.instrument_name;\n }\n if (view.selector.instrument_type) {\n const instrumentType = getInstrumentType(view.selector.instrument_type);\n if (instrumentType) {\n viewOption.instrumentType = instrumentType;\n }\n }\n if (view.selector.unit) {\n viewOption.instrumentUnit = view.selector.unit;\n }\n if (view.selector.meter_name) {\n viewOption.meterName = view.selector.meter_name;\n }\n if (view.selector.meter_version) {\n viewOption.meterVersion = view.selector.meter_version;\n }\n if (view.selector.meter_schema_url) {\n viewOption.meterSchemaUrl = view.selector.meter_schema_url;\n }\n }\n if (view.stream) {\n if (view.stream.name) {\n viewOption.name = view.stream.name;\n }\n viewOption.aggregationCardinalityLimit =\n view.stream.aggregation_cardinality_limit ?? 2_000;\n if (view.stream.description) {\n viewOption.description = view.stream.description;\n }\n if (view.stream.aggregation) {\n const aggregationType = getAggregationType(view.stream.aggregation);\n if (aggregationType) {\n viewOption.aggregation = aggregationType;\n }\n }\n if (view.stream.attribute_keys) {\n const processors: IAttributesProcessor[] = [];\n if (\n view.stream.attribute_keys.included &&\n view.stream.attribute_keys.included.length > 0\n ) {\n processors.push(\n createAllowListAttributesProcessor(\n view.stream.attribute_keys.included\n )\n );\n }\n if (\n view.stream.attribute_keys.excluded &&\n view.stream.attribute_keys.excluded.length > 0\n ) {\n processors.push(\n createDenyListAttributesProcessor(\n view.stream.attribute_keys.excluded\n )\n );\n }\n if (processors.length > 0) {\n viewOption.attributesProcessors = processors;\n }\n }\n }\n\n if (Object.keys(viewOption).length > 0) {\n metricViews.push(viewOption);\n }\n });\n if (metricViews.length > 0) {\n return metricViews;\n }\n return undefined;\n}\n\nexport function getInstanceID(config: ConfigurationModel): string | undefined {\n if (config.resource?.attributes) {\n for (let i = 0; i < config.resource.attributes.length; i++) {\n const element = config.resource.attributes[i];\n if (element.name === 'service.instance.id') {\n return element.value?.toString();\n }\n }\n }\n return undefined;\n}\n\nconst DEFAULT_RATIO = 1;\n\n/**\n * Builds a {@link Sampler} from a {@link SamplerConfigModel} data model.\n * This allows sampler construction from declarative configuration.\n */\nexport function buildSamplerFromConfig(config: SamplerConfigModel): Sampler {\n if (config.always_on !== undefined) {\n return new AlwaysOnSampler();\n }\n if (config.always_off !== undefined) {\n return new AlwaysOffSampler();\n }\n if (config.trace_id_ratio_based !== undefined) {\n return new TraceIdRatioBasedSampler(\n config.trace_id_ratio_based.ratio ?? DEFAULT_RATIO\n );\n }\n if (config.parent_based !== undefined) {\n const pb = config.parent_based;\n return new ParentBasedSampler({\n root: pb.root ? buildSamplerFromConfig(pb.root) : new AlwaysOnSampler(),\n remoteParentSampled: pb.remote_parent_sampled\n ? buildSamplerFromConfig(pb.remote_parent_sampled)\n : undefined,\n remoteParentNotSampled: pb.remote_parent_not_sampled\n ? buildSamplerFromConfig(pb.remote_parent_not_sampled)\n : undefined,\n localParentSampled: pb.local_parent_sampled\n ? buildSamplerFromConfig(pb.local_parent_sampled)\n : undefined,\n localParentNotSampled: pb.local_parent_not_sampled\n ? buildSamplerFromConfig(pb.local_parent_not_sampled)\n : undefined,\n });\n }\n diag.error('Unknown sampler config, defaulting to ParentBased(AlwaysOn).');\n return new ParentBasedSampler({ root: new AlwaysOnSampler() });\n}\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.214.0";
1
+ export declare const VERSION = "0.216.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -6,5 +6,5 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.VERSION = void 0;
8
8
  // this is autogenerated file, see scripts/version-update.js
9
- exports.VERSION = '0.214.0';
9
+ exports.VERSION = '0.216.0';
10
10
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4DAA4D;AAC/C,QAAA,OAAO,GAAG,SAAS,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.214.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4DAA4D;AAC/C,QAAA,OAAO,GAAG,SAAS,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.216.0';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentelemetry/sdk-node",
3
- "version": "0.214.0",
3
+ "version": "0.216.0",
4
4
  "description": "OpenTelemetry SDK for Node.js",
5
5
  "main": "build/src/index.js",
6
6
  "types": "build/src/index.d.ts",
@@ -43,30 +43,30 @@
43
43
  "access": "public"
44
44
  },
45
45
  "dependencies": {
46
- "@opentelemetry/api-logs": "0.214.0",
47
- "@opentelemetry/configuration": "0.214.0",
48
- "@opentelemetry/context-async-hooks": "2.6.1",
49
- "@opentelemetry/core": "2.6.1",
50
- "@opentelemetry/exporter-logs-otlp-grpc": "0.214.0",
51
- "@opentelemetry/exporter-logs-otlp-http": "0.214.0",
52
- "@opentelemetry/exporter-logs-otlp-proto": "0.214.0",
53
- "@opentelemetry/exporter-metrics-otlp-grpc": "0.214.0",
54
- "@opentelemetry/exporter-metrics-otlp-http": "0.214.0",
55
- "@opentelemetry/exporter-metrics-otlp-proto": "0.214.0",
56
- "@opentelemetry/exporter-prometheus": "0.214.0",
57
- "@opentelemetry/exporter-trace-otlp-grpc": "0.214.0",
58
- "@opentelemetry/exporter-trace-otlp-http": "0.214.0",
59
- "@opentelemetry/exporter-trace-otlp-proto": "0.214.0",
60
- "@opentelemetry/exporter-zipkin": "2.6.1",
61
- "@opentelemetry/instrumentation": "0.214.0",
62
- "@opentelemetry/otlp-exporter-base": "0.214.0",
63
- "@opentelemetry/propagator-b3": "2.6.1",
64
- "@opentelemetry/propagator-jaeger": "2.6.1",
65
- "@opentelemetry/resources": "2.6.1",
66
- "@opentelemetry/sdk-logs": "0.214.0",
67
- "@opentelemetry/sdk-metrics": "2.6.1",
68
- "@opentelemetry/sdk-trace-base": "2.6.1",
69
- "@opentelemetry/sdk-trace-node": "2.6.1",
46
+ "@opentelemetry/api-logs": "0.216.0",
47
+ "@opentelemetry/configuration": "0.216.0",
48
+ "@opentelemetry/context-async-hooks": "2.7.1",
49
+ "@opentelemetry/core": "2.7.1",
50
+ "@opentelemetry/exporter-logs-otlp-grpc": "0.216.0",
51
+ "@opentelemetry/exporter-logs-otlp-http": "0.216.0",
52
+ "@opentelemetry/exporter-logs-otlp-proto": "0.216.0",
53
+ "@opentelemetry/exporter-metrics-otlp-grpc": "0.216.0",
54
+ "@opentelemetry/exporter-metrics-otlp-http": "0.216.0",
55
+ "@opentelemetry/exporter-metrics-otlp-proto": "0.216.0",
56
+ "@opentelemetry/exporter-prometheus": "0.216.0",
57
+ "@opentelemetry/exporter-trace-otlp-grpc": "0.216.0",
58
+ "@opentelemetry/exporter-trace-otlp-http": "0.216.0",
59
+ "@opentelemetry/exporter-trace-otlp-proto": "0.216.0",
60
+ "@opentelemetry/exporter-zipkin": "2.7.1",
61
+ "@opentelemetry/instrumentation": "0.216.0",
62
+ "@opentelemetry/otlp-exporter-base": "0.216.0",
63
+ "@opentelemetry/propagator-b3": "2.7.1",
64
+ "@opentelemetry/propagator-jaeger": "2.7.1",
65
+ "@opentelemetry/resources": "2.7.1",
66
+ "@opentelemetry/sdk-logs": "0.216.0",
67
+ "@opentelemetry/sdk-metrics": "2.7.1",
68
+ "@opentelemetry/sdk-trace-base": "2.7.1",
69
+ "@opentelemetry/sdk-trace-node": "2.7.1",
70
70
  "@opentelemetry/semantic-conventions": "^1.29.0"
71
71
  },
72
72
  "peerDependencies": {
@@ -85,5 +85,5 @@
85
85
  },
86
86
  "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-sdk-node",
87
87
  "sideEffects": false,
88
- "gitHead": "7e74509a4d848e94b2970bb5262dd3e8efeed0a2"
88
+ "gitHead": "2400d8389a4469f7a81ccd3be2f0b2c2dd6faaf7"
89
89
  }