@opentelemetry/sdk-node 0.208.0 → 0.210.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
@@ -201,19 +201,19 @@ This is an alternative to programmatically configuring an exporter or span proce
201
201
  ### Exporters
202
202
 
203
203
  | Environment variable | Description |
204
- |----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
204
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
205
205
  | OTEL_TRACES_EXPORTER | List of exporters to be used for tracing, separated by commas. Options include `otlp`, `zipkin`, and `none`. Default is `otlp`. `none` means no autoconfigured exporter. |
206
206
  | OTEL_LOGS_EXPORTER | List of exporters to be used for logging, separated by commas. Options include `otlp`, `console` and `none`. Default is `otlp`. `none` means no autoconfigured exporter. |
207
207
 
208
208
  ### OTLP Exporter
209
209
 
210
210
  | Environment variable | Description |
211
- |-------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
211
+ | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
212
212
  | OTEL_EXPORTER_OTLP_PROTOCOL | The transport protocol to use on OTLP trace, metric, and log requests. Options include `grpc`, `http/protobuf`, and `http/json`. Default is `http/protobuf`. |
213
213
  | OTEL_EXPORTER_OTLP_TRACES_PROTOCOL | The transport protocol to use on OTLP trace requests. Options include `grpc`, `http/protobuf`, and `http/json`. Default is `http/protobuf`. |
214
214
  | OTEL_EXPORTER_OTLP_METRICS_PROTOCOL | The transport protocol to use on OTLP metric requests. Options include `grpc`, `http/protobuf`, and `http/json`. Default is `http/protobuf`. |
215
215
  | OTEL_EXPORTER_OTLP_LOGS_PROTOCOL | The transport protocol to use on OTLP log requests. Options include `grpc`, `http/protobuf`, and `http/json`. Default is `http/protobuf`. |
216
- | OTEL_METRICS_EXPORTER | Metrics exporter to be used. options are `otlp`, `prometheus`, `console` or `none`. |
216
+ | OTEL_METRICS_EXPORTER | Metrics exporter to be used. options are `otlp`, `prometheus`, `console` or `none`. Default is `otlp`. |
217
217
  | OTEL_METRIC_EXPORT_INTERVAL | The export interval when using a push Metric Reader. Default is `60000`. |
218
218
  | OTEL_METRIC_EXPORT_TIMEOUT | The export timeout when using a push Metric Reader. Default is `30000`. |
219
219
 
@@ -9,4 +9,5 @@ export * as tracing from '@opentelemetry/sdk-trace-base';
9
9
  export { NodeSDK } from './sdk';
10
10
  export type { LoggerProviderConfig, MeterProviderConfig } from './sdk';
11
11
  export type { NodeSDKConfiguration } from './types';
12
+ export { startNodeSDK } from './start';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.NodeSDK = exports.tracing = exports.resources = exports.node = exports.metrics = exports.logs = exports.core = exports.contextBase = exports.api = void 0;
18
+ exports.startNodeSDK = exports.NodeSDK = exports.tracing = exports.resources = exports.node = exports.metrics = exports.logs = exports.core = exports.contextBase = exports.api = void 0;
19
19
  // This is a meta-package, and these exist in to re-export *all* items from
20
20
  // the individual packages as individual _namespaces_, so wildcard exports are
21
21
  // appropriate here. Otherwise, it'd be a pain to enumerate and keep things
@@ -32,4 +32,6 @@ exports.tracing = require("@opentelemetry/sdk-trace-base");
32
32
  /* eslint-enable no-restricted-syntax */
33
33
  var sdk_1 = require("./sdk");
34
34
  Object.defineProperty(exports, "NodeSDK", { enumerable: true, get: function () { return sdk_1.NodeSDK; } });
35
+ var start_1 = require("./start");
36
+ Object.defineProperty(exports, "startNodeSDK", { enumerable: true, get: function () { return start_1.startNodeSDK; } });
35
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;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 *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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"]}
package/build/src/sdk.js CHANGED
@@ -24,9 +24,6 @@ const sdk_logs_1 = require("@opentelemetry/sdk-logs");
24
24
  const exporter_logs_otlp_http_1 = require("@opentelemetry/exporter-logs-otlp-http");
25
25
  const exporter_logs_otlp_grpc_1 = require("@opentelemetry/exporter-logs-otlp-grpc");
26
26
  const exporter_logs_otlp_proto_1 = require("@opentelemetry/exporter-logs-otlp-proto");
27
- const exporter_metrics_otlp_grpc_1 = require("@opentelemetry/exporter-metrics-otlp-grpc");
28
- const exporter_metrics_otlp_proto_1 = require("@opentelemetry/exporter-metrics-otlp-proto");
29
- const exporter_metrics_otlp_http_1 = require("@opentelemetry/exporter-metrics-otlp-http");
30
27
  const exporter_prometheus_1 = require("@opentelemetry/exporter-prometheus");
31
28
  const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
32
29
  const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
@@ -34,24 +31,16 @@ const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
34
31
  const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
35
32
  const core_1 = require("@opentelemetry/core");
36
33
  const utils_1 = require("./utils");
37
- /**
38
- * @Returns param value, if set else returns the default value
39
- */
40
- function getValueInMillis(envName, defaultValue) {
41
- return parseInt(process.env[envName] || '') || defaultValue;
42
- }
43
34
  /**
44
35
  *
45
36
  * @returns MetricReader[] if appropriate environment variables are configured
46
37
  */
47
- function configureMetricProviderFromEnv() {
38
+ function getMetricReadersFromEnv() {
48
39
  const metricReaders = [];
49
- const enabledExporters = (0, core_1.getStringListFromEnv)('OTEL_METRICS_EXPORTER');
50
- if (!enabledExporters) {
51
- return metricReaders;
52
- }
40
+ const enabledExporters = Array.from(new Set((0, core_1.getStringListFromEnv)('OTEL_METRICS_EXPORTER') ?? []));
53
41
  if (enabledExporters.length === 0) {
54
42
  api_1.diag.debug('OTEL_METRICS_EXPORTER is empty. Using default otlp exporter.');
43
+ enabledExporters.push('otlp');
55
44
  }
56
45
  if (enabledExporters.includes('none')) {
57
46
  api_1.diag.info(`OTEL_METRICS_EXPORTER contains "none". Metric provider will not be initialized.`);
@@ -59,40 +48,7 @@ function configureMetricProviderFromEnv() {
59
48
  }
60
49
  enabledExporters.forEach(exporter => {
61
50
  if (exporter === 'otlp') {
62
- const protocol = process.env.OTEL_EXPORTER_OTLP_METRICS_PROTOCOL?.trim() ||
63
- process.env.OTEL_EXPORTER_OTLP_PROTOCOL?.trim();
64
- const exportIntervalMillis = getValueInMillis('OTEL_METRIC_EXPORT_INTERVAL', 60000);
65
- const exportTimeoutMillis = getValueInMillis('OTEL_METRIC_EXPORT_TIMEOUT', 30000);
66
- switch (protocol) {
67
- case 'grpc':
68
- metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({
69
- exporter: new exporter_metrics_otlp_grpc_1.OTLPMetricExporter(),
70
- exportIntervalMillis: exportIntervalMillis,
71
- exportTimeoutMillis: exportTimeoutMillis,
72
- }));
73
- break;
74
- case 'http/json':
75
- metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({
76
- exporter: new exporter_metrics_otlp_http_1.OTLPMetricExporter(),
77
- exportIntervalMillis: exportIntervalMillis,
78
- exportTimeoutMillis: exportTimeoutMillis,
79
- }));
80
- break;
81
- case 'http/protobuf':
82
- metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({
83
- exporter: new exporter_metrics_otlp_proto_1.OTLPMetricExporter(),
84
- exportIntervalMillis: exportIntervalMillis,
85
- exportTimeoutMillis: exportTimeoutMillis,
86
- }));
87
- break;
88
- default:
89
- api_1.diag.warn(`Unsupported OTLP metrics protocol: "${protocol}". Using http/protobuf.`);
90
- metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({
91
- exporter: new exporter_metrics_otlp_proto_1.OTLPMetricExporter(),
92
- exportIntervalMillis: exportIntervalMillis,
93
- exportTimeoutMillis: exportTimeoutMillis,
94
- }));
95
- }
51
+ metricReaders.push((0, utils_1.getPeriodicExportingMetricReaderFromEnv)((0, utils_1.getOtlpMetricExporterFromEnv)()));
96
52
  }
97
53
  else if (exporter === 'console') {
98
54
  metricReaders.push(new sdk_metrics_1.PeriodicExportingMetricReader({
@@ -211,21 +167,24 @@ class NodeSDK {
211
167
  else {
212
168
  this.configureLoggerProviderFromEnv();
213
169
  }
214
- if (configuration.metricReaders ||
215
- configuration.metricReader ||
216
- configuration.views) {
217
- const meterProviderConfig = {};
218
- if (configuration.metricReaders) {
219
- meterProviderConfig.readers = configuration.metricReaders;
220
- }
221
- else if (configuration.metricReader) {
222
- meterProviderConfig.readers = [configuration.metricReader];
223
- api_1.diag.warn("The 'metricReader' option is deprecated. Please use 'metricReaders' instead.");
224
- }
225
- if (configuration.views) {
226
- meterProviderConfig.views = configuration.views;
227
- }
228
- this._meterProviderConfig = meterProviderConfig;
170
+ if (configuration.metricReaders) {
171
+ this._meterProviderConfig = {
172
+ readers: configuration.metricReaders,
173
+ views: configuration.views,
174
+ };
175
+ }
176
+ else if (configuration.metricReader) {
177
+ this._meterProviderConfig = {
178
+ readers: [configuration.metricReader],
179
+ views: configuration.views,
180
+ };
181
+ api_1.diag.warn("The 'metricReader' option is deprecated. Please use 'metricReaders' instead.");
182
+ }
183
+ else {
184
+ this._meterProviderConfig = {
185
+ readers: getMetricReadersFromEnv(),
186
+ views: configuration.views,
187
+ };
229
188
  }
230
189
  this._instrumentations = configuration.instrumentations?.flat() ?? [];
231
190
  }
@@ -275,19 +234,13 @@ class NodeSDK {
275
234
  this._loggerProvider = loggerProvider;
276
235
  api_logs_1.logs.setGlobalLoggerProvider(loggerProvider);
277
236
  }
278
- const metricReadersFromEnv = configureMetricProviderFromEnv();
279
- if (this._meterProviderConfig || metricReadersFromEnv.length > 0) {
280
- const readers = [];
281
- if (this._meterProviderConfig?.readers) {
282
- readers.push(...this._meterProviderConfig.readers);
283
- }
284
- if (readers.length === 0) {
285
- metricReadersFromEnv.forEach((r) => readers.push(r));
286
- }
237
+ if (this._meterProviderConfig?.readers &&
238
+ // only register if there is a reader, otherwise we waste compute/memory.
239
+ this._meterProviderConfig.readers.length > 0) {
287
240
  const meterProvider = new sdk_metrics_1.MeterProvider({
288
241
  resource: this._resource,
289
242
  views: this._meterProviderConfig?.views ?? [],
290
- readers: readers,
243
+ readers: this._meterProviderConfig.readers,
291
244
  });
292
245
  this._meterProvider = meterProvider;
293
246
  api_1.metrics.setGlobalMeterProvider(meterProvider);
@@ -315,7 +268,7 @@ class NodeSDK {
315
268
  .then(() => { }));
316
269
  }
317
270
  configureLoggerProviderFromEnv() {
318
- const enabledExporters = (0, core_1.getStringListFromEnv)('OTEL_LOGS_EXPORTER') ?? [];
271
+ const enabledExporters = Array.from(new Set((0, core_1.getStringListFromEnv)('OTEL_LOGS_EXPORTER') ?? []));
319
272
  if (enabledExporters.length === 0) {
320
273
  api_1.diag.debug('OTEL_LOGS_EXPORTER is empty. Using default otlp exporter.');
321
274
  enabledExporters.push('otlp');
@@ -328,7 +281,7 @@ class NodeSDK {
328
281
  enabledExporters.forEach(exporter => {
329
282
  if (exporter === 'otlp') {
330
283
  const protocol = ((0, core_1.getStringFromEnv)('OTEL_EXPORTER_OTLP_LOGS_PROTOCOL') ??
331
- (0, core_1.getStringFromEnv)('OTEL_EXPORTER_OTLP_PROTOCOL'))?.trim();
284
+ (0, core_1.getStringFromEnv)('OTEL_EXPORTER_OTLP_PROTOCOL'))?.trim() || 'http/protobuf'; // Using || to also fall back on empty string
332
285
  switch (protocol) {
333
286
  case 'grpc':
334
287
  exporters.push(new exporter_logs_otlp_grpc_1.OTLPLogExporter());
@@ -339,10 +292,6 @@ class NodeSDK {
339
292
  case 'http/protobuf':
340
293
  exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter());
341
294
  break;
342
- case undefined:
343
- case '':
344
- exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter());
345
- break;
346
295
  default:
347
296
  api_1.diag.warn(`Unsupported OTLP logs protocol: "${protocol}". Using http/protobuf.`);
348
297
  exporters.push(new exporter_logs_otlp_proto_1.OTLPLogExporter());
@@ -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 *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { metrics, trace, diag, DiagConsoleLogger } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport {\n Instrumentation,\n registerInstrumentations,\n} from '@opentelemetry/instrumentation';\nimport {\n defaultResource,\n detectResources,\n envDetector,\n hostDetector,\n Resource,\n processDetector,\n ResourceDetectionConfig,\n ResourceDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport {\n LogRecordProcessor,\n LoggerProvider,\n BatchLogRecordProcessor,\n ConsoleLogRecordExporter,\n LogRecordExporter,\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 { OTLPMetricExporter as OTLPGrpcMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';\nimport { OTLPMetricExporter as OTLPProtoMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto';\nimport { OTLPMetricExporter as OTLPHttpMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { PrometheusExporter as PrometheusMetricExporter } from '@opentelemetry/exporter-prometheus';\nimport {\n MeterProvider,\n IMetricReader,\n ViewOptions,\n ConsoleMetricExporter,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport {\n BatchSpanProcessor,\n SpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport {\n NodeTracerConfig,\n NodeTracerProvider,\n} from '@opentelemetry/sdk-trace-node';\nimport { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';\nimport { 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} 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 * @Returns param value, if set else returns the default value\n */\nfunction getValueInMillis(envName: string, defaultValue: number): number {\n return parseInt(process.env[envName] || '') || defaultValue;\n}\n\n/**\n *\n * @returns MetricReader[] if appropriate environment variables are configured\n */\nfunction configureMetricProviderFromEnv(): IMetricReader[] {\n const metricReaders: IMetricReader[] = [];\n const enabledExporters = getStringListFromEnv('OTEL_METRICS_EXPORTER');\n if (!enabledExporters) {\n return metricReaders;\n }\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_METRICS_EXPORTER is empty. Using default otlp exporter.');\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 const protocol =\n process.env.OTEL_EXPORTER_OTLP_METRICS_PROTOCOL?.trim() ||\n process.env.OTEL_EXPORTER_OTLP_PROTOCOL?.trim();\n\n const exportIntervalMillis = getValueInMillis(\n 'OTEL_METRIC_EXPORT_INTERVAL',\n 60000\n );\n const exportTimeoutMillis = getValueInMillis(\n 'OTEL_METRIC_EXPORT_TIMEOUT',\n 30000\n );\n\n switch (protocol) {\n case 'grpc':\n metricReaders.push(\n new PeriodicExportingMetricReader({\n exporter: new OTLPGrpcMetricExporter(),\n exportIntervalMillis: exportIntervalMillis,\n exportTimeoutMillis: exportTimeoutMillis,\n })\n );\n break;\n case 'http/json':\n metricReaders.push(\n new PeriodicExportingMetricReader({\n exporter: new OTLPHttpMetricExporter(),\n exportIntervalMillis: exportIntervalMillis,\n exportTimeoutMillis: exportTimeoutMillis,\n })\n );\n break;\n case 'http/protobuf':\n metricReaders.push(\n new PeriodicExportingMetricReader({\n exporter: new OTLPProtoMetricExporter(),\n exportIntervalMillis: exportIntervalMillis,\n exportTimeoutMillis: exportTimeoutMillis,\n })\n );\n break;\n default:\n diag.warn(\n `Unsupported OTLP metrics protocol: \"${protocol}\". Using http/protobuf.`\n );\n metricReaders.push(\n new PeriodicExportingMetricReader({\n exporter: new OTLPProtoMetricExporter(),\n exportIntervalMillis: exportIntervalMillis,\n exportTimeoutMillis: exportTimeoutMillis,\n })\n );\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 (\n configuration.metricReaders ||\n configuration.metricReader ||\n configuration.views\n ) {\n const meterProviderConfig: MeterProviderConfig = {};\n\n if (configuration.metricReaders) {\n meterProviderConfig.readers = configuration.metricReaders;\n } else if (configuration.metricReader) {\n meterProviderConfig.readers = [configuration.metricReader];\n diag.warn(\n \"The 'metricReader' option is deprecated. Please use 'metricReaders' instead.\"\n );\n }\n\n if (configuration.views) {\n meterProviderConfig.views = configuration.views;\n }\n\n this._meterProviderConfig = meterProviderConfig;\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 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 spanProcessors,\n });\n trace.setGlobalTracerProvider(this._tracerProvider);\n }\n\n if (this._loggerProviderConfig) {\n const loggerProvider = new LoggerProvider({\n resource: this._resource,\n processors: this._loggerProviderConfig.logRecordProcessors,\n });\n\n this._loggerProvider = loggerProvider;\n\n logs.setGlobalLoggerProvider(loggerProvider);\n }\n\n const metricReadersFromEnv: IMetricReader[] =\n configureMetricProviderFromEnv();\n if (this._meterProviderConfig || metricReadersFromEnv.length > 0) {\n const readers: IMetricReader[] = [];\n if (this._meterProviderConfig?.readers) {\n readers.push(...this._meterProviderConfig.readers);\n }\n\n if (readers.length === 0) {\n metricReadersFromEnv.forEach((r: IMetricReader) => readers.push(r));\n }\n\n const meterProvider = new MeterProvider({\n resource: this._resource,\n views: this._meterProviderConfig?.views ?? [],\n readers: 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\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 = getStringListFromEnv('OTEL_LOGS_EXPORTER') ?? [];\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 getStringFromEnv('OTEL_EXPORTER_OTLP_LOGS_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL')\n )?.trim();\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 case undefined:\n case '':\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 new BatchLogRecordProcessor(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 *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { metrics, trace, diag, DiagConsoleLogger } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport {\n Instrumentation,\n registerInstrumentations,\n} from '@opentelemetry/instrumentation';\nimport {\n defaultResource,\n detectResources,\n envDetector,\n hostDetector,\n Resource,\n processDetector,\n ResourceDetectionConfig,\n ResourceDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport {\n LogRecordProcessor,\n LoggerProvider,\n BatchLogRecordProcessor,\n ConsoleLogRecordExporter,\n LogRecordExporter,\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 {\n MeterProvider,\n IMetricReader,\n ViewOptions,\n ConsoleMetricExporter,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport {\n BatchSpanProcessor,\n SpanProcessor,\n} from '@opentelemetry/sdk-trace-base';\nimport {\n NodeTracerConfig,\n NodeTracerProvider,\n} from '@opentelemetry/sdk-trace-node';\nimport { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';\nimport { 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} 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 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 spanProcessors,\n });\n trace.setGlobalTracerProvider(this._tracerProvider);\n }\n\n if (this._loggerProviderConfig) {\n const loggerProvider = new LoggerProvider({\n resource: this._resource,\n processors: this._loggerProviderConfig.logRecordProcessors,\n });\n\n this._loggerProvider = loggerProvider;\n\n logs.setGlobalLoggerProvider(loggerProvider);\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\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 new BatchLogRecordProcessor(exporter);\n }\n }),\n };\n }\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { SDKOptions } from './types';
2
+ /**
3
+ * @experimental Function to start the OpenTelemetry Node SDK
4
+ * @param sdkOptions
5
+ */
6
+ export declare function startNodeSDK(sdkOptions: SDKOptions): {
7
+ shutdown: () => Promise<void>;
8
+ };
9
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startNodeSDK = void 0;
4
+ /*
5
+ * Copyright The OpenTelemetry Authors
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * https://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ const configuration_1 = require("@opentelemetry/configuration");
20
+ const api_1 = require("@opentelemetry/api");
21
+ const utils_1 = require("./utils");
22
+ const instrumentation_1 = require("@opentelemetry/instrumentation");
23
+ /**
24
+ * @experimental Function to start the OpenTelemetry Node SDK
25
+ * @param sdkOptions
26
+ */
27
+ function startNodeSDK(sdkOptions) {
28
+ const configFactory = (0, configuration_1.createConfigFactory)();
29
+ const config = configFactory.getConfigModel();
30
+ if (config.disabled) {
31
+ api_1.diag.info('OpenTelemetry SDK is disabled');
32
+ return NOOP_SDK;
33
+ }
34
+ if (config.log_level != null) {
35
+ api_1.diag.setLogger(new api_1.DiagConsoleLogger(), { logLevel: config.log_level });
36
+ }
37
+ (0, instrumentation_1.registerInstrumentations)({
38
+ instrumentations: sdkOptions?.instrumentations?.flat() ?? [],
39
+ });
40
+ (0, utils_1.setupDefaultContextManager)();
41
+ (0, utils_1.setupPropagator)(sdkOptions?.textMapPropagator === null
42
+ ? null // null means don't set.
43
+ : (sdkOptions?.textMapPropagator ??
44
+ (0, utils_1.getPropagatorFromConfiguration)(config)));
45
+ const shutdownFn = async () => {
46
+ const promises = [];
47
+ await Promise.all(promises);
48
+ };
49
+ return { shutdown: shutdownFn };
50
+ }
51
+ exports.startNodeSDK = startNodeSDK;
52
+ const NOOP_SDK = {
53
+ shutdown: async () => { },
54
+ };
55
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACH,gEAGsC;AACtC,4CAA6D;AAC7D,mCAIiB;AACjB,oEAA0E;AAG1E;;;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;IACH,IAAA,kCAA0B,GAAE,CAAC;IAC7B,IAAA,uBAAe,EACb,UAAU,EAAE,iBAAiB,KAAK,IAAI;QACpC,CAAC,CAAC,IAAI,CAAC,wBAAwB;QAC/B,CAAC,CAAC,CAAC,UAAU,EAAE,iBAAiB;YAC5B,IAAA,sCAA8B,EAAC,MAAM,CAAC,CAAC,CAC9C,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AA9BD,oCA8BC;AACD,MAAM,QAAQ,GAAG;IACf,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;CACzB,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ConfigFactory,\n createConfigFactory,\n} from '@opentelemetry/configuration';\nimport { diag, DiagConsoleLogger } from '@opentelemetry/api';\nimport {\n getPropagatorFromConfiguration,\n setupDefaultContextManager,\n setupPropagator,\n} from './utils';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type { SDKOptions } from './types';\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 setupDefaultContextManager();\n setupPropagator(\n sdkOptions?.textMapPropagator === null\n ? null // null means don't set.\n : (sdkOptions?.textMapPropagator ??\n getPropagatorFromConfiguration(config))\n );\n\n const shutdownFn = async () => {\n const promises: Promise<unknown>[] = [];\n await Promise.all(promises);\n };\n return { shutdown: shutdownFn };\n}\nconst NOOP_SDK = {\n shutdown: async () => {},\n};\n"]}
@@ -28,4 +28,11 @@ export interface NodeSDKConfiguration {
28
28
  spanLimits: SpanLimits;
29
29
  idGenerator: IdGenerator;
30
30
  }
31
+ /**
32
+ * @experimental Options for new experimental SDK setup
33
+ */
34
+ export interface SDKOptions {
35
+ instrumentations?: (Instrumentation | Instrumentation[])[];
36
+ textMapPropagator?: TextMapPropagator | null;
37
+ }
31
38
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ContextManager } from '@opentelemetry/api';\nimport { TextMapPropagator } from '@opentelemetry/api';\nimport { Instrumentation } from '@opentelemetry/instrumentation';\nimport { Resource, ResourceDetector } from '@opentelemetry/resources';\nimport { LogRecordProcessor } from '@opentelemetry/sdk-logs';\nimport { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';\nimport {\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"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ContextManager } from '@opentelemetry/api';\nimport { TextMapPropagator } from '@opentelemetry/api';\nimport { Instrumentation } from '@opentelemetry/instrumentation';\nimport { Resource, ResourceDetector } from '@opentelemetry/resources';\nimport { LogRecordProcessor } from '@opentelemetry/sdk-logs';\nimport { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';\nimport {\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 textMapPropagator?: TextMapPropagator | null;\n}\n"]}
@@ -1,14 +1,24 @@
1
1
  import { ContextManager, TextMapPropagator } from '@opentelemetry/api';
2
2
  import { ResourceDetector } from '@opentelemetry/resources';
3
3
  import { SpanProcessor } from '@opentelemetry/sdk-trace-base';
4
+ import { ConfigurationModel } from '@opentelemetry/configuration';
5
+ import { IMetricReader, PushMetricExporter } from '@opentelemetry/sdk-metrics';
4
6
  export declare function getResourceDetectorsFromEnv(): Array<ResourceDetector>;
5
- export declare function filterBlanksAndNulls(list: string[]): string[];
6
7
  export declare function getOtlpProtocolFromEnv(): string;
7
8
  export declare function getSpanProcessorsFromEnv(): SpanProcessor[];
8
9
  /**
9
10
  * Get a propagator as defined by environment variables
10
11
  */
11
12
  export declare function getPropagatorFromEnv(): TextMapPropagator | null | undefined;
13
+ /**
14
+ * Get a propagator as defined by configuration model from configuration
15
+ */
16
+ export declare function getPropagatorFromConfiguration(config: ConfigurationModel): TextMapPropagator | null | undefined;
12
17
  export declare function setupContextManager(contextManager: ContextManager | null | undefined): void;
18
+ export declare function setupDefaultContextManager(): void;
13
19
  export declare function setupPropagator(propagator: TextMapPropagator | null | undefined): void;
20
+ export declare function getKeyListFromObjectArray(obj: object[] | undefined): string[] | undefined;
21
+ export declare function getAndValidateMillisFromEnv(envVarName: string): number | undefined;
22
+ export declare function getPeriodicExportingMetricReaderFromEnv(exporter: PushMetricExporter): IMetricReader;
23
+ export declare function getOtlpMetricExporterFromEnv(): PushMetricExporter;
14
24
  //# sourceMappingURL=utils.d.ts.map
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.setupPropagator = exports.setupContextManager = exports.getPropagatorFromEnv = exports.getSpanProcessorsFromEnv = exports.getOtlpProtocolFromEnv = exports.filterBlanksAndNulls = exports.getResourceDetectorsFromEnv = void 0;
18
+ exports.getOtlpMetricExporterFromEnv = exports.getPeriodicExportingMetricReaderFromEnv = exports.getAndValidateMillisFromEnv = exports.getKeyListFromObjectArray = exports.setupPropagator = exports.setupDefaultContextManager = exports.setupContextManager = exports.getPropagatorFromConfiguration = exports.getPropagatorFromEnv = exports.getSpanProcessorsFromEnv = exports.getOtlpProtocolFromEnv = exports.getResourceDetectorsFromEnv = void 0;
19
19
  const api_1 = require("@opentelemetry/api");
20
20
  const core_1 = require("@opentelemetry/core");
21
21
  const exporter_trace_otlp_proto_1 = require("@opentelemetry/exporter-trace-otlp-proto");
@@ -27,6 +27,10 @@ const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
27
27
  const propagator_b3_1 = require("@opentelemetry/propagator-b3");
28
28
  const propagator_jaeger_1 = require("@opentelemetry/propagator-jaeger");
29
29
  const context_async_hooks_1 = require("@opentelemetry/context-async-hooks");
30
+ const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
31
+ const exporter_metrics_otlp_grpc_1 = require("@opentelemetry/exporter-metrics-otlp-grpc");
32
+ const exporter_metrics_otlp_http_1 = require("@opentelemetry/exporter-metrics-otlp-http");
33
+ const exporter_metrics_otlp_proto_1 = require("@opentelemetry/exporter-metrics-otlp-proto");
30
34
  const RESOURCE_DETECTOR_ENVIRONMENT = 'env';
31
35
  const RESOURCE_DETECTOR_HOST = 'host';
32
36
  const RESOURCE_DETECTOR_OS = 'os';
@@ -57,10 +61,6 @@ function getResourceDetectorsFromEnv() {
57
61
  });
58
62
  }
59
63
  exports.getResourceDetectorsFromEnv = getResourceDetectorsFromEnv;
60
- function filterBlanksAndNulls(list) {
61
- return list.map(item => item.trim()).filter(s => s !== 'null' && s !== '');
62
- }
63
- exports.filterBlanksAndNulls = filterBlanksAndNulls;
64
64
  function getOtlpProtocolFromEnv() {
65
65
  return ((0, core_1.getStringFromEnv)('OTEL_EXPORTER_OTLP_TRACES_PROTOCOL') ??
66
66
  (0, core_1.getStringFromEnv)('OTEL_EXPORTER_OTLP_PROTOCOL') ??
@@ -89,7 +89,7 @@ function getSpanProcessorsFromEnv() {
89
89
  ]);
90
90
  const exporters = [];
91
91
  const processors = [];
92
- let traceExportersList = filterBlanksAndNulls(Array.from(new Set((0, core_1.getStringListFromEnv)('OTEL_TRACES_EXPORTER'))));
92
+ let traceExportersList = Array.from(new Set((0, core_1.getStringListFromEnv)('OTEL_TRACES_EXPORTER'))).filter(s => s !== 'null');
93
93
  if (traceExportersList[0] === 'none') {
94
94
  api_1.diag.warn('OTEL_TRACES_EXPORTER contains "none". SDK will not be initialized.');
95
95
  return [];
@@ -153,20 +153,15 @@ function getPropagatorFromEnv() {
153
153
  ]);
154
154
  // Values MUST be deduplicated in order to register a Propagator only once.
155
155
  const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue));
156
- const propagators = uniquePropagatorNames.map(name => {
156
+ const validPropagators = [];
157
+ uniquePropagatorNames.forEach(name => {
157
158
  const propagator = propagatorsFactory.get(name)?.();
158
159
  if (!propagator) {
159
160
  api_1.diag.warn(`Propagator "${name}" requested through environment variable is unavailable.`);
160
- return undefined;
161
+ return;
161
162
  }
162
- return propagator;
163
+ validPropagators.push(propagator);
163
164
  });
164
- const validPropagators = propagators.reduce((list, item) => {
165
- if (item) {
166
- list.push(item);
167
- }
168
- return list;
169
- }, []);
170
165
  if (validPropagators.length === 0) {
171
166
  // null to signal that the default should **not** be used in its place.
172
167
  return null;
@@ -181,6 +176,55 @@ function getPropagatorFromEnv() {
181
176
  }
182
177
  }
183
178
  exports.getPropagatorFromEnv = getPropagatorFromEnv;
179
+ /**
180
+ * Get a propagator as defined by configuration model from configuration
181
+ */
182
+ function getPropagatorFromConfiguration(config) {
183
+ const propagatorsValue = getKeyListFromObjectArray(config.propagator?.composite);
184
+ if (propagatorsValue == null) {
185
+ // return undefined to fall back to default
186
+ return undefined;
187
+ }
188
+ if (propagatorsValue.includes('none')) {
189
+ return null;
190
+ }
191
+ // Implementation note: this only contains specification required propagators that are actually hosted in this repo.
192
+ // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).
193
+ const propagatorsFactory = new Map([
194
+ ['tracecontext', () => new core_1.W3CTraceContextPropagator()],
195
+ ['baggage', () => new core_1.W3CBaggagePropagator()],
196
+ ['b3', () => new propagator_b3_1.B3Propagator()],
197
+ [
198
+ 'b3multi',
199
+ () => new propagator_b3_1.B3Propagator({ injectEncoding: propagator_b3_1.B3InjectEncoding.MULTI_HEADER }),
200
+ ],
201
+ ['jaeger', () => new propagator_jaeger_1.JaegerPropagator()],
202
+ ]);
203
+ // Values MUST be deduplicated in order to register a Propagator only once.
204
+ const uniquePropagatorNames = Array.from(new Set(propagatorsValue));
205
+ const validPropagators = [];
206
+ uniquePropagatorNames.forEach(name => {
207
+ const propagator = propagatorsFactory.get(name)?.();
208
+ if (!propagator) {
209
+ api_1.diag.warn(`Propagator "${name}" requested through configuration is unavailable.`);
210
+ return;
211
+ }
212
+ validPropagators.push(propagator);
213
+ });
214
+ if (validPropagators.length === 0) {
215
+ // null to signal that the default should **not** be used in its place.
216
+ return null;
217
+ }
218
+ else if (uniquePropagatorNames.length === 1) {
219
+ return validPropagators[0];
220
+ }
221
+ else {
222
+ return new core_1.CompositePropagator({
223
+ propagators: validPropagators,
224
+ });
225
+ }
226
+ }
227
+ exports.getPropagatorFromConfiguration = getPropagatorFromConfiguration;
184
228
  function setupContextManager(contextManager) {
185
229
  // null means 'do not register'
186
230
  if (contextManager === null) {
@@ -197,6 +241,12 @@ function setupContextManager(contextManager) {
197
241
  api_1.context.setGlobalContextManager(contextManager);
198
242
  }
199
243
  exports.setupContextManager = setupContextManager;
244
+ function setupDefaultContextManager() {
245
+ const defaultContextManager = new context_async_hooks_1.AsyncLocalStorageContextManager();
246
+ defaultContextManager.enable();
247
+ api_1.context.setGlobalContextManager(defaultContextManager);
248
+ }
249
+ exports.setupDefaultContextManager = setupDefaultContextManager;
200
250
  function setupPropagator(propagator) {
201
251
  // null means 'do not register'
202
252
  if (propagator === null) {
@@ -215,4 +265,72 @@ function setupPropagator(propagator) {
215
265
  api_1.propagation.setGlobalPropagator(propagator);
216
266
  }
217
267
  exports.setupPropagator = setupPropagator;
268
+ function getKeyListFromObjectArray(obj) {
269
+ if (!obj || obj.length === 0) {
270
+ return undefined;
271
+ }
272
+ return obj
273
+ .map(item => Object.keys(item))
274
+ .reduce((prev, curr) => prev.concat(curr), []);
275
+ }
276
+ exports.getKeyListFromObjectArray = getKeyListFromObjectArray;
277
+ function getAndValidateMillisFromEnv(envVarName) {
278
+ const value = (0, core_1.getNumberFromEnv)(envVarName);
279
+ if (value != null && value <= 0) {
280
+ api_1.diag.warn(`${envVarName} (${value}) is invalid, expected number greater than 0, using default.`);
281
+ return undefined;
282
+ }
283
+ return value;
284
+ }
285
+ exports.getAndValidateMillisFromEnv = getAndValidateMillisFromEnv;
286
+ function getPeriodicExportingMetricReaderFromEnv(exporter) {
287
+ const defaultTimeoutMillis = 30000;
288
+ const defaultIntervalMillis = 60000;
289
+ const rawExportIntervalMillis = getAndValidateMillisFromEnv('OTEL_METRIC_EXPORT_INTERVAL');
290
+ const rawExportTimeoutMillis = getAndValidateMillisFromEnv('OTEL_METRIC_EXPORT_TIMEOUT');
291
+ // Apply defaults
292
+ const exportIntervalMillis = rawExportIntervalMillis ?? defaultIntervalMillis;
293
+ let exportTimeoutMillis = rawExportTimeoutMillis ?? defaultTimeoutMillis;
294
+ // Ensure timeout doesn't exceed interval
295
+ if (exportTimeoutMillis > exportIntervalMillis) {
296
+ // determine which env vars were set and which ones defaulted for logging purposes
297
+ const timeoutSource = rawExportTimeoutMillis != null
298
+ ? rawExportTimeoutMillis.toString()
299
+ : `${defaultTimeoutMillis}, default`;
300
+ const intervalSource = rawExportIntervalMillis != null
301
+ ? rawExportIntervalMillis.toString()
302
+ : `${defaultIntervalMillis}, default`;
303
+ const bothSetByUser = rawExportTimeoutMillis != null && rawExportIntervalMillis != null;
304
+ const logMessage = `OTEL_METRIC_EXPORT_TIMEOUT (${timeoutSource}) is greater than OTEL_METRIC_EXPORT_INTERVAL (${intervalSource}). Clamping timeout to interval value.`;
305
+ // only bother users if they explicitly set both values.
306
+ if (bothSetByUser) {
307
+ api_1.diag.warn(logMessage);
308
+ }
309
+ else {
310
+ api_1.diag.info(logMessage);
311
+ }
312
+ exportTimeoutMillis = exportIntervalMillis;
313
+ }
314
+ return new sdk_metrics_1.PeriodicExportingMetricReader({
315
+ exportTimeoutMillis,
316
+ exportIntervalMillis,
317
+ exporter,
318
+ });
319
+ }
320
+ exports.getPeriodicExportingMetricReaderFromEnv = getPeriodicExportingMetricReaderFromEnv;
321
+ function getOtlpMetricExporterFromEnv() {
322
+ const protocol = ((0, core_1.getStringFromEnv)('OTEL_EXPORTER_OTLP_METRICS_PROTOCOL') ??
323
+ (0, core_1.getStringFromEnv)('OTEL_EXPORTER_OTLP_PROTOCOL'))?.trim() || 'http/protobuf'; // Using || to also fall back on empty string
324
+ switch (protocol) {
325
+ case 'grpc':
326
+ return new exporter_metrics_otlp_grpc_1.OTLPMetricExporter();
327
+ case 'http/json':
328
+ return new exporter_metrics_otlp_http_1.OTLPMetricExporter();
329
+ case 'http/protobuf':
330
+ return new exporter_metrics_otlp_proto_1.OTLPMetricExporter();
331
+ }
332
+ api_1.diag.warn(`Unsupported OTLP metrics protocol: "${protocol}". Using http/protobuf.`);
333
+ return new exporter_metrics_otlp_proto_1.OTLPMetricExporter();
334
+ }
335
+ exports.getOtlpMetricExporterFromEnv = getOtlpMetricExporterFromEnv;
218
336
  //# 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 *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n context,\n ContextManager,\n diag,\n propagation,\n TextMapPropagator,\n} from '@opentelemetry/api';\nimport {\n CompositePropagator,\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 {\n envDetector,\n hostDetector,\n osDetector,\n processDetector,\n ResourceDetector,\n serviceInstanceIdDetector,\n} from '@opentelemetry/resources';\nimport {\n BatchSpanProcessor,\n ConsoleSpanExporter,\n SimpleSpanProcessor,\n SpanExporter,\n SpanProcessor,\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';\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 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_ENVIRONMENT, envDetector],\n [RESOURCE_DETECTOR_HOST, hostDetector],\n [RESOURCE_DETECTOR_OS, osDetector],\n [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, serviceInstanceIdDetector],\n [RESOURCE_DETECTOR_PROCESS, processDetector],\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 filterBlanksAndNulls(list: string[]): string[] {\n return list.map(item => item.trim()).filter(s => s !== 'null' && s !== '');\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 = filterBlanksAndNulls(\n Array.from(new Set(getStringListFromEnv('OTEL_TRACES_EXPORTER')))\n );\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\n const propagators = uniquePropagatorNames.map(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 undefined;\n }\n\n return propagator;\n });\n\n const validPropagators = propagators.reduce<TextMapPropagator[]>(\n (list, item) => {\n if (item) {\n list.push(item);\n }\n return list;\n },\n []\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"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n context,\n ContextManager,\n diag,\n propagation,\n TextMapPropagator,\n} 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 {\n envDetector,\n hostDetector,\n osDetector,\n processDetector,\n ResourceDetector,\n serviceInstanceIdDetector,\n} from '@opentelemetry/resources';\nimport {\n BatchSpanProcessor,\n ConsoleSpanExporter,\n SimpleSpanProcessor,\n SpanExporter,\n SpanProcessor,\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 { ConfigurationModel } from '@opentelemetry/configuration';\nimport {\n IMetricReader,\n PeriodicExportingMetricReader,\n PushMetricExporter,\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';\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 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_ENVIRONMENT, envDetector],\n [RESOURCE_DETECTOR_HOST, hostDetector],\n [RESOURCE_DETECTOR_OS, osDetector],\n [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, serviceInstanceIdDetector],\n [RESOURCE_DETECTOR_PROCESS, processDetector],\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 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 setupDefaultContextManager() {\n const defaultContextManager = new AsyncLocalStorageContextManager();\n defaultContextManager.enable();\n context.setGlobalContextManager(defaultContextManager);\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 getAndValidateMillisFromEnv(\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 = getAndValidateMillisFromEnv(\n 'OTEL_METRIC_EXPORT_INTERVAL'\n );\n const rawExportTimeoutMillis = getAndValidateMillisFromEnv(\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"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.208.0";
1
+ export declare const VERSION = "0.210.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -17,5 +17,5 @@
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.VERSION = void 0;
19
19
  // this is autogenerated file, see scripts/version-update.js
20
- exports.VERSION = '0.208.0';
20
+ exports.VERSION = '0.210.0';
21
21
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,4DAA4D;AAC/C,QAAA,OAAO,GAAG,SAAS,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.208.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,4DAA4D;AAC/C,QAAA,OAAO,GAAG,SAAS,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.210.0';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentelemetry/sdk-node",
3
- "version": "0.208.0",
3
+ "version": "0.210.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,27 +43,29 @@
43
43
  "access": "public"
44
44
  },
45
45
  "dependencies": {
46
- "@opentelemetry/api-logs": "0.208.0",
47
- "@opentelemetry/core": "2.2.0",
48
- "@opentelemetry/exporter-logs-otlp-grpc": "0.208.0",
49
- "@opentelemetry/exporter-logs-otlp-http": "0.208.0",
50
- "@opentelemetry/exporter-logs-otlp-proto": "0.208.0",
51
- "@opentelemetry/exporter-metrics-otlp-grpc": "0.208.0",
52
- "@opentelemetry/exporter-metrics-otlp-http": "0.208.0",
53
- "@opentelemetry/exporter-metrics-otlp-proto": "0.208.0",
54
- "@opentelemetry/exporter-prometheus": "0.208.0",
55
- "@opentelemetry/exporter-trace-otlp-grpc": "0.208.0",
56
- "@opentelemetry/exporter-trace-otlp-http": "0.208.0",
57
- "@opentelemetry/exporter-trace-otlp-proto": "0.208.0",
58
- "@opentelemetry/exporter-zipkin": "2.2.0",
59
- "@opentelemetry/instrumentation": "0.208.0",
60
- "@opentelemetry/propagator-b3": "2.2.0",
61
- "@opentelemetry/propagator-jaeger": "2.2.0",
62
- "@opentelemetry/resources": "2.2.0",
63
- "@opentelemetry/sdk-logs": "0.208.0",
64
- "@opentelemetry/sdk-metrics": "2.2.0",
65
- "@opentelemetry/sdk-trace-base": "2.2.0",
66
- "@opentelemetry/sdk-trace-node": "2.2.0",
46
+ "@opentelemetry/api-logs": "0.210.0",
47
+ "@opentelemetry/configuration": "0.210.0",
48
+ "@opentelemetry/context-async-hooks": "2.4.0",
49
+ "@opentelemetry/core": "2.4.0",
50
+ "@opentelemetry/exporter-logs-otlp-grpc": "0.210.0",
51
+ "@opentelemetry/exporter-logs-otlp-http": "0.210.0",
52
+ "@opentelemetry/exporter-logs-otlp-proto": "0.210.0",
53
+ "@opentelemetry/exporter-metrics-otlp-grpc": "0.210.0",
54
+ "@opentelemetry/exporter-metrics-otlp-http": "0.210.0",
55
+ "@opentelemetry/exporter-metrics-otlp-proto": "0.210.0",
56
+ "@opentelemetry/exporter-prometheus": "0.210.0",
57
+ "@opentelemetry/exporter-trace-otlp-grpc": "0.210.0",
58
+ "@opentelemetry/exporter-trace-otlp-http": "0.210.0",
59
+ "@opentelemetry/exporter-trace-otlp-proto": "0.210.0",
60
+ "@opentelemetry/exporter-zipkin": "2.4.0",
61
+ "@opentelemetry/instrumentation": "0.210.0",
62
+ "@opentelemetry/propagator-b3": "2.4.0",
63
+ "@opentelemetry/propagator-jaeger": "2.4.0",
64
+ "@opentelemetry/resources": "2.4.0",
65
+ "@opentelemetry/sdk-logs": "0.210.0",
66
+ "@opentelemetry/sdk-metrics": "2.4.0",
67
+ "@opentelemetry/sdk-trace-base": "2.4.0",
68
+ "@opentelemetry/sdk-trace-node": "2.4.0",
67
69
  "@opentelemetry/semantic-conventions": "^1.29.0"
68
70
  },
69
71
  "peerDependencies": {
@@ -71,11 +73,10 @@
71
73
  },
72
74
  "devDependencies": {
73
75
  "@opentelemetry/api": "1.9.0",
74
- "@opentelemetry/context-async-hooks": "2.2.0",
75
76
  "@types/mocha": "10.0.10",
76
77
  "@types/node": "18.6.5",
77
78
  "@types/sinon": "17.0.4",
78
- "mocha": "11.7.4",
79
+ "mocha": "11.7.5",
79
80
  "nyc": "17.1.0",
80
81
  "sinon": "18.0.1",
81
82
  "ts-loader": "9.5.4",
@@ -83,5 +84,5 @@
83
84
  },
84
85
  "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-sdk-node",
85
86
  "sideEffects": false,
86
- "gitHead": "5eaa869bf08e6a16eec37eac44084257e8e21209"
87
+ "gitHead": "5e6504d2a3a7ce3aaa211d9e2a5b002a0e4d7da1"
87
88
  }