Skip to content
65 changes: 42 additions & 23 deletions packages/core/src/config/configNormalizers/disable.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,48 +19,62 @@ exports.init = function init(_config) {
* Handles environment variables, and array inputs.
*
* Precedence order (highest to lowest):
* 1. `tracing.disable`
* 2. Environment variables (`INSTANA_TRACING_DISABLE*`)
* 1. Environment variables (`INSTANA_TRACING_DISABLE`)
* 2. In-code config (`tracing.disable`)
*
* @param {import('../../config').InstanaConfig} config
*/
exports.normalize = function normalize(config) {
if (!config?.tracing) config.tracing = {};
try {
// Disable all tracing if explicitly set 'disable' to true
// Check environment variables
const envDisableConfig = getDisableFromEnv();
if (envDisableConfig) {
if (envDisableConfig === true) {
return true;
}
// Normalize instrumentations and groups from env
if (envDisableConfig?.instrumentations) {
envDisableConfig.instrumentations = normalizeArray(envDisableConfig.instrumentations);
}
if (envDisableConfig?.groups) {
envDisableConfig.groups = normalizeArray(envDisableConfig.groups);
}
return envDisableConfig;
}

// Check in-code config
if (config.tracing.disable === true) {
logger?.info('Tracing has been disabled via "tracing.disable: true" configuration.');
return true;
}
const hasDisableConfig = isDisableConfigNonEmpty(config);

const hasDisableConfig = isDisableConfigNonEmpty(config);
if (hasDisableConfig) {
logger?.info(
`Tracing selectively disabled as per "tracing.disable" configuration: ${JSON.stringify(config.tracing.disable)}`
);
}

// Fallback to environment variables if `disable` is not explicitly configured
const disableConfig = isDisableConfigNonEmpty(config) ? config.tracing.disable : getDisableFromEnv();

if (!disableConfig) return {};
const disableConfig = config.tracing.disable;

if (disableConfig === true) return true;
// Handle if tracing.disable is an array
if (Array.isArray(disableConfig)) {
return categorizeDisableEntries(disableConfig);
}

// Normalize instrumentations and groups
if (disableConfig?.instrumentations) {
disableConfig.instrumentations = normalizeArray(disableConfig.instrumentations);
}
if (disableConfig?.groups) {
disableConfig.groups = normalizeArray(disableConfig.groups);
}
// Normalize instrumentations and groups
if (typeof disableConfig === 'object' && disableConfig !== null) {
if (disableConfig.instrumentations) {
disableConfig.instrumentations = normalizeArray(disableConfig.instrumentations);
}
if (disableConfig.groups) {
disableConfig.groups = normalizeArray(disableConfig.groups);
}
}

// Handle if tracing.disable is an array
if (Array.isArray(disableConfig)) {
return categorizeDisableEntries(disableConfig);
return disableConfig;
}

return disableConfig || {};
return {};
} catch (error) {
// Fallback to an empty disable config on error
logger?.debug(`Error while normalizing tracing.disable config: ${error?.message} ${error?.stack}`);
Expand Down Expand Up @@ -105,7 +119,12 @@ function getDisableFromEnv() {
return true;
}

if (envVarValue !== 'false' && envVarValue !== '') {
if (envVarValue === 'false') {
logger?.debug('Tracing has been enabled via environment variable "INSTANA_TRACING_DISABLE=false".');
return {};
}

if (envVarValue !== '') {
const categorized = categorizeDisableEntries(parseEnvVar(envVarValue));
if (categorized?.instrumentations?.length) {
disable.instrumentations = categorized.instrumentations;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/config/configNormalizers/stackTrace.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ exports.normalizeStackTraceMode = function (config) {

/**
* Normalizes stack trace length configuration based on precedence.
* Precedence: global config > config > env var > default
* Precedence: env var > global config > config > default
* @param {import('../../config').InstanaConfig} config
* @returns {number} - Normalized value
*/
Expand Down
Loading