UNPKG

9.93 kBJavaScriptView Raw
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 */
17Object.defineProperty(exports, "__esModule", { value: true });
18exports.getEnvWithoutDefaults = exports.parseEnvironment = exports.DEFAULT_ENVIRONMENT = exports.DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT = exports.DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT = exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT = exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = void 0;
19const api_1 = require("@opentelemetry/api");
20const sampling_1 = require("./sampling");
21const globalThis_1 = require("../platform/browser/globalThis");
22const DEFAULT_LIST_SEPARATOR = ',';
23/**
24 * Environment interface to define all names
25 */
26const ENVIRONMENT_BOOLEAN_KEYS = ['OTEL_SDK_DISABLED'];
27function isEnvVarABoolean(key) {
28 return (ENVIRONMENT_BOOLEAN_KEYS.indexOf(key) > -1);
29}
30const ENVIRONMENT_NUMBERS_KEYS = [
31 'OTEL_BSP_EXPORT_TIMEOUT',
32 'OTEL_BSP_MAX_EXPORT_BATCH_SIZE',
33 'OTEL_BSP_MAX_QUEUE_SIZE',
34 'OTEL_BSP_SCHEDULE_DELAY',
35 'OTEL_BLRP_EXPORT_TIMEOUT',
36 'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE',
37 'OTEL_BLRP_MAX_QUEUE_SIZE',
38 'OTEL_BLRP_SCHEDULE_DELAY',
39 'OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT',
40 'OTEL_ATTRIBUTE_COUNT_LIMIT',
41 'OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT',
42 'OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT',
43 'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT',
44 'OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT',
45 'OTEL_SPAN_EVENT_COUNT_LIMIT',
46 'OTEL_SPAN_LINK_COUNT_LIMIT',
47 'OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT',
48 'OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT',
49 'OTEL_EXPORTER_OTLP_TIMEOUT',
50 'OTEL_EXPORTER_OTLP_TRACES_TIMEOUT',
51 'OTEL_EXPORTER_OTLP_METRICS_TIMEOUT',
52 'OTEL_EXPORTER_OTLP_LOGS_TIMEOUT',
53 'OTEL_EXPORTER_JAEGER_AGENT_PORT',
54];
55function isEnvVarANumber(key) {
56 return (ENVIRONMENT_NUMBERS_KEYS.indexOf(key) > -1);
57}
58const ENVIRONMENT_LISTS_KEYS = [
59 'OTEL_NO_PATCH_MODULES',
60 'OTEL_PROPAGATORS',
61];
62function isEnvVarAList(key) {
63 return ENVIRONMENT_LISTS_KEYS.indexOf(key) > -1;
64}
65exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = Infinity;
66exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT = 128;
67exports.DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT = 128;
68exports.DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT = 128;
69/**
70 * Default environment variables
71 */
72exports.DEFAULT_ENVIRONMENT = {
73 OTEL_SDK_DISABLED: false,
74 CONTAINER_NAME: '',
75 ECS_CONTAINER_METADATA_URI_V4: '',
76 ECS_CONTAINER_METADATA_URI: '',
77 HOSTNAME: '',
78 KUBERNETES_SERVICE_HOST: '',
79 NAMESPACE: '',
80 OTEL_BSP_EXPORT_TIMEOUT: 30000,
81 OTEL_BSP_MAX_EXPORT_BATCH_SIZE: 512,
82 OTEL_BSP_MAX_QUEUE_SIZE: 2048,
83 OTEL_BSP_SCHEDULE_DELAY: 5000,
84 OTEL_BLRP_EXPORT_TIMEOUT: 30000,
85 OTEL_BLRP_MAX_EXPORT_BATCH_SIZE: 512,
86 OTEL_BLRP_MAX_QUEUE_SIZE: 2048,
87 OTEL_BLRP_SCHEDULE_DELAY: 5000,
88 OTEL_EXPORTER_JAEGER_AGENT_HOST: '',
89 OTEL_EXPORTER_JAEGER_AGENT_PORT: 6832,
90 OTEL_EXPORTER_JAEGER_ENDPOINT: '',
91 OTEL_EXPORTER_JAEGER_PASSWORD: '',
92 OTEL_EXPORTER_JAEGER_USER: '',
93 OTEL_EXPORTER_OTLP_ENDPOINT: '',
94 OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: '',
95 OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
96 OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: '',
97 OTEL_EXPORTER_OTLP_HEADERS: '',
98 OTEL_EXPORTER_OTLP_TRACES_HEADERS: '',
99 OTEL_EXPORTER_OTLP_METRICS_HEADERS: '',
100 OTEL_EXPORTER_OTLP_LOGS_HEADERS: '',
101 OTEL_EXPORTER_OTLP_TIMEOUT: 10000,
102 OTEL_EXPORTER_OTLP_TRACES_TIMEOUT: 10000,
103 OTEL_EXPORTER_OTLP_METRICS_TIMEOUT: 10000,
104 OTEL_EXPORTER_OTLP_LOGS_TIMEOUT: 10000,
105 OTEL_EXPORTER_ZIPKIN_ENDPOINT: 'http://localhost:9411/api/v2/spans',
106 OTEL_LOG_LEVEL: api_1.DiagLogLevel.INFO,
107 OTEL_NO_PATCH_MODULES: [],
108 OTEL_PROPAGATORS: ['tracecontext', 'baggage'],
109 OTEL_RESOURCE_ATTRIBUTES: '',
110 OTEL_SERVICE_NAME: '',
111 OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT: exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
112 OTEL_ATTRIBUTE_COUNT_LIMIT: exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT,
113 OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
114 OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT,
115 OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT: exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
116 OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT: exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT,
117 OTEL_SPAN_EVENT_COUNT_LIMIT: 128,
118 OTEL_SPAN_LINK_COUNT_LIMIT: 128,
119 OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT: exports.DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
120 OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT: exports.DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT,
121 OTEL_TRACES_EXPORTER: '',
122 OTEL_TRACES_SAMPLER: sampling_1.TracesSamplerValues.ParentBasedAlwaysOn,
123 OTEL_TRACES_SAMPLER_ARG: '',
124 OTEL_LOGS_EXPORTER: '',
125 OTEL_EXPORTER_OTLP_INSECURE: '',
126 OTEL_EXPORTER_OTLP_TRACES_INSECURE: '',
127 OTEL_EXPORTER_OTLP_METRICS_INSECURE: '',
128 OTEL_EXPORTER_OTLP_LOGS_INSECURE: '',
129 OTEL_EXPORTER_OTLP_CERTIFICATE: '',
130 OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE: '',
131 OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE: '',
132 OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE: '',
133 OTEL_EXPORTER_OTLP_COMPRESSION: '',
134 OTEL_EXPORTER_OTLP_TRACES_COMPRESSION: '',
135 OTEL_EXPORTER_OTLP_METRICS_COMPRESSION: '',
136 OTEL_EXPORTER_OTLP_LOGS_COMPRESSION: '',
137 OTEL_EXPORTER_OTLP_CLIENT_KEY: '',
138 OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY: '',
139 OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY: '',
140 OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY: '',
141 OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE: '',
142 OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE: '',
143 OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE: '',
144 OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE: '',
145 OTEL_EXPORTER_OTLP_PROTOCOL: 'http/protobuf',
146 OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: 'http/protobuf',
147 OTEL_EXPORTER_OTLP_METRICS_PROTOCOL: 'http/protobuf',
148 OTEL_EXPORTER_OTLP_LOGS_PROTOCOL: 'http/protobuf',
149 OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: 'cumulative',
150};
151/**
152 * @param key
153 * @param environment
154 * @param values
155 */
156function parseBoolean(key, environment, values) {
157 if (typeof values[key] === 'undefined') {
158 return;
159 }
160 const value = String(values[key]);
161 // support case-insensitive "true"
162 environment[key] = value.toLowerCase() === 'true';
163}
164/**
165 * Parses a variable as number with number validation
166 * @param name
167 * @param environment
168 * @param values
169 * @param min
170 * @param max
171 */
172function parseNumber(name, environment, values, min = -Infinity, max = Infinity) {
173 if (typeof values[name] !== 'undefined') {
174 const value = Number(values[name]);
175 if (!isNaN(value)) {
176 if (value < min) {
177 environment[name] = min;
178 }
179 else if (value > max) {
180 environment[name] = max;
181 }
182 else {
183 environment[name] = value;
184 }
185 }
186 }
187}
188/**
189 * Parses list-like strings from input into output.
190 * @param name
191 * @param environment
192 * @param values
193 * @param separator
194 */
195function parseStringList(name, output, input, separator = DEFAULT_LIST_SEPARATOR) {
196 const givenValue = input[name];
197 if (typeof givenValue === 'string') {
198 output[name] = givenValue.split(separator).map(v => v.trim());
199 }
200}
201// The support string -> DiagLogLevel mappings
202const logLevelMap = {
203 ALL: api_1.DiagLogLevel.ALL,
204 VERBOSE: api_1.DiagLogLevel.VERBOSE,
205 DEBUG: api_1.DiagLogLevel.DEBUG,
206 INFO: api_1.DiagLogLevel.INFO,
207 WARN: api_1.DiagLogLevel.WARN,
208 ERROR: api_1.DiagLogLevel.ERROR,
209 NONE: api_1.DiagLogLevel.NONE,
210};
211/**
212 * Environmentally sets log level if valid log level string is provided
213 * @param key
214 * @param environment
215 * @param values
216 */
217function setLogLevelFromEnv(key, environment, values) {
218 const value = values[key];
219 if (typeof value === 'string') {
220 const theLevel = logLevelMap[value.toUpperCase()];
221 if (theLevel != null) {
222 environment[key] = theLevel;
223 }
224 }
225}
226/**
227 * Parses environment values
228 * @param values
229 */
230function parseEnvironment(values) {
231 const environment = {};
232 for (const env in exports.DEFAULT_ENVIRONMENT) {
233 const key = env;
234 switch (key) {
235 case 'OTEL_LOG_LEVEL':
236 setLogLevelFromEnv(key, environment, values);
237 break;
238 default:
239 if (isEnvVarABoolean(key)) {
240 parseBoolean(key, environment, values);
241 }
242 else if (isEnvVarANumber(key)) {
243 parseNumber(key, environment, values);
244 }
245 else if (isEnvVarAList(key)) {
246 parseStringList(key, environment, values);
247 }
248 else {
249 const value = values[key];
250 if (typeof value !== 'undefined' && value !== null) {
251 environment[key] = String(value);
252 }
253 }
254 }
255 }
256 return environment;
257}
258exports.parseEnvironment = parseEnvironment;
259/**
260 * Get environment in node or browser without
261 * populating default values.
262 */
263function getEnvWithoutDefaults() {
264 return typeof process !== 'undefined' && process && process.env
265 ? parseEnvironment(process.env)
266 : parseEnvironment(globalThis_1._globalThis);
267}
268exports.getEnvWithoutDefaults = getEnvWithoutDefaults;
269//# sourceMappingURL=environment.js.map
\No newline at end of file