feat(core): drop getEnv(), getEnvWithoutDefaults() (#5481)
This commit is contained in:
parent
d004d41b5a
commit
faeae98653
|
@ -110,6 +110,14 @@ For semantic convention package changes, see the [semconv CHANGELOG](packages/se
|
|||
* (user-facing): all configuration previously possible via `window.OTEL_*` is now not supported anymore
|
||||
* If you have been using the `envDetector` in browser environments, please migrate to manually creating a resource.
|
||||
* Note: Node.js environment variable configuration continues to work as-is.
|
||||
* feat(core)!: drop `getEnv()`, `getEnvWithoutDefaults()` [#5481](https://github.com/open-telemetry/opentelemetry-js/pull/5481) @pichlermarc
|
||||
* (user-facing): `getEnv()` has been replaced by `getStringFromEnv()`, `getNumberFromEnv()`, `getBooleanFromEnv()`, `getStringListFromEnv()`
|
||||
* these new functions do not include defaults, please inline any defaults if necessary (example: `getStringFromEnv("OTEL_FOO") ?? "my-default"`)
|
||||
* (user-facing): `getEnvWithoutDefaults()` has been replaced by `getStringFromEnv()`, `getNumberFromEnv()`, `getBooleanFromEnv()`, `getStringListFromEnv()`
|
||||
* (user-facing): `DEFAULT_ENVIRONMENT` has been removed, please inline any defaults from now on
|
||||
* (user-facing): `ENVIRONMENT` has been removed without replacement
|
||||
* (user-facing): `RAW_ENVIRONMENT` has been removed without replacement
|
||||
* (user-facing): `parseEnvironment` has been removed without replacement
|
||||
|
||||
### :rocket: (Enhancement)
|
||||
|
||||
|
|
|
@ -42,8 +42,6 @@ export { parseKeyPairsIntoRecord } from './baggage/utils';
|
|||
export {
|
||||
SDK_INFO,
|
||||
_globalThis,
|
||||
getEnv,
|
||||
getEnvWithoutDefaults,
|
||||
getStringFromEnv,
|
||||
getBooleanFromEnv,
|
||||
getNumberFromEnv,
|
||||
|
@ -77,12 +75,8 @@ export { TraceState } from './trace/TraceState';
|
|||
export {
|
||||
DEFAULT_ATTRIBUTE_COUNT_LIMIT,
|
||||
DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
||||
DEFAULT_ENVIRONMENT,
|
||||
DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
|
||||
DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT,
|
||||
ENVIRONMENT,
|
||||
RAW_ENVIRONMENT,
|
||||
parseEnvironment,
|
||||
} from './utils/environment';
|
||||
export { merge } from './utils/merge';
|
||||
export { TimeoutError, callWithTimeout } from './utils/timeout';
|
||||
|
|
|
@ -14,24 +14,6 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
DEFAULT_ENVIRONMENT,
|
||||
ENVIRONMENT,
|
||||
RAW_ENVIRONMENT,
|
||||
parseEnvironment,
|
||||
} from '../../utils/environment';
|
||||
import { _globalThis } from './globalThis';
|
||||
|
||||
/**
|
||||
* Gets the environment variables
|
||||
*/
|
||||
export function getEnv(): Required<ENVIRONMENT> {
|
||||
const globalEnv = parseEnvironment(
|
||||
_globalThis as typeof globalThis & RAW_ENVIRONMENT
|
||||
);
|
||||
return Object.assign({}, DEFAULT_ENVIRONMENT, globalEnv);
|
||||
}
|
||||
|
||||
export function getStringFromEnv(_: string): string | undefined {
|
||||
return undefined;
|
||||
}
|
||||
|
@ -47,7 +29,3 @@ export function getNumberFromEnv(_: string): boolean | undefined {
|
|||
export function getStringListFromEnv(_: string): string[] | undefined {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function getEnvWithoutDefaults(): ENVIRONMENT {
|
||||
return parseEnvironment(_globalThis as typeof globalThis & RAW_ENVIRONMENT);
|
||||
}
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
*/
|
||||
|
||||
export {
|
||||
getEnvWithoutDefaults,
|
||||
getEnv,
|
||||
getStringFromEnv,
|
||||
getBooleanFromEnv,
|
||||
getNumberFromEnv,
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
export {
|
||||
SDK_INFO,
|
||||
_globalThis,
|
||||
getEnv,
|
||||
getEnvWithoutDefaults,
|
||||
otperformance,
|
||||
unrefTimer,
|
||||
getBooleanFromEnv,
|
||||
|
|
|
@ -14,23 +14,9 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
DEFAULT_ENVIRONMENT,
|
||||
ENVIRONMENT,
|
||||
RAW_ENVIRONMENT,
|
||||
parseEnvironment,
|
||||
} from '../../utils/environment';
|
||||
import { diag } from '@opentelemetry/api';
|
||||
import { inspect } from 'util';
|
||||
|
||||
/**
|
||||
* Gets the environment variables
|
||||
*/
|
||||
export function getEnv(): Required<ENVIRONMENT> {
|
||||
const processEnv = parseEnvironment(process.env as RAW_ENVIRONMENT);
|
||||
return Object.assign({}, DEFAULT_ENVIRONMENT, processEnv);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a number from an environment variable.
|
||||
* - Returns `undefined` if the environment variable is empty, unset, contains only whitespace, or is not a number.
|
||||
|
@ -117,7 +103,3 @@ export function getStringListFromEnv(key: string): string[] | undefined {
|
|||
.map(v => v.trim())
|
||||
.filter(s => s !== '');
|
||||
}
|
||||
|
||||
export function getEnvWithoutDefaults(): ENVIRONMENT {
|
||||
return parseEnvironment(process.env as RAW_ENVIRONMENT);
|
||||
}
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
*/
|
||||
|
||||
export {
|
||||
getEnvWithoutDefaults,
|
||||
getEnv,
|
||||
getStringFromEnv,
|
||||
getBooleanFromEnv,
|
||||
getNumberFromEnv,
|
||||
|
|
|
@ -14,358 +14,9 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { DiagLogLevel } from '@opentelemetry/api';
|
||||
|
||||
const DEFAULT_LIST_SEPARATOR = ',';
|
||||
|
||||
/**
|
||||
* Environment interface to define all names
|
||||
*/
|
||||
|
||||
const ENVIRONMENT_BOOLEAN_KEYS = ['OTEL_SDK_DISABLED'] as const;
|
||||
|
||||
type ENVIRONMENT_BOOLEANS = {
|
||||
[K in (typeof ENVIRONMENT_BOOLEAN_KEYS)[number]]?: boolean;
|
||||
};
|
||||
|
||||
function isEnvVarABoolean(key: unknown): key is keyof ENVIRONMENT_BOOLEANS {
|
||||
return (
|
||||
ENVIRONMENT_BOOLEAN_KEYS.indexOf(key as keyof ENVIRONMENT_BOOLEANS) > -1
|
||||
);
|
||||
}
|
||||
|
||||
const ENVIRONMENT_NUMBERS_KEYS = [
|
||||
'OTEL_BSP_EXPORT_TIMEOUT',
|
||||
'OTEL_BSP_MAX_EXPORT_BATCH_SIZE',
|
||||
'OTEL_BSP_MAX_QUEUE_SIZE',
|
||||
'OTEL_BSP_SCHEDULE_DELAY',
|
||||
'OTEL_BLRP_EXPORT_TIMEOUT',
|
||||
'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE',
|
||||
'OTEL_BLRP_MAX_QUEUE_SIZE',
|
||||
'OTEL_BLRP_SCHEDULE_DELAY',
|
||||
'OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT',
|
||||
'OTEL_ATTRIBUTE_COUNT_LIMIT',
|
||||
'OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT',
|
||||
'OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT',
|
||||
'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT',
|
||||
'OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT',
|
||||
'OTEL_SPAN_EVENT_COUNT_LIMIT',
|
||||
'OTEL_SPAN_LINK_COUNT_LIMIT',
|
||||
'OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT',
|
||||
'OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT',
|
||||
'OTEL_EXPORTER_OTLP_TIMEOUT',
|
||||
'OTEL_EXPORTER_OTLP_TRACES_TIMEOUT',
|
||||
'OTEL_EXPORTER_OTLP_METRICS_TIMEOUT',
|
||||
'OTEL_EXPORTER_OTLP_LOGS_TIMEOUT',
|
||||
'OTEL_EXPORTER_JAEGER_AGENT_PORT',
|
||||
] as const;
|
||||
|
||||
type ENVIRONMENT_NUMBERS = {
|
||||
[K in (typeof ENVIRONMENT_NUMBERS_KEYS)[number]]?: number;
|
||||
};
|
||||
|
||||
function isEnvVarANumber(key: unknown): key is keyof ENVIRONMENT_NUMBERS {
|
||||
return (
|
||||
ENVIRONMENT_NUMBERS_KEYS.indexOf(key as keyof ENVIRONMENT_NUMBERS) > -1
|
||||
);
|
||||
}
|
||||
|
||||
const ENVIRONMENT_LISTS_KEYS = [
|
||||
'OTEL_NO_PATCH_MODULES',
|
||||
'OTEL_PROPAGATORS',
|
||||
'OTEL_SEMCONV_STABILITY_OPT_IN',
|
||||
] as const;
|
||||
|
||||
type ENVIRONMENT_LISTS = {
|
||||
[K in (typeof ENVIRONMENT_LISTS_KEYS)[number]]?: string[];
|
||||
};
|
||||
|
||||
function isEnvVarAList(key: unknown): key is keyof ENVIRONMENT_LISTS {
|
||||
return ENVIRONMENT_LISTS_KEYS.indexOf(key as keyof ENVIRONMENT_LISTS) > -1;
|
||||
}
|
||||
|
||||
export type ENVIRONMENT = {
|
||||
CONTAINER_NAME?: string;
|
||||
ECS_CONTAINER_METADATA_URI_V4?: string;
|
||||
ECS_CONTAINER_METADATA_URI?: string;
|
||||
HOSTNAME?: string;
|
||||
KUBERNETES_SERVICE_HOST?: string;
|
||||
NAMESPACE?: string;
|
||||
OTEL_EXPORTER_JAEGER_AGENT_HOST?: string;
|
||||
OTEL_EXPORTER_JAEGER_ENDPOINT?: string;
|
||||
OTEL_EXPORTER_JAEGER_PASSWORD?: string;
|
||||
OTEL_EXPORTER_JAEGER_USER?: string;
|
||||
OTEL_EXPORTER_OTLP_ENDPOINT?: string;
|
||||
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT?: string;
|
||||
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT?: string;
|
||||
OTEL_EXPORTER_OTLP_HEADERS?: string;
|
||||
OTEL_EXPORTER_OTLP_TRACES_HEADERS?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_HEADERS?: string;
|
||||
OTEL_EXPORTER_OTLP_LOGS_HEADERS?: string;
|
||||
OTEL_EXPORTER_ZIPKIN_ENDPOINT?: string;
|
||||
OTEL_LOG_LEVEL?: DiagLogLevel;
|
||||
OTEL_RESOURCE_ATTRIBUTES?: string;
|
||||
OTEL_SERVICE_NAME?: string;
|
||||
OTEL_TRACES_EXPORTER?: string;
|
||||
OTEL_TRACES_SAMPLER_ARG?: string;
|
||||
OTEL_TRACES_SAMPLER?: string;
|
||||
OTEL_LOGS_EXPORTER?: string;
|
||||
OTEL_EXPORTER_OTLP_INSECURE?: string;
|
||||
OTEL_EXPORTER_OTLP_TRACES_INSECURE?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_INSECURE?: string;
|
||||
OTEL_EXPORTER_OTLP_LOGS_INSECURE?: string;
|
||||
OTEL_EXPORTER_OTLP_CERTIFICATE?: string;
|
||||
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE?: string;
|
||||
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE?: string;
|
||||
OTEL_EXPORTER_OTLP_COMPRESSION?: string;
|
||||
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION?: string;
|
||||
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION?: string;
|
||||
OTEL_EXPORTER_OTLP_CLIENT_KEY?: string;
|
||||
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY?: string;
|
||||
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY?: string;
|
||||
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE?: string;
|
||||
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE?: string;
|
||||
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE?: string;
|
||||
OTEL_EXPORTER_OTLP_PROTOCOL?: string;
|
||||
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL?: string;
|
||||
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL?: string;
|
||||
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE?: string;
|
||||
} & ENVIRONMENT_BOOLEANS &
|
||||
ENVIRONMENT_NUMBERS &
|
||||
ENVIRONMENT_LISTS;
|
||||
|
||||
export type RAW_ENVIRONMENT = {
|
||||
[key: string]: string | number | undefined | string[];
|
||||
};
|
||||
|
||||
export const DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = Infinity;
|
||||
|
||||
export const DEFAULT_ATTRIBUTE_COUNT_LIMIT = 128;
|
||||
|
||||
export const DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT = 128;
|
||||
export const DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT = 128;
|
||||
|
||||
/**
|
||||
* Default environment variables
|
||||
*/
|
||||
export const DEFAULT_ENVIRONMENT: Required<ENVIRONMENT> = {
|
||||
OTEL_SDK_DISABLED: false,
|
||||
CONTAINER_NAME: '',
|
||||
ECS_CONTAINER_METADATA_URI_V4: '',
|
||||
ECS_CONTAINER_METADATA_URI: '',
|
||||
HOSTNAME: '',
|
||||
KUBERNETES_SERVICE_HOST: '',
|
||||
NAMESPACE: '',
|
||||
OTEL_BSP_EXPORT_TIMEOUT: 30000,
|
||||
OTEL_BSP_MAX_EXPORT_BATCH_SIZE: 512,
|
||||
OTEL_BSP_MAX_QUEUE_SIZE: 2048,
|
||||
OTEL_BSP_SCHEDULE_DELAY: 5000,
|
||||
OTEL_BLRP_EXPORT_TIMEOUT: 30000,
|
||||
OTEL_BLRP_MAX_EXPORT_BATCH_SIZE: 512,
|
||||
OTEL_BLRP_MAX_QUEUE_SIZE: 2048,
|
||||
OTEL_BLRP_SCHEDULE_DELAY: 5000,
|
||||
OTEL_EXPORTER_JAEGER_AGENT_HOST: '',
|
||||
OTEL_EXPORTER_JAEGER_AGENT_PORT: 6832,
|
||||
OTEL_EXPORTER_JAEGER_ENDPOINT: '',
|
||||
OTEL_EXPORTER_JAEGER_PASSWORD: '',
|
||||
OTEL_EXPORTER_JAEGER_USER: '',
|
||||
OTEL_EXPORTER_OTLP_ENDPOINT: '',
|
||||
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: '',
|
||||
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: '',
|
||||
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: '',
|
||||
OTEL_EXPORTER_OTLP_HEADERS: '',
|
||||
OTEL_EXPORTER_OTLP_TRACES_HEADERS: '',
|
||||
OTEL_EXPORTER_OTLP_METRICS_HEADERS: '',
|
||||
OTEL_EXPORTER_OTLP_LOGS_HEADERS: '',
|
||||
OTEL_EXPORTER_OTLP_TIMEOUT: 10000,
|
||||
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT: 10000,
|
||||
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT: 10000,
|
||||
OTEL_EXPORTER_OTLP_LOGS_TIMEOUT: 10000,
|
||||
OTEL_EXPORTER_ZIPKIN_ENDPOINT: 'http://localhost:9411/api/v2/spans',
|
||||
OTEL_LOG_LEVEL: DiagLogLevel.INFO,
|
||||
OTEL_NO_PATCH_MODULES: [],
|
||||
OTEL_PROPAGATORS: ['tracecontext', 'baggage'],
|
||||
OTEL_RESOURCE_ATTRIBUTES: '',
|
||||
OTEL_SERVICE_NAME: '',
|
||||
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT: DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
||||
OTEL_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,
|
||||
OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
||||
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,
|
||||
OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:
|
||||
DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
||||
OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT: DEFAULT_ATTRIBUTE_COUNT_LIMIT,
|
||||
OTEL_SPAN_EVENT_COUNT_LIMIT: 128,
|
||||
OTEL_SPAN_LINK_COUNT_LIMIT: 128,
|
||||
OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:
|
||||
DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
|
||||
OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:
|
||||
DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT,
|
||||
OTEL_TRACES_EXPORTER: '',
|
||||
OTEL_TRACES_SAMPLER: 'parentbased_always_on',
|
||||
OTEL_TRACES_SAMPLER_ARG: '',
|
||||
OTEL_LOGS_EXPORTER: '',
|
||||
OTEL_EXPORTER_OTLP_INSECURE: '',
|
||||
OTEL_EXPORTER_OTLP_TRACES_INSECURE: '',
|
||||
OTEL_EXPORTER_OTLP_METRICS_INSECURE: '',
|
||||
OTEL_EXPORTER_OTLP_LOGS_INSECURE: '',
|
||||
OTEL_EXPORTER_OTLP_CERTIFICATE: '',
|
||||
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE: '',
|
||||
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE: '',
|
||||
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE: '',
|
||||
OTEL_EXPORTER_OTLP_COMPRESSION: '',
|
||||
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION: '',
|
||||
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION: '',
|
||||
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION: '',
|
||||
OTEL_EXPORTER_OTLP_CLIENT_KEY: '',
|
||||
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY: '',
|
||||
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY: '',
|
||||
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY: '',
|
||||
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE: '',
|
||||
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE: '',
|
||||
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE: '',
|
||||
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE: '',
|
||||
OTEL_EXPORTER_OTLP_PROTOCOL: 'http/protobuf',
|
||||
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: 'http/protobuf',
|
||||
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL: 'http/protobuf',
|
||||
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL: 'http/protobuf',
|
||||
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE: 'cumulative',
|
||||
OTEL_SEMCONV_STABILITY_OPT_IN: [],
|
||||
};
|
||||
|
||||
/**
|
||||
* @param key
|
||||
* @param environment
|
||||
* @param values
|
||||
*/
|
||||
function parseBoolean(
|
||||
key: keyof ENVIRONMENT_BOOLEANS,
|
||||
environment: ENVIRONMENT,
|
||||
values: RAW_ENVIRONMENT
|
||||
) {
|
||||
if (typeof values[key] === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
const value = String(values[key]);
|
||||
// support case-insensitive "true"
|
||||
environment[key] = value.toLowerCase() === 'true';
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a variable as number with number validation
|
||||
* @param name
|
||||
* @param environment
|
||||
* @param values
|
||||
* @param min
|
||||
* @param max
|
||||
*/
|
||||
function parseNumber(
|
||||
name: keyof ENVIRONMENT_NUMBERS,
|
||||
environment: ENVIRONMENT,
|
||||
values: RAW_ENVIRONMENT,
|
||||
min = -Infinity,
|
||||
max = Infinity
|
||||
) {
|
||||
if (typeof values[name] !== 'undefined') {
|
||||
const value = Number(values[name] as string);
|
||||
if (!isNaN(value)) {
|
||||
if (value < min) {
|
||||
environment[name] = min;
|
||||
} else if (value > max) {
|
||||
environment[name] = max;
|
||||
} else {
|
||||
environment[name] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses list-like strings from input into output.
|
||||
* @param name
|
||||
* @param environment
|
||||
* @param values
|
||||
* @param separator
|
||||
*/
|
||||
function parseStringList(
|
||||
name: keyof ENVIRONMENT_LISTS,
|
||||
output: ENVIRONMENT,
|
||||
input: RAW_ENVIRONMENT,
|
||||
separator = DEFAULT_LIST_SEPARATOR
|
||||
) {
|
||||
const givenValue = input[name];
|
||||
if (typeof givenValue === 'string') {
|
||||
output[name] = givenValue.split(separator).map(v => v.trim());
|
||||
}
|
||||
}
|
||||
|
||||
// The support string -> DiagLogLevel mappings
|
||||
const logLevelMap: { [key: string]: DiagLogLevel } = {
|
||||
ALL: DiagLogLevel.ALL,
|
||||
VERBOSE: DiagLogLevel.VERBOSE,
|
||||
DEBUG: DiagLogLevel.DEBUG,
|
||||
INFO: DiagLogLevel.INFO,
|
||||
WARN: DiagLogLevel.WARN,
|
||||
ERROR: DiagLogLevel.ERROR,
|
||||
NONE: DiagLogLevel.NONE,
|
||||
};
|
||||
|
||||
/**
|
||||
* Environmentally sets log level if valid log level string is provided
|
||||
* @param key
|
||||
* @param environment
|
||||
* @param values
|
||||
*/
|
||||
function setLogLevelFromEnv(
|
||||
key: keyof ENVIRONMENT,
|
||||
environment: RAW_ENVIRONMENT | ENVIRONMENT,
|
||||
values: RAW_ENVIRONMENT
|
||||
) {
|
||||
const value = values[key];
|
||||
if (typeof value === 'string') {
|
||||
const theLevel = logLevelMap[value.toUpperCase()];
|
||||
if (theLevel != null) {
|
||||
environment[key] = theLevel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses environment values
|
||||
* @param values
|
||||
*/
|
||||
export function parseEnvironment(values: RAW_ENVIRONMENT): ENVIRONMENT {
|
||||
const environment: ENVIRONMENT = {};
|
||||
|
||||
for (const env in DEFAULT_ENVIRONMENT) {
|
||||
const key = env as keyof ENVIRONMENT;
|
||||
|
||||
switch (key) {
|
||||
case 'OTEL_LOG_LEVEL':
|
||||
setLogLevelFromEnv(key, environment, values);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (isEnvVarABoolean(key)) {
|
||||
parseBoolean(key, environment, values);
|
||||
} else if (isEnvVarANumber(key)) {
|
||||
parseNumber(key, environment, values);
|
||||
} else if (isEnvVarAList(key)) {
|
||||
parseStringList(key, environment, values);
|
||||
} else {
|
||||
const value = values[key];
|
||||
if (typeof value !== 'undefined' && value !== null) {
|
||||
environment[key] = String(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return environment;
|
||||
}
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { getEnv } from '../../src/platform/browser/environment';
|
||||
|
||||
describe('getEnv', () => {
|
||||
it('get environments variables in a browser', () => {
|
||||
const env = getEnv();
|
||||
assert.strictEqual(typeof env, 'object');
|
||||
});
|
||||
});
|
|
@ -1,193 +0,0 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { getEnv } from '../../../src/platform';
|
||||
import {
|
||||
DEFAULT_ENVIRONMENT,
|
||||
ENVIRONMENT,
|
||||
RAW_ENVIRONMENT,
|
||||
} from '../../../src/utils/environment';
|
||||
import * as assert from 'assert';
|
||||
import * as sinon from 'sinon';
|
||||
import { DiagLogLevel } from '@opentelemetry/api';
|
||||
|
||||
let lastMock: RAW_ENVIRONMENT = {};
|
||||
|
||||
/**
|
||||
* Mocks environment used for tests.
|
||||
*/
|
||||
export function mockEnvironment(values: RAW_ENVIRONMENT) {
|
||||
lastMock = values;
|
||||
|
||||
if (global.process?.versions?.node !== undefined) {
|
||||
Object.keys(values).forEach(key => {
|
||||
process.env[key] = String(values[key]);
|
||||
});
|
||||
} else {
|
||||
Object.keys(values).forEach(key => {
|
||||
(window as unknown as RAW_ENVIRONMENT)[key] = String(values[key]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes mocked environment used for tests.
|
||||
*/
|
||||
export function removeMockEnvironment() {
|
||||
if (global.process?.versions?.node !== undefined) {
|
||||
Object.keys(lastMock).forEach(key => {
|
||||
delete process.env[key];
|
||||
});
|
||||
} else {
|
||||
Object.keys(lastMock).forEach(key => {
|
||||
delete (window as unknown as RAW_ENVIRONMENT)[key];
|
||||
});
|
||||
}
|
||||
lastMock = {};
|
||||
}
|
||||
|
||||
describe('environment', () => {
|
||||
afterEach(() => {
|
||||
removeMockEnvironment();
|
||||
sinon.restore();
|
||||
});
|
||||
|
||||
describe('parseEnvironment', () => {
|
||||
it('should parse environment variables', () => {
|
||||
mockEnvironment({
|
||||
CONTAINER_NAME: 'container-1',
|
||||
ECS_CONTAINER_METADATA_URI_V4: 'https://ecs.uri/v4',
|
||||
ECS_CONTAINER_METADATA_URI: 'https://ecs.uri/',
|
||||
FOO: '1',
|
||||
HOSTNAME: 'hostname',
|
||||
KUBERNETES_SERVICE_HOST: 'https://k8s.host/',
|
||||
NAMESPACE: 'namespace',
|
||||
OTEL_SDK_DISABLED: 'true',
|
||||
OTEL_BSP_MAX_EXPORT_BATCH_SIZE: 40,
|
||||
OTEL_BSP_SCHEDULE_DELAY: 50,
|
||||
OTEL_EXPORTER_JAEGER_AGENT_HOST: 'host.domain.com',
|
||||
OTEL_EXPORTER_JAEGER_AGENT_PORT: 1234,
|
||||
OTEL_EXPORTER_JAEGER_ENDPOINT: 'https://example.com/endpoint',
|
||||
OTEL_EXPORTER_JAEGER_PASSWORD: 'secret',
|
||||
OTEL_EXPORTER_JAEGER_USER: 'whoami',
|
||||
OTEL_LOG_LEVEL: 'ERROR',
|
||||
OTEL_NO_PATCH_MODULES: 'a,b,c',
|
||||
OTEL_RESOURCE_ATTRIBUTES: '<attrs>',
|
||||
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT: 40,
|
||||
OTEL_ATTRIBUTE_COUNT_LIMIT: 50,
|
||||
OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: 100,
|
||||
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: 10,
|
||||
OTEL_SPAN_EVENT_COUNT_LIMIT: 20,
|
||||
OTEL_SPAN_LINK_COUNT_LIMIT: 30,
|
||||
OTEL_TRACES_SAMPLER: 'always_on',
|
||||
OTEL_TRACES_SAMPLER_ARG: '0.5',
|
||||
OTEL_EXPORTER_OTLP_TIMEOUT: 15000,
|
||||
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT: 12000,
|
||||
});
|
||||
const env = getEnv();
|
||||
assert.deepStrictEqual(env.OTEL_NO_PATCH_MODULES, ['a', 'b', 'c']);
|
||||
assert.strictEqual(env.OTEL_SDK_DISABLED, true);
|
||||
assert.strictEqual(env.OTEL_LOG_LEVEL, DiagLogLevel.ERROR);
|
||||
assert.strictEqual(env.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, 40);
|
||||
assert.strictEqual(env.OTEL_ATTRIBUTE_COUNT_LIMIT, 50);
|
||||
assert.strictEqual(env.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT, 100);
|
||||
assert.strictEqual(env.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT, 10);
|
||||
assert.strictEqual(env.OTEL_SPAN_EVENT_COUNT_LIMIT, 20);
|
||||
assert.strictEqual(env.OTEL_SPAN_LINK_COUNT_LIMIT, 30);
|
||||
assert.strictEqual(
|
||||
env.OTEL_EXPORTER_JAEGER_ENDPOINT,
|
||||
'https://example.com/endpoint'
|
||||
);
|
||||
assert.strictEqual(env.OTEL_EXPORTER_JAEGER_USER, 'whoami');
|
||||
assert.strictEqual(env.OTEL_EXPORTER_JAEGER_PASSWORD, 'secret');
|
||||
assert.strictEqual(
|
||||
env.OTEL_EXPORTER_JAEGER_AGENT_HOST,
|
||||
'host.domain.com'
|
||||
);
|
||||
assert.strictEqual(env.OTEL_EXPORTER_JAEGER_AGENT_PORT, 1234);
|
||||
assert.strictEqual(
|
||||
env.ECS_CONTAINER_METADATA_URI_V4,
|
||||
'https://ecs.uri/v4'
|
||||
);
|
||||
assert.strictEqual(env.ECS_CONTAINER_METADATA_URI, 'https://ecs.uri/');
|
||||
assert.strictEqual(env.NAMESPACE, 'namespace');
|
||||
assert.strictEqual(env.HOSTNAME, 'hostname');
|
||||
assert.strictEqual(env.CONTAINER_NAME, 'container-1');
|
||||
assert.strictEqual(env.KUBERNETES_SERVICE_HOST, 'https://k8s.host/');
|
||||
assert.strictEqual(env.OTEL_RESOURCE_ATTRIBUTES, '<attrs>');
|
||||
assert.strictEqual(env.OTEL_BSP_MAX_EXPORT_BATCH_SIZE, 40);
|
||||
assert.strictEqual(env.OTEL_BSP_SCHEDULE_DELAY, 50);
|
||||
assert.strictEqual(env.OTEL_TRACES_SAMPLER, 'always_on');
|
||||
assert.strictEqual(env.OTEL_TRACES_SAMPLER_ARG, '0.5');
|
||||
assert.strictEqual(env.OTEL_EXPORTER_OTLP_TIMEOUT, 15000);
|
||||
assert.strictEqual(env.OTEL_EXPORTER_OTLP_TRACES_TIMEOUT, 12000);
|
||||
});
|
||||
|
||||
it('should parse OTEL_SDK_DISABLED truthy value despite casing', () => {
|
||||
mockEnvironment({
|
||||
OTEL_SDK_DISABLED: 'TrUe',
|
||||
});
|
||||
const env = getEnv();
|
||||
assert.strictEqual(env.OTEL_SDK_DISABLED, true);
|
||||
});
|
||||
|
||||
describe('OTEL_SDK_DISABLED falsy values', () => {
|
||||
const falsyValues = ['False', ''];
|
||||
for (const falsyValue of falsyValues) {
|
||||
it(`should parse falsy value: ${falsyValue}`, () => {
|
||||
mockEnvironment({
|
||||
OTEL_SDK_DISABLED: falsyValue,
|
||||
});
|
||||
const env = getEnv();
|
||||
assert.strictEqual(env.OTEL_SDK_DISABLED, false);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
it('should parse OTEL_LOG_LEVEL despite casing', () => {
|
||||
mockEnvironment({
|
||||
OTEL_LOG_LEVEL: 'waRn',
|
||||
});
|
||||
const env = getEnv();
|
||||
assert.strictEqual(env.OTEL_LOG_LEVEL, DiagLogLevel.WARN);
|
||||
});
|
||||
|
||||
it('should parse environment variables and use defaults', () => {
|
||||
const env = getEnv();
|
||||
Object.keys(DEFAULT_ENVIRONMENT).forEach(envKey => {
|
||||
const key = envKey as keyof ENVIRONMENT;
|
||||
assert.strictEqual(
|
||||
env[key as keyof ENVIRONMENT],
|
||||
DEFAULT_ENVIRONMENT[key],
|
||||
`Variable '${key}' doesn't match`
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('mockEnvironment', () => {
|
||||
it('should remove a mock environment', () => {
|
||||
mockEnvironment({
|
||||
OTEL_LOG_LEVEL: 'DEBUG',
|
||||
OTEL_TRACES_SAMPLER: 'always_off',
|
||||
});
|
||||
removeMockEnvironment();
|
||||
const env = getEnv();
|
||||
assert.strictEqual(env.OTEL_LOG_LEVEL, DiagLogLevel.INFO);
|
||||
assert.strictEqual(env.OTEL_TRACES_SAMPLER, 'parentbased_always_on');
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue