@opentelemetry/configuration 0.209.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.
Files changed (42) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +35 -0
  3. package/build/src/ConfigFactory.d.ts +3 -0
  4. package/build/src/ConfigFactory.js +28 -0
  5. package/build/src/ConfigFactory.js.map +1 -0
  6. package/build/src/EnvironmentConfigFactory.d.ts +17 -0
  7. package/build/src/EnvironmentConfigFactory.js +639 -0
  8. package/build/src/EnvironmentConfigFactory.js.map +1 -0
  9. package/build/src/FileConfigFactory.d.ts +21 -0
  10. package/build/src/FileConfigFactory.js +909 -0
  11. package/build/src/FileConfigFactory.js.map +1 -0
  12. package/build/src/IConfigFactory.d.ts +10 -0
  13. package/build/src/IConfigFactory.js +18 -0
  14. package/build/src/IConfigFactory.js.map +1 -0
  15. package/build/src/index.d.ts +7 -0
  16. package/build/src/index.js +21 -0
  17. package/build/src/index.js.map +1 -0
  18. package/build/src/models/commonModel.d.ts +145 -0
  19. package/build/src/models/commonModel.js +24 -0
  20. package/build/src/models/commonModel.js.map +1 -0
  21. package/build/src/models/configModel.d.ts +82 -0
  22. package/build/src/models/configModel.js +36 -0
  23. package/build/src/models/configModel.js.map +1 -0
  24. package/build/src/models/loggerProviderModel.d.ts +124 -0
  25. package/build/src/models/loggerProviderModel.js +28 -0
  26. package/build/src/models/loggerProviderModel.js.map +1 -0
  27. package/build/src/models/meterProviderModel.d.ts +470 -0
  28. package/build/src/models/meterProviderModel.js +53 -0
  29. package/build/src/models/meterProviderModel.js.map +1 -0
  30. package/build/src/models/resourceModel.d.ts +63 -0
  31. package/build/src/models/resourceModel.js +18 -0
  32. package/build/src/models/resourceModel.js.map +1 -0
  33. package/build/src/models/tracerProviderModel.d.ts +177 -0
  34. package/build/src/models/tracerProviderModel.js +41 -0
  35. package/build/src/models/tracerProviderModel.js.map +1 -0
  36. package/build/src/utils.d.ts +66 -0
  37. package/build/src/utils.js +174 -0
  38. package/build/src/utils.js.map +1 -0
  39. package/build/src/version.d.ts +2 -0
  40. package/build/src/version.js +21 -0
  41. package/build/src/version.js.map +1 -0
  42. package/package.json +60 -0
@@ -0,0 +1,909 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright The OpenTelemetry Authors
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * https://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.setLoggerProvider = exports.setMeterProvider = exports.getTemporalityPreference = exports.setTracerProvider = exports.setPropagator = exports.setAttributeLimits = exports.setResourceAttributes = exports.parseConfigFile = exports.hasValidConfigFile = exports.FileConfigFactory = void 0;
19
+ const core_1 = require("@opentelemetry/core");
20
+ const configModel_1 = require("./models/configModel");
21
+ const fs = require("fs");
22
+ const yaml = require("yaml");
23
+ const utils_1 = require("./utils");
24
+ const commonModel_1 = require("./models/commonModel");
25
+ const tracerProviderModel_1 = require("./models/tracerProviderModel");
26
+ const loggerProviderModel_1 = require("./models/loggerProviderModel");
27
+ const meterProviderModel_1 = require("./models/meterProviderModel");
28
+ const api_1 = require("@opentelemetry/api");
29
+ class FileConfigFactory {
30
+ _config;
31
+ constructor() {
32
+ this._config = (0, configModel_1.initializeDefaultConfiguration)();
33
+ parseConfigFile(this._config);
34
+ }
35
+ getConfigModel() {
36
+ return this._config;
37
+ }
38
+ }
39
+ exports.FileConfigFactory = FileConfigFactory;
40
+ function hasValidConfigFile() {
41
+ const configFile = (0, core_1.getStringFromEnv)('OTEL_EXPERIMENTAL_CONFIG_FILE');
42
+ if (configFile) {
43
+ if (!(configFile.endsWith('.yaml') || configFile.endsWith('.yml')) ||
44
+ !fs.existsSync(configFile)) {
45
+ api_1.diag.warn(`Config file ${configFile} set on OTEL_EXPERIMENTAL_CONFIG_FILE is not valid`);
46
+ return false;
47
+ }
48
+ return true;
49
+ }
50
+ return false;
51
+ }
52
+ exports.hasValidConfigFile = hasValidConfigFile;
53
+ function parseConfigFile(config) {
54
+ const supportedFileVersions = ['1.0-rc.1', '1.0-rc.2'];
55
+ const configFile = (0, core_1.getStringFromEnv)('OTEL_EXPERIMENTAL_CONFIG_FILE') || '';
56
+ const file = fs.readFileSync(configFile, 'utf8');
57
+ const parsedContent = yaml.parse(file);
58
+ if (parsedContent['file_format'] &&
59
+ supportedFileVersions.includes(parsedContent['file_format'])) {
60
+ const disabled = (0, utils_1.getBooleanFromConfigFile)(parsedContent['disabled']);
61
+ if (disabled !== undefined) {
62
+ config.disabled = disabled;
63
+ }
64
+ const logLevel = (0, utils_1.getNumberFromConfigFile)((0, core_1.diagLogLevelFromString)(parsedContent['log_level']));
65
+ if (logLevel) {
66
+ config.log_level = logLevel;
67
+ }
68
+ if (parsedContent['resource']) {
69
+ if (config.resource == null) {
70
+ config.resource = {};
71
+ }
72
+ const schemaUrl = (0, utils_1.getStringFromConfigFile)(parsedContent['resource']?.['schema_url']);
73
+ if (schemaUrl) {
74
+ config.resource.schema_url = schemaUrl;
75
+ }
76
+ }
77
+ setResourceAttributes(config, parsedContent['resource']?.['attributes'], parsedContent['resource']?.['attributes_list']);
78
+ setAttributeLimits(config, parsedContent['attribute_limits']);
79
+ setPropagator(config, parsedContent['propagator']);
80
+ setTracerProvider(config, parsedContent['tracer_provider']);
81
+ setMeterProvider(config, parsedContent['meter_provider']);
82
+ setLoggerProvider(config, parsedContent['logger_provider']);
83
+ }
84
+ else {
85
+ api_1.diag.warn(`Unsupported File Format: ${parsedContent['file_format']}. It must be one of the following: ${supportedFileVersions}`);
86
+ }
87
+ }
88
+ exports.parseConfigFile = parseConfigFile;
89
+ function setResourceAttributes(config, attributes, attributeList) {
90
+ if (attributes || attributeList) {
91
+ const addedKeys = [];
92
+ if (config.resource == null) {
93
+ config.resource = {};
94
+ }
95
+ if ((0, utils_1.getStringFromConfigFile)(attributeList)) {
96
+ config.resource.attributes_list = (0, utils_1.getStringFromConfigFile)(attributeList);
97
+ }
98
+ const list = (0, utils_1.getStringListFromConfigFile)(attributeList);
99
+ if ((list && list.length > 0) || (attributes && attributes.length > 0)) {
100
+ config.resource.attributes = [];
101
+ if (attributes) {
102
+ for (let i = 0; i < attributes.length; i++) {
103
+ const att = attributes[i];
104
+ let value = att['value'];
105
+ switch (att['type']) {
106
+ case 'bool':
107
+ value = (0, utils_1.getBooleanFromConfigFile)(value);
108
+ break;
109
+ case 'bool_array':
110
+ value = (0, utils_1.getBooleanListFromConfigFile)(value);
111
+ break;
112
+ case 'int':
113
+ case 'double':
114
+ value = (0, utils_1.getNumberFromConfigFile)(value);
115
+ break;
116
+ case 'int_array':
117
+ case 'double_array':
118
+ value = (0, utils_1.getNumberListFromConfigFile)(value);
119
+ break;
120
+ case 'string_array':
121
+ value = (0, utils_1.getStringListFromConfigFile)(value);
122
+ break;
123
+ default:
124
+ value = (0, utils_1.getStringFromConfigFile)(value);
125
+ break;
126
+ }
127
+ const key = (0, utils_1.getStringFromConfigFile)(att['name']) ?? '';
128
+ config.resource.attributes.push({
129
+ name: key,
130
+ value: value,
131
+ type: att['type'] ?? 'string',
132
+ });
133
+ addedKeys.push(key);
134
+ }
135
+ }
136
+ if (list) {
137
+ for (let i = 0; i < list.length; i++) {
138
+ const element = list[i].split('=');
139
+ if (!addedKeys.includes(element[0])) {
140
+ config.resource.attributes.push({
141
+ name: element[0],
142
+ value: element[1],
143
+ type: 'string',
144
+ });
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ exports.setResourceAttributes = setResourceAttributes;
152
+ function setAttributeLimits(config, attrLimits) {
153
+ if (attrLimits) {
154
+ if (config.attribute_limits == null) {
155
+ config.attribute_limits = {
156
+ attribute_count_limit: 128,
157
+ };
158
+ }
159
+ const lengthLimit = (0, utils_1.getNumberFromConfigFile)(attrLimits['attribute_value_length_limit']);
160
+ if (lengthLimit) {
161
+ config.attribute_limits.attribute_value_length_limit = lengthLimit;
162
+ }
163
+ const countLimit = (0, utils_1.getNumberFromConfigFile)(attrLimits['attribute_count_limit']);
164
+ if (countLimit) {
165
+ config.attribute_limits.attribute_count_limit = countLimit;
166
+ }
167
+ }
168
+ }
169
+ exports.setAttributeLimits = setAttributeLimits;
170
+ function setPropagator(config, propagator) {
171
+ if (propagator && propagator.composite) {
172
+ const auxList = [];
173
+ const composite = [];
174
+ for (let i = 0; i < propagator.composite.length; i++) {
175
+ const key = Object.keys(propagator.composite[i])[0];
176
+ auxList.push(key);
177
+ composite.push({ [key]: null });
178
+ }
179
+ const compositeList = (0, utils_1.getStringListFromConfigFile)(propagator['composite_list']);
180
+ if (compositeList) {
181
+ for (let i = 0; i < compositeList.length; i++) {
182
+ if (!auxList.includes(compositeList[i])) {
183
+ composite.push({ [compositeList[i]]: null });
184
+ }
185
+ }
186
+ }
187
+ if (composite.length > 0) {
188
+ if (config.propagator == null) {
189
+ config.propagator = {};
190
+ }
191
+ config.propagator.composite = composite;
192
+ }
193
+ const compositeListString = (0, utils_1.getStringFromConfigFile)(propagator['composite_list']);
194
+ if (compositeListString) {
195
+ if (config.propagator == null) {
196
+ config.propagator = {};
197
+ }
198
+ config.propagator.composite_list = compositeListString;
199
+ }
200
+ }
201
+ }
202
+ exports.setPropagator = setPropagator;
203
+ function getConfigHeaders(h) {
204
+ if (h) {
205
+ const headers = [];
206
+ for (let i = 0; i < h.length; i++) {
207
+ const element = h[i];
208
+ headers.push({
209
+ name: element['name'],
210
+ value: element['value'],
211
+ });
212
+ }
213
+ if (headers.length > 0) {
214
+ return headers;
215
+ }
216
+ }
217
+ return null;
218
+ }
219
+ var ProviderType;
220
+ (function (ProviderType) {
221
+ ProviderType[ProviderType["TRACER"] = 0] = "TRACER";
222
+ ProviderType[ProviderType["METER"] = 1] = "METER";
223
+ ProviderType[ProviderType["LOGGER"] = 2] = "LOGGER";
224
+ })(ProviderType || (ProviderType = {}));
225
+ function parseConfigSpanOrLogRecordExporter(exporter, providerType) {
226
+ const exporterType = Object.keys(exporter)[0];
227
+ let parsedExporter = {};
228
+ let e;
229
+ let certFile;
230
+ let clientCertFile;
231
+ let clientKeyFile;
232
+ let compression;
233
+ let headers;
234
+ let headersList;
235
+ let insecure;
236
+ let endpoint;
237
+ switch (providerType) {
238
+ case ProviderType.TRACER:
239
+ endpoint = 'http://localhost:4318/v1/traces';
240
+ parsedExporter = parsedExporter;
241
+ break;
242
+ case ProviderType.LOGGER:
243
+ endpoint = 'http://localhost:4318/v1/logs';
244
+ parsedExporter = parsedExporter;
245
+ break;
246
+ }
247
+ switch (exporterType) {
248
+ case 'otlp_http':
249
+ e = exporter['otlp_http'];
250
+ if (e) {
251
+ parsedExporter = {
252
+ otlp_http: {
253
+ endpoint: (0, utils_1.getStringFromConfigFile)(e['endpoint']) ?? endpoint,
254
+ timeout: (0, utils_1.getNumberFromConfigFile)(e['timeout']) ?? 10000,
255
+ encoding: (0, utils_1.getStringFromConfigFile)(e['encoding']) === 'json'
256
+ ? commonModel_1.OtlpHttpEncoding.JSON
257
+ : commonModel_1.OtlpHttpEncoding.Protobuf,
258
+ },
259
+ };
260
+ certFile = (0, utils_1.getStringFromConfigFile)(e['certificate_file']);
261
+ if (certFile && parsedExporter.otlp_http) {
262
+ parsedExporter.otlp_http.certificate_file = certFile;
263
+ }
264
+ clientCertFile = (0, utils_1.getStringFromConfigFile)(e['client_certificate_file']);
265
+ if (clientCertFile && parsedExporter.otlp_http) {
266
+ parsedExporter.otlp_http.client_certificate_file = clientCertFile;
267
+ }
268
+ clientKeyFile = (0, utils_1.getStringFromConfigFile)(e['client_key_file']);
269
+ if (clientKeyFile && parsedExporter.otlp_http) {
270
+ parsedExporter.otlp_http.client_key_file = clientKeyFile;
271
+ }
272
+ compression = (0, utils_1.getStringFromConfigFile)(e['compression']);
273
+ if (compression && parsedExporter.otlp_http) {
274
+ parsedExporter.otlp_http.compression = compression;
275
+ }
276
+ headersList = (0, utils_1.getStringFromConfigFile)(e['headers_list']);
277
+ if (headersList && parsedExporter.otlp_http) {
278
+ parsedExporter.otlp_http.headers_list = headersList;
279
+ }
280
+ headers = getConfigHeaders(e['headers']);
281
+ if (headers && parsedExporter.otlp_http) {
282
+ parsedExporter.otlp_http.headers = headers;
283
+ }
284
+ }
285
+ break;
286
+ case 'otlp_grpc':
287
+ e = exporter['otlp_grpc'];
288
+ if (e) {
289
+ parsedExporter = {
290
+ otlp_grpc: {
291
+ endpoint: (0, utils_1.getStringFromConfigFile)(e['endpoint']) ?? 'http://localhost:4317',
292
+ timeout: (0, utils_1.getNumberFromConfigFile)(e['timeout']) ?? 10000,
293
+ },
294
+ };
295
+ certFile = (0, utils_1.getStringFromConfigFile)(e['certificate_file']);
296
+ if (certFile && parsedExporter.otlp_grpc) {
297
+ parsedExporter.otlp_grpc.certificate_file = certFile;
298
+ }
299
+ clientCertFile = (0, utils_1.getStringFromConfigFile)(e['client_certificate_file']);
300
+ if (clientCertFile && parsedExporter.otlp_grpc) {
301
+ parsedExporter.otlp_grpc.client_certificate_file = clientCertFile;
302
+ }
303
+ clientKeyFile = (0, utils_1.getStringFromConfigFile)(e['client_key_file']);
304
+ if (clientKeyFile && parsedExporter.otlp_grpc) {
305
+ parsedExporter.otlp_grpc.client_key_file = clientKeyFile;
306
+ }
307
+ compression = (0, utils_1.getStringFromConfigFile)(e['compression']);
308
+ if (compression && parsedExporter.otlp_grpc) {
309
+ parsedExporter.otlp_grpc.compression = compression;
310
+ }
311
+ headersList = (0, utils_1.getStringFromConfigFile)(e['headers_list']);
312
+ if (headersList && parsedExporter.otlp_grpc) {
313
+ parsedExporter.otlp_grpc.headers_list = headersList;
314
+ }
315
+ headers = getConfigHeaders(e['headers']);
316
+ if (headers && parsedExporter.otlp_grpc) {
317
+ parsedExporter.otlp_grpc.headers = headers;
318
+ }
319
+ insecure = (0, utils_1.getBooleanFromConfigFile)(e['insecure']);
320
+ if ((insecure || insecure === false) && parsedExporter.otlp_grpc) {
321
+ parsedExporter.otlp_grpc.insecure = insecure;
322
+ }
323
+ }
324
+ break;
325
+ case 'otlp_file/development':
326
+ e = exporter['otlp_file/development'];
327
+ if (e) {
328
+ parsedExporter = {
329
+ 'otlp_file/development': {
330
+ output_stream: (0, utils_1.getStringFromConfigFile)(e['output_stream']) ?? 'stdout',
331
+ },
332
+ };
333
+ }
334
+ break;
335
+ case 'console':
336
+ parsedExporter = {
337
+ console: {},
338
+ };
339
+ break;
340
+ case 'zipkin':
341
+ e = exporter['zipkin'];
342
+ if (e) {
343
+ parsedExporter = {
344
+ zipkin: {
345
+ endpoint: (0, utils_1.getStringFromConfigFile)(e['endpoint']) ??
346
+ 'http://localhost:9411/api/v2/spans',
347
+ timeout: (0, utils_1.getNumberFromConfigFile)(e['timeout']) ?? 10000,
348
+ },
349
+ };
350
+ }
351
+ break;
352
+ }
353
+ return parsedExporter;
354
+ }
355
+ function setTracerProvider(config, tracerProvider) {
356
+ if (tracerProvider && tracerProvider.processors?.length > 0) {
357
+ config.tracer_provider = (0, tracerProviderModel_1.initializeDefaultTracerProviderConfiguration)();
358
+ // Limits
359
+ if (tracerProvider['limits']) {
360
+ if (config.tracer_provider.limits == null) {
361
+ config.tracer_provider.limits = {};
362
+ }
363
+ const attributeValueLengthLimit = (0, utils_1.getNumberFromConfigFile)(tracerProvider['limits']['attribute_value_length_limit']);
364
+ if (attributeValueLengthLimit) {
365
+ config.tracer_provider.limits.attribute_value_length_limit =
366
+ attributeValueLengthLimit;
367
+ }
368
+ const attributeCountLimit = (0, utils_1.getNumberFromConfigFile)(tracerProvider['limits']['attribute_count_limit']);
369
+ if (attributeCountLimit) {
370
+ config.tracer_provider.limits.attribute_count_limit =
371
+ attributeCountLimit;
372
+ }
373
+ const eventCountLimit = (0, utils_1.getNumberFromConfigFile)(tracerProvider['limits']['event_count_limit']);
374
+ if (eventCountLimit) {
375
+ config.tracer_provider.limits.event_count_limit = eventCountLimit;
376
+ }
377
+ const linkCountLimit = (0, utils_1.getNumberFromConfigFile)(tracerProvider['limits']['link_count_limit']);
378
+ if (linkCountLimit) {
379
+ config.tracer_provider.limits.link_count_limit = linkCountLimit;
380
+ }
381
+ const eventAttributeCountLimit = (0, utils_1.getNumberFromConfigFile)(tracerProvider['limits']['event_attribute_count_limit']);
382
+ if (eventAttributeCountLimit) {
383
+ config.tracer_provider.limits.event_attribute_count_limit =
384
+ eventAttributeCountLimit;
385
+ }
386
+ const linkAttributeCountLimit = (0, utils_1.getNumberFromConfigFile)(tracerProvider['limits']['link_attribute_count_limit']);
387
+ if (linkAttributeCountLimit) {
388
+ config.tracer_provider.limits.link_attribute_count_limit =
389
+ linkAttributeCountLimit;
390
+ }
391
+ }
392
+ // Processors
393
+ for (let i = 0; i < tracerProvider['processors'].length; i++) {
394
+ const processorType = Object.keys(tracerProvider['processors'][i])[0];
395
+ if (processorType === 'batch') {
396
+ const element = tracerProvider['processors'][i]['batch'];
397
+ if (element) {
398
+ const parsedExporter = parseConfigSpanOrLogRecordExporter(element['exporter'], ProviderType.TRACER);
399
+ const batchConfig = {
400
+ batch: {
401
+ schedule_delay: (0, utils_1.getNumberFromConfigFile)(element['schedule_delay']) ?? 5000,
402
+ export_timeout: (0, utils_1.getNumberFromConfigFile)(element['export_timeout']) ?? 30000,
403
+ max_queue_size: (0, utils_1.getNumberFromConfigFile)(element['max_queue_size']) ?? 2048,
404
+ max_export_batch_size: (0, utils_1.getNumberFromConfigFile)(element['max_export_batch_size']) ??
405
+ 512,
406
+ exporter: parsedExporter,
407
+ },
408
+ };
409
+ config.tracer_provider.processors.push(batchConfig);
410
+ }
411
+ }
412
+ else if (processorType === 'simple') {
413
+ const element = tracerProvider['processors'][i]['simple'];
414
+ if (element) {
415
+ const parsedExporter = parseConfigSpanOrLogRecordExporter(element['exporter'], ProviderType.TRACER);
416
+ const simpleConfig = {
417
+ simple: {
418
+ exporter: parsedExporter,
419
+ },
420
+ };
421
+ config.tracer_provider.processors.push(simpleConfig);
422
+ }
423
+ }
424
+ }
425
+ }
426
+ else if (tracerProvider &&
427
+ (tracerProvider.processors == null ||
428
+ tracerProvider.processors.length === 0)) {
429
+ api_1.diag.warn('TracerProvider must have at least one processor configured');
430
+ }
431
+ }
432
+ exports.setTracerProvider = setTracerProvider;
433
+ function getCardinalityLimits(limits) {
434
+ if (limits == null) {
435
+ limits = {};
436
+ }
437
+ const defaultLimit = (0, utils_1.getNumberFromConfigFile)(limits['default']) ?? 2000;
438
+ return {
439
+ default: defaultLimit,
440
+ counter: (0, utils_1.getNumberFromConfigFile)(limits['counter']) ?? defaultLimit,
441
+ gauge: (0, utils_1.getNumberFromConfigFile)(limits['gauge']) ?? defaultLimit,
442
+ histogram: (0, utils_1.getNumberFromConfigFile)(limits['histogram']) ?? defaultLimit,
443
+ observable_counter: (0, utils_1.getNumberFromConfigFile)(limits['observable_counter']) ?? defaultLimit,
444
+ observable_gauge: (0, utils_1.getNumberFromConfigFile)(limits['observable_gauge']) ?? defaultLimit,
445
+ observable_up_down_counter: (0, utils_1.getNumberFromConfigFile)(limits['observable_up_down_counter']) ??
446
+ defaultLimit,
447
+ up_down_counter: (0, utils_1.getNumberFromConfigFile)(limits['up_down_counter']) ?? defaultLimit,
448
+ };
449
+ }
450
+ function getProducers(producers) {
451
+ const parsedProducers = [];
452
+ if (producers) {
453
+ for (let j = 0; j < producers.length; j++) {
454
+ const producer = producers[j];
455
+ if (Object.keys(producer)[0] === 'opencensus') {
456
+ parsedProducers.push({ opencensus: undefined });
457
+ }
458
+ if (Object.keys(producer)[0] === 'prometheus') {
459
+ parsedProducers.push({ prometheus: undefined });
460
+ }
461
+ }
462
+ }
463
+ return parsedProducers;
464
+ }
465
+ function getTemporalityPreference(temporalityPreference) {
466
+ const temporalityPreferenceType = (0, utils_1.getStringFromConfigFile)(temporalityPreference);
467
+ switch (temporalityPreferenceType) {
468
+ case 'cumulative':
469
+ return meterProviderModel_1.ExporterTemporalityPreference.Cumulative;
470
+ case 'delta':
471
+ return meterProviderModel_1.ExporterTemporalityPreference.Delta;
472
+ case 'low_memory':
473
+ return meterProviderModel_1.ExporterTemporalityPreference.LowMemory;
474
+ default:
475
+ return meterProviderModel_1.ExporterTemporalityPreference.Cumulative;
476
+ }
477
+ }
478
+ exports.getTemporalityPreference = getTemporalityPreference;
479
+ function getDefaultHistogramAggregation(defaultHistogramAggregation) {
480
+ const defaultHistogramAggregationType = (0, utils_1.getStringFromConfigFile)(defaultHistogramAggregation);
481
+ switch (defaultHistogramAggregationType) {
482
+ case 'explicit_bucket_histogram':
483
+ return meterProviderModel_1.ExporterDefaultHistogramAggregation.ExplicitBucketHistogram;
484
+ case 'base2_exponential_bucket_histogram':
485
+ return meterProviderModel_1.ExporterDefaultHistogramAggregation.Base2ExponentialBucketHistogram;
486
+ default:
487
+ return meterProviderModel_1.ExporterDefaultHistogramAggregation.ExplicitBucketHistogram;
488
+ }
489
+ }
490
+ function parseMetricExporter(exporter) {
491
+ const exporterType = Object.keys(exporter)[0];
492
+ let parsedExporter = {};
493
+ let e;
494
+ let certFile;
495
+ let clientCertFile;
496
+ let clientKeyFile;
497
+ let compression;
498
+ let headers;
499
+ let headersList;
500
+ let insecure;
501
+ switch (exporterType) {
502
+ case 'otlp_http':
503
+ e = exporter['otlp_http'];
504
+ if (e) {
505
+ parsedExporter = {
506
+ otlp_http: {
507
+ endpoint: (0, utils_1.getStringFromConfigFile)(e['endpoint']) ??
508
+ 'http://localhost:4318/v1/metrics',
509
+ timeout: (0, utils_1.getNumberFromConfigFile)(e['timeout']) ?? 10000,
510
+ encoding: (0, utils_1.getStringFromConfigFile)(e['encoding']) === 'json'
511
+ ? commonModel_1.OtlpHttpEncoding.JSON
512
+ : commonModel_1.OtlpHttpEncoding.Protobuf,
513
+ temporality_preference: getTemporalityPreference(e['temporality_preference']),
514
+ default_histogram_aggregation: getDefaultHistogramAggregation(e['default_histogram_aggregation']),
515
+ },
516
+ };
517
+ certFile = (0, utils_1.getStringFromConfigFile)(e['certificate_file']);
518
+ if (certFile && parsedExporter.otlp_http) {
519
+ parsedExporter.otlp_http.certificate_file = certFile;
520
+ }
521
+ clientCertFile = (0, utils_1.getStringFromConfigFile)(e['client_certificate_file']);
522
+ if (clientCertFile && parsedExporter.otlp_http) {
523
+ parsedExporter.otlp_http.client_certificate_file = clientCertFile;
524
+ }
525
+ clientKeyFile = (0, utils_1.getStringFromConfigFile)(e['client_key_file']);
526
+ if (clientKeyFile && parsedExporter.otlp_http) {
527
+ parsedExporter.otlp_http.client_key_file = clientKeyFile;
528
+ }
529
+ compression = (0, utils_1.getStringFromConfigFile)(e['compression']);
530
+ if (compression && parsedExporter.otlp_http) {
531
+ parsedExporter.otlp_http.compression = compression;
532
+ }
533
+ headersList = (0, utils_1.getStringFromConfigFile)(e['headers_list']);
534
+ if (headersList && parsedExporter.otlp_http) {
535
+ parsedExporter.otlp_http.headers_list = headersList;
536
+ }
537
+ headers = getConfigHeaders(e['headers']);
538
+ if (headers && parsedExporter.otlp_http) {
539
+ parsedExporter.otlp_http.headers = headers;
540
+ }
541
+ }
542
+ break;
543
+ case 'otlp_grpc':
544
+ e = exporter['otlp_grpc'];
545
+ if (e) {
546
+ parsedExporter = {
547
+ otlp_grpc: {
548
+ endpoint: (0, utils_1.getStringFromConfigFile)(e['endpoint']) ?? 'http://localhost:4317',
549
+ timeout: (0, utils_1.getNumberFromConfigFile)(e['timeout']) ?? 10000,
550
+ temporality_preference: getTemporalityPreference(e['temporality_preference']),
551
+ default_histogram_aggregation: getDefaultHistogramAggregation(e['default_histogram_aggregation']),
552
+ },
553
+ };
554
+ certFile = (0, utils_1.getStringFromConfigFile)(e['certificate_file']);
555
+ if (certFile && parsedExporter.otlp_grpc) {
556
+ parsedExporter.otlp_grpc.certificate_file = certFile;
557
+ }
558
+ clientCertFile = (0, utils_1.getStringFromConfigFile)(e['client_certificate_file']);
559
+ if (clientCertFile && parsedExporter.otlp_grpc) {
560
+ parsedExporter.otlp_grpc.client_certificate_file = clientCertFile;
561
+ }
562
+ clientKeyFile = (0, utils_1.getStringFromConfigFile)(e['client_key_file']);
563
+ if (clientKeyFile && parsedExporter.otlp_grpc) {
564
+ parsedExporter.otlp_grpc.client_key_file = clientKeyFile;
565
+ }
566
+ compression = (0, utils_1.getStringFromConfigFile)(e['compression']);
567
+ if (compression && parsedExporter.otlp_grpc) {
568
+ parsedExporter.otlp_grpc.compression = compression;
569
+ }
570
+ headersList = (0, utils_1.getStringFromConfigFile)(e['headers_list']);
571
+ if (headersList && parsedExporter.otlp_grpc) {
572
+ parsedExporter.otlp_grpc.headers_list = headersList;
573
+ }
574
+ headers = getConfigHeaders(e['headers']);
575
+ if (headers && parsedExporter.otlp_grpc) {
576
+ parsedExporter.otlp_grpc.headers = headers;
577
+ }
578
+ insecure = (0, utils_1.getBooleanFromConfigFile)(e['insecure']);
579
+ if ((insecure || insecure === false) && parsedExporter.otlp_grpc) {
580
+ parsedExporter.otlp_grpc.insecure = insecure;
581
+ }
582
+ }
583
+ break;
584
+ case 'otlp_file/development':
585
+ e = exporter['otlp_file/development'];
586
+ if (e) {
587
+ parsedExporter = {
588
+ 'otlp_file/development': {
589
+ output_stream: (0, utils_1.getStringFromConfigFile)(e['output_stream']) ?? 'stdout',
590
+ temporality_preference: getTemporalityPreference(e['temporality_preference']),
591
+ default_histogram_aggregation: getDefaultHistogramAggregation(e['default_histogram_aggregation']),
592
+ },
593
+ };
594
+ }
595
+ break;
596
+ case 'console':
597
+ parsedExporter = {
598
+ console: {},
599
+ };
600
+ break;
601
+ }
602
+ return parsedExporter;
603
+ }
604
+ function setMeterProvider(config, meterProvider) {
605
+ if (meterProvider && meterProvider.readers?.length > 0) {
606
+ config.meter_provider = (0, meterProviderModel_1.initializeDefaultMeterProviderConfiguration)();
607
+ const exemplarFilter = (0, utils_1.getStringFromConfigFile)(meterProvider['exemplar_filter']);
608
+ if (exemplarFilter) {
609
+ switch (exemplarFilter) {
610
+ case 'trace_based':
611
+ config.meter_provider.exemplar_filter = meterProviderModel_1.ExemplarFilter.TraceBased;
612
+ break;
613
+ case 'always_on':
614
+ config.meter_provider.exemplar_filter = meterProviderModel_1.ExemplarFilter.AlwaysOn;
615
+ break;
616
+ case 'always_off':
617
+ config.meter_provider.exemplar_filter = meterProviderModel_1.ExemplarFilter.AlwaysOff;
618
+ break;
619
+ default:
620
+ config.meter_provider.exemplar_filter = meterProviderModel_1.ExemplarFilter.TraceBased;
621
+ break;
622
+ }
623
+ }
624
+ for (let i = 0; i < meterProvider.readers.length; i++) {
625
+ const readerType = Object.keys(meterProvider['readers'][i])[0];
626
+ if (readerType === 'pull') {
627
+ const element = meterProvider['readers'][i]['pull'];
628
+ if (element) {
629
+ const exporter = {
630
+ 'prometheus/development': {
631
+ host: (0, utils_1.getStringFromConfigFile)(element['exporter']['prometheus/development']['host']) ?? 'localhost',
632
+ port: (0, utils_1.getNumberFromConfigFile)(element['exporter']['prometheus/development']['port']) ?? 9464,
633
+ without_scope_info: (0, utils_1.getBooleanFromConfigFile)(element['exporter']['prometheus/development']['without_scope_info']) ?? false,
634
+ with_resource_constant_labels: {
635
+ included: (0, utils_1.getStringListFromConfigFile)(element['exporter']['prometheus/development']['with_resource_constant_labels']['included']) ?? [],
636
+ excluded: (0, utils_1.getStringListFromConfigFile)(element['exporter']['prometheus/development']['with_resource_constant_labels']['excluded']) ?? [],
637
+ },
638
+ },
639
+ };
640
+ const pullReader = {
641
+ pull: {
642
+ exporter: exporter,
643
+ cardinality_limits: getCardinalityLimits(element['cardinality_limits']),
644
+ },
645
+ };
646
+ const p = getProducers(element['producers']);
647
+ if (p.length > 0 && pullReader.pull) {
648
+ pullReader.pull.producers = p;
649
+ }
650
+ config.meter_provider.readers.push(pullReader);
651
+ }
652
+ }
653
+ else if (readerType === 'periodic') {
654
+ const element = meterProvider['readers'][i]['periodic'];
655
+ if (element) {
656
+ const parsedExporter = parseMetricExporter(element['exporter']);
657
+ const periodicReader = {
658
+ periodic: {
659
+ exporter: parsedExporter,
660
+ cardinality_limits: getCardinalityLimits(element['cardinality_limits']),
661
+ interval: (0, utils_1.getNumberFromConfigFile)(element['interval']) ?? 60000,
662
+ timeout: (0, utils_1.getNumberFromConfigFile)(element['timeout']) ?? 30000,
663
+ },
664
+ };
665
+ const p = getProducers(element['producers']);
666
+ if (p.length > 0 && periodicReader.periodic) {
667
+ periodicReader.periodic.producers = p;
668
+ }
669
+ config.meter_provider.readers.push(periodicReader);
670
+ }
671
+ }
672
+ }
673
+ if (meterProvider['views'] && meterProvider['views'].length > 0) {
674
+ config.meter_provider.views = [];
675
+ for (let j = 0; j < meterProvider['views'].length; j++) {
676
+ const element = meterProvider['views'][j];
677
+ const view = {};
678
+ if (element['selector']) {
679
+ const selector = {};
680
+ const instrumentName = (0, utils_1.getStringFromConfigFile)(element['selector']['instrument_name']);
681
+ if (instrumentName) {
682
+ selector.instrument_name = instrumentName;
683
+ }
684
+ const unit = (0, utils_1.getStringFromConfigFile)(element['selector']['unit']);
685
+ if (unit) {
686
+ selector.unit = unit;
687
+ }
688
+ const meterName = (0, utils_1.getStringFromConfigFile)(element['selector']['meter_name']);
689
+ if (meterName) {
690
+ selector.meter_name = meterName;
691
+ }
692
+ const meterVersion = (0, utils_1.getStringFromConfigFile)(element['selector']['meter_version']);
693
+ if (meterVersion) {
694
+ selector.meter_version = meterVersion;
695
+ }
696
+ const meterSchemaUrl = (0, utils_1.getStringFromConfigFile)(element['selector']['meter_schema_url']);
697
+ if (meterSchemaUrl) {
698
+ selector.meter_schema_url = meterSchemaUrl;
699
+ }
700
+ const instrumentType = (0, utils_1.getStringFromConfigFile)(element['selector']['instrument_type']);
701
+ if (instrumentType) {
702
+ switch (instrumentType) {
703
+ case 'counter':
704
+ selector.instrument_type = meterProviderModel_1.InstrumentType.Counter;
705
+ break;
706
+ case 'gauge':
707
+ selector.instrument_type = meterProviderModel_1.InstrumentType.Gauge;
708
+ break;
709
+ case 'histogram':
710
+ selector.instrument_type = meterProviderModel_1.InstrumentType.Histogram;
711
+ break;
712
+ case 'observable_counter':
713
+ selector.instrument_type = meterProviderModel_1.InstrumentType.ObservableCounter;
714
+ break;
715
+ case 'observable_gauge':
716
+ selector.instrument_type = meterProviderModel_1.InstrumentType.ObservableGauge;
717
+ break;
718
+ case 'observable_up_down_counter':
719
+ selector.instrument_type =
720
+ meterProviderModel_1.InstrumentType.ObservableUpDownCounter;
721
+ break;
722
+ case 'up_down_counter':
723
+ selector.instrument_type = meterProviderModel_1.InstrumentType.UpDownCounter;
724
+ break;
725
+ }
726
+ }
727
+ if (Object.keys(selector).length > 0) {
728
+ view.selector = selector;
729
+ }
730
+ }
731
+ if (element['stream']) {
732
+ const stream = {};
733
+ const name = (0, utils_1.getStringFromConfigFile)(element['stream']['name']);
734
+ if (name) {
735
+ stream.name = name;
736
+ }
737
+ const description = (0, utils_1.getStringFromConfigFile)(element['stream']['description']);
738
+ if (description) {
739
+ stream.description = description;
740
+ }
741
+ const aggregationCardinalityLimit = (0, utils_1.getNumberFromConfigFile)(element['stream']['aggregation_cardinality_limit']);
742
+ if (aggregationCardinalityLimit) {
743
+ stream.aggregation_cardinality_limit = aggregationCardinalityLimit;
744
+ }
745
+ if (element['stream']['attribute_keys']) {
746
+ stream.attribute_keys = {
747
+ included: (0, utils_1.getStringListFromConfigFile)(element['stream']['attribute_keys']['included']) ?? [],
748
+ excluded: (0, utils_1.getStringListFromConfigFile)(element['stream']['attribute_keys']['excluded']) ?? [],
749
+ };
750
+ }
751
+ const rawAgg = element['stream']['aggregation'];
752
+ if (rawAgg) {
753
+ const aggregation = {};
754
+ if (rawAgg['default']) {
755
+ aggregation.default = {};
756
+ }
757
+ if (rawAgg['drop']) {
758
+ aggregation.drop = {};
759
+ }
760
+ if (rawAgg['last_value']) {
761
+ aggregation.last_value = {};
762
+ }
763
+ if (rawAgg['sum']) {
764
+ aggregation.sum = {};
765
+ }
766
+ if (rawAgg['explicit_bucket_histogram']) {
767
+ aggregation.explicit_bucket_histogram = {
768
+ boundaries: (0, utils_1.getNumberListFromConfigFile)(rawAgg['explicit_bucket_histogram']['boundaries']) ?? [
769
+ 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000,
770
+ 7500, 10000,
771
+ ],
772
+ record_min_max: (0, utils_1.getBooleanFromConfigFile)(rawAgg['explicit_bucket_histogram']['record_min_max']) === false
773
+ ? false
774
+ : true,
775
+ };
776
+ }
777
+ if (rawAgg['base2_exponential_bucket_histogram']) {
778
+ aggregation.base2_exponential_bucket_histogram = {
779
+ record_min_max: (0, utils_1.getBooleanFromConfigFile)(rawAgg['base2_exponential_bucket_histogram']['record_min_max']) === false
780
+ ? false
781
+ : true,
782
+ };
783
+ const maxScale = (0, utils_1.getNumberFromConfigFile)(rawAgg['base2_exponential_bucket_histogram']['max_scale']);
784
+ if (maxScale) {
785
+ aggregation.base2_exponential_bucket_histogram.max_scale =
786
+ maxScale;
787
+ }
788
+ const maxSize = (0, utils_1.getNumberFromConfigFile)(rawAgg['base2_exponential_bucket_histogram']['max_size']);
789
+ if (maxSize) {
790
+ aggregation.base2_exponential_bucket_histogram.max_size =
791
+ maxSize;
792
+ }
793
+ }
794
+ stream.aggregation = aggregation;
795
+ }
796
+ if (Object.keys(stream).length > 0) {
797
+ view.stream = stream;
798
+ }
799
+ }
800
+ config.meter_provider.views.push(view);
801
+ }
802
+ }
803
+ }
804
+ else if (meterProvider &&
805
+ (meterProvider.readers == null || meterProvider.readers.length === 0)) {
806
+ api_1.diag.warn('MeterProvider must have at least one reader configured');
807
+ }
808
+ }
809
+ exports.setMeterProvider = setMeterProvider;
810
+ function setLoggerProvider(config, loggerProvider) {
811
+ if (loggerProvider && loggerProvider.processors?.length > 0) {
812
+ config.logger_provider = (0, loggerProviderModel_1.initializeDefaultLoggerProviderConfiguration)();
813
+ // Limits
814
+ if (loggerProvider['limits']) {
815
+ const attributeValueLengthLimit = (0, utils_1.getNumberFromConfigFile)(loggerProvider['limits']['attribute_value_length_limit']);
816
+ const attributeCountLimit = (0, utils_1.getNumberFromConfigFile)(loggerProvider['limits']['attribute_count_limit']);
817
+ if (attributeValueLengthLimit || attributeCountLimit) {
818
+ if (config.logger_provider.limits == null) {
819
+ config.logger_provider.limits = { attribute_count_limit: 128 };
820
+ }
821
+ if (attributeValueLengthLimit) {
822
+ config.logger_provider.limits.attribute_value_length_limit =
823
+ attributeValueLengthLimit;
824
+ }
825
+ if (attributeCountLimit) {
826
+ config.logger_provider.limits.attribute_count_limit =
827
+ attributeCountLimit;
828
+ }
829
+ }
830
+ }
831
+ // Processors
832
+ for (let i = 0; i < loggerProvider['processors'].length; i++) {
833
+ const processorType = Object.keys(loggerProvider['processors'][i])[0];
834
+ if (processorType === 'batch') {
835
+ const element = loggerProvider['processors'][i]['batch'];
836
+ if (element) {
837
+ const parsedExporter = parseConfigSpanOrLogRecordExporter(element['exporter'], ProviderType.LOGGER);
838
+ const batchConfig = {
839
+ batch: {
840
+ schedule_delay: (0, utils_1.getNumberFromConfigFile)(element['schedule_delay']) ?? 1000,
841
+ export_timeout: (0, utils_1.getNumberFromConfigFile)(element['export_timeout']) ?? 30000,
842
+ max_queue_size: (0, utils_1.getNumberFromConfigFile)(element['max_queue_size']) ?? 2048,
843
+ max_export_batch_size: (0, utils_1.getNumberFromConfigFile)(element['max_export_batch_size']) ??
844
+ 512,
845
+ exporter: parsedExporter,
846
+ },
847
+ };
848
+ config.logger_provider.processors.push(batchConfig);
849
+ }
850
+ }
851
+ else if (processorType === 'simple') {
852
+ const element = loggerProvider['processors'][i]['simple'];
853
+ if (element) {
854
+ const parsedExporter = parseConfigSpanOrLogRecordExporter(element['exporter'], ProviderType.LOGGER);
855
+ const simpleConfig = {
856
+ simple: {
857
+ exporter: parsedExporter,
858
+ },
859
+ };
860
+ config.logger_provider.processors.push(simpleConfig);
861
+ }
862
+ }
863
+ }
864
+ // logger_configurator/development
865
+ if (loggerProvider['logger_configurator/development']) {
866
+ const defaultConfigDisabled = (0, utils_1.getBooleanFromConfigFile)(loggerProvider['logger_configurator/development']['default_config']?.['disabled']);
867
+ if (defaultConfigDisabled || defaultConfigDisabled === false) {
868
+ config.logger_provider['logger_configurator/development'] = {
869
+ default_config: {
870
+ disabled: defaultConfigDisabled,
871
+ },
872
+ };
873
+ }
874
+ if (loggerProvider['logger_configurator/development'].loggers &&
875
+ loggerProvider['logger_configurator/development'].loggers.length > 0) {
876
+ const loggers = [];
877
+ for (let i = 0; i < loggerProvider['logger_configurator/development'].loggers.length; i++) {
878
+ const logger = loggerProvider['logger_configurator/development'].loggers[i];
879
+ let disabled = false;
880
+ if (logger['config']) {
881
+ disabled =
882
+ (0, utils_1.getBooleanFromConfigFile)(logger['config']['disabled']) ?? false;
883
+ }
884
+ const name = (0, utils_1.getStringFromConfigFile)(logger['name']);
885
+ if (name) {
886
+ loggers.push({
887
+ name: name,
888
+ config: {
889
+ disabled: disabled,
890
+ },
891
+ });
892
+ }
893
+ }
894
+ if (config.logger_provider['logger_configurator/development'] == null) {
895
+ config.logger_provider['logger_configurator/development'] = {};
896
+ }
897
+ config.logger_provider['logger_configurator/development'].loggers =
898
+ loggers;
899
+ }
900
+ }
901
+ }
902
+ else if (loggerProvider &&
903
+ (loggerProvider.processors == null ||
904
+ loggerProvider.processors.length === 0)) {
905
+ api_1.diag.warn('LoggerProvider must have at least one processor configured');
906
+ }
907
+ }
908
+ exports.setLoggerProvider = setLoggerProvider;
909
+ //# sourceMappingURL=FileConfigFactory.js.map