From 86a575fa50e821e066f479e7f0df951d974bbb7e Mon Sep 17 00:00:00 2001 From: Hector Hernandez <39923391+hectorhdzg@users.noreply.github.com> Date: Mon, 25 Sep 2023 15:27:17 -0700 Subject: [PATCH] Fix issue with JSON config precedence (#1214) --- Bootstrap/Default.ts | 71 +++++++--- Tests/Bootstrap/Default.spec.ts | 96 ++++++++++++++ applicationinsights.ts | 222 ++++++++++++++++---------------- 3 files changed, 258 insertions(+), 131 deletions(-) diff --git a/Bootstrap/Default.ts b/Bootstrap/Default.ts index 2cb2bb42a..7c38e0970 100644 --- a/Bootstrap/Default.ts +++ b/Bootstrap/Default.ts @@ -115,30 +115,65 @@ export function setupAndStart(aadTokenCredential?: azureCoreAuth.TokenCredential } // Instrument the SDK + _appInsights.setup(); + // Azure Functions if (isAzureFunction) { // Agent will always run in parallel with Azure Functions .NET Agent, disable requests and exceptions to avoid duplication of telemetry - _appInsights.setup().setSendLiveMetrics(false) - .setAutoCollectPerformance(false) - .setAutoCollectPreAggregatedMetrics(false) - .setAutoCollectIncomingRequestAzureFunctions(false) - .setAutoCollectRequests(false) - .setAutoCollectExceptions(false) - .setAutoCollectDependencies(true) - .setAutoCollectHeartbeat(true) - .setUseDiskRetryCaching(true); + + // Check if config is not already setup by JSON or env variables + if (_appInsights.defaultClient.config.enableSendLiveMetrics === undefined) { + _appInsights.defaultClient.config.enableSendLiveMetrics = false; + } + if (_appInsights.defaultClient.config.enableAutoCollectPerformance === undefined) { + _appInsights.defaultClient.config.enableAutoCollectPerformance = false; + } + if (_appInsights.defaultClient.config.enableAutoCollectPreAggregatedMetrics === undefined) { + _appInsights.defaultClient.config.enableAutoCollectPreAggregatedMetrics = false; + } + if (_appInsights.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions === undefined) { + _appInsights.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions = false; + } + if (_appInsights.defaultClient.config.enableAutoCollectRequests === undefined) { + _appInsights.defaultClient.config.enableAutoCollectRequests = false; + } + if (_appInsights.defaultClient.config.enableAutoCollectDependencies === undefined) { + _appInsights.defaultClient.config.enableAutoCollectDependencies = true; + } + if (_appInsights.defaultClient.config.enableAutoCollectHeartbeat === undefined) { + _appInsights.defaultClient.config.enableAutoCollectHeartbeat = true; + } + if (_appInsights.defaultClient.config.enableUseDiskRetryCaching === undefined) { + _appInsights.defaultClient.config.enableUseDiskRetryCaching = true; + } } // App Services else { - _appInsights.setup().setSendLiveMetrics(true) - .setAutoCollectPerformance(true) - .setAutoCollectPreAggregatedMetrics(true) - .setAutoCollectIncomingRequestAzureFunctions(false) - .setAutoCollectRequests(true) - .setAutoCollectDependencies(true) - .setAutoCollectExceptions(true) - .setAutoCollectHeartbeat(true) - .setUseDiskRetryCaching(true); + // Check if config is not already setup by JSON or env variables + if (_appInsights.defaultClient.config.enableSendLiveMetrics === undefined) { + _appInsights.defaultClient.config.enableSendLiveMetrics = true; + } + if (_appInsights.defaultClient.config.enableAutoCollectPerformance === undefined) { + _appInsights.defaultClient.config.enableAutoCollectPerformance = true; + } + if (_appInsights.defaultClient.config.enableAutoCollectPreAggregatedMetrics === undefined) { + _appInsights.defaultClient.config.enableAutoCollectPreAggregatedMetrics = true; + } + if (_appInsights.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions === undefined) { + _appInsights.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions = false; + } + if (_appInsights.defaultClient.config.enableAutoCollectRequests === undefined) { + _appInsights.defaultClient.config.enableAutoCollectRequests = true; + } + if (_appInsights.defaultClient.config.enableAutoCollectDependencies === undefined) { + _appInsights.defaultClient.config.enableAutoCollectDependencies = true; + } + if (_appInsights.defaultClient.config.enableAutoCollectHeartbeat === undefined) { + _appInsights.defaultClient.config.enableAutoCollectHeartbeat = true; + } + if (_appInsights.defaultClient.config.enableUseDiskRetryCaching === undefined) { + _appInsights.defaultClient.config.enableUseDiskRetryCaching = true; + } } _appInsights.defaultClient.addTelemetryProcessor(prefixInternalSdkVersion); _appInsights.defaultClient.addTelemetryProcessor(copyOverPrefixInternalSdkVersionToHeartBeatMetric); diff --git a/Tests/Bootstrap/Default.spec.ts b/Tests/Bootstrap/Default.spec.ts index 044f6657b..95bbb0dca 100644 --- a/Tests/Bootstrap/Default.spec.ts +++ b/Tests/Bootstrap/Default.spec.ts @@ -5,6 +5,7 @@ import * as DataModel from "../../Bootstrap/DataModel"; import * as Helpers from "../../Bootstrap/Helpers"; import * as DefaultTypes from "../../Bootstrap/Default"; import { JsonConfig } from "../../Library/JsonConfig"; +import * as applicationinsights from "../../applicationinsights"; const appInsights = require("../../applicationinsights"); @@ -40,6 +41,7 @@ describe("#setupAndStart()", () => { process.env = originalEnv; sandbox.restore(); delete require.cache[require.resolve("../../Bootstrap/Default")]; + applicationinsights.dispose(); }); it("should return the client if started multiple times", () => { @@ -107,4 +109,98 @@ describe("#setupAndStart()", () => { assert.equal(logger.logCount, 0); assert.equal(logger.errorCount, 1); }); + + it("Azure Functions, default config", () => { + const env = <{ [id: string]: string }>{}; + env["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=1aa11111-bbbb-1ccc-8ddd-eeeeffff3333;IngestionEndpoint=https://centralus-0.in.applicationinsights.azure.com/"; + process.env = env; + + // Test + const Default = require("../../Bootstrap/Default") as typeof DefaultTypes; + let result = Default.setupAndStart(null, true); + assert.equal(result.defaultClient.config.enableSendLiveMetrics, false, "wrong enableSendLiveMetrics"); + assert.equal(result.defaultClient.config.enableAutoCollectPerformance, false, "wrong enableAutoCollectPerformance"); + assert.equal(result.defaultClient.config.enableAutoCollectPreAggregatedMetrics, false), "wrong enableAutoCollectPreAggregatedMetrics"; + assert.equal(result.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions, false), "wrong enableAutoCollectIncomingRequestAzureFunctions"; + assert.equal(result.defaultClient.config.enableAutoCollectRequests, false, "wrong enableAutoCollectRequests"); + assert.equal(result.defaultClient.config.enableAutoCollectDependencies, true, "wrong enableAutoCollectDependencies"); + assert.equal(result.defaultClient.config.enableAutoCollectHeartbeat, true, "wrong enableAutoCollectHeartbeat"); + assert.equal(result.defaultClient.config.enableUseDiskRetryCaching, true, "wrong enableUseDiskRetryCaching"); + }); + + it("Azure Functions, should not override configuration provided in JSON config", () => { + const env = <{ [id: string]: string }>{}; + const config = { + enableSendLiveMetrics: true, + enableAutoCollectPerformance: true, + enableAutoCollectPreAggregatedMetrics: true, + enableAutoCollectIncomingRequestAzureFunctions: true, + enableAutoCollectRequests: true, + enableAutoCollectDependencies: false, + enableAutoCollectHeartbeat: false, + enableUseDiskRetryCaching: false, + } + env["APPLICATIONINSIGHTS_CONFIGURATION_CONTENT"] = JSON.stringify(config); + env["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=1aa11111-bbbb-1ccc-8ddd-eeeeffff3333;IngestionEndpoint=https://centralus-0.in.applicationinsights.azure.com/"; + process.env = env; + + // Test + const Default = require("../../Bootstrap/Default") as typeof DefaultTypes; + let result = Default.setupAndStart(null, true); + assert.equal(result.defaultClient.config.enableSendLiveMetrics, true, "wrong enableSendLiveMetrics"); + assert.equal(result.defaultClient.config.enableAutoCollectPerformance, true, "wrong enableAutoCollectPerformance"); + assert.equal(result.defaultClient.config.enableAutoCollectPreAggregatedMetrics, true), "wrong enableAutoCollectPreAggregatedMetrics"; + assert.equal(result.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions, true), "wrong enableAutoCollectIncomingRequestAzureFunctions"; + assert.equal(result.defaultClient.config.enableAutoCollectRequests, true, "wrong enableAutoCollectRequests"); + assert.equal(result.defaultClient.config.enableAutoCollectDependencies, false, "wrong enableAutoCollectDependencies"); + assert.equal(result.defaultClient.config.enableAutoCollectHeartbeat, false, "wrong enableAutoCollectHeartbeat"); + assert.equal(result.defaultClient.config.enableUseDiskRetryCaching, false, "wrong enableUseDiskRetryCaching"); + }); + + it("App Services, default config", () => { + const env = <{ [id: string]: string }>{}; + env["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=1aa11111-bbbb-1ccc-8ddd-eeeeffff3333;IngestionEndpoint=https://centralus-0.in.applicationinsights.azure.com/"; + process.env = env; + + // Test + const Default = require("../../Bootstrap/Default") as typeof DefaultTypes; + let result = Default.setupAndStart(null, false); + assert.equal(result.defaultClient.config.enableSendLiveMetrics, true, "wrong enableSendLiveMetrics"); + assert.equal(result.defaultClient.config.enableAutoCollectPerformance, true, "wrong enableAutoCollectPerformance"); + assert.equal(result.defaultClient.config.enableAutoCollectPreAggregatedMetrics, true), "wrong enableAutoCollectPreAggregatedMetrics"; + assert.equal(result.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions, false), "wrong enableAutoCollectIncomingRequestAzureFunctions"; + assert.equal(result.defaultClient.config.enableAutoCollectRequests, true, "wrong enableAutoCollectRequests"); + assert.equal(result.defaultClient.config.enableAutoCollectDependencies, true, "wrong enableAutoCollectDependencies"); + assert.equal(result.defaultClient.config.enableAutoCollectHeartbeat, true, "wrong enableAutoCollectHeartbeat"); + assert.equal(result.defaultClient.config.enableUseDiskRetryCaching, true, "wrong enableUseDiskRetryCaching"); + }); + + it("App Services, should not override configuration provided in JSON config", () => { + const env = <{ [id: string]: string }>{}; + const config = { + enableSendLiveMetrics: false, + enableAutoCollectPerformance: false, + enableAutoCollectPreAggregatedMetrics: false, + enableAutoCollectIncomingRequestAzureFunctions: true, + enableAutoCollectRequests: false, + enableAutoCollectDependencies: false, + enableAutoCollectHeartbeat: false, + enableUseDiskRetryCaching: false, + } + env["APPLICATIONINSIGHTS_CONFIGURATION_CONTENT"] = JSON.stringify(config); + env["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=1aa11111-bbbb-1ccc-8ddd-eeeeffff3333;IngestionEndpoint=https://centralus-0.in.applicationinsights.azure.com/"; + process.env = env; + + // Test + const Default = require("../../Bootstrap/Default") as typeof DefaultTypes; + let result = Default.setupAndStart(null, false); + assert.equal(result.defaultClient.config.enableSendLiveMetrics, false, "wrong enableSendLiveMetrics"); + assert.equal(result.defaultClient.config.enableAutoCollectPerformance, false, "wrong enableAutoCollectPerformance"); + assert.equal(result.defaultClient.config.enableAutoCollectPreAggregatedMetrics, false), "wrong enableAutoCollectPreAggregatedMetrics"; + assert.equal(result.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions, true), "wrong enableAutoCollectIncomingRequestAzureFunctions"; + assert.equal(result.defaultClient.config.enableAutoCollectRequests, false, "wrong enableAutoCollectRequests"); + assert.equal(result.defaultClient.config.enableAutoCollectDependencies, false, "wrong enableAutoCollectDependencies"); + assert.equal(result.defaultClient.config.enableAutoCollectHeartbeat, false, "wrong enableAutoCollectHeartbeat"); + assert.equal(result.defaultClient.config.enableUseDiskRetryCaching, false, "wrong enableUseDiskRetryCaching"); + }); }); diff --git a/applicationinsights.ts b/applicationinsights.ts index 8c4ad24e6..2aa133cfe 100644 --- a/applicationinsights.ts +++ b/applicationinsights.ts @@ -34,50 +34,6 @@ export enum DistributedTracingModes { AI_AND_W3C } -// Default autocollection configuration -let defaultConfig = _getDefaultAutoCollectConfig(); -let _isConsole = defaultConfig.isConsole(); -let _isConsoleLog = defaultConfig.isConsoleLog(); -let _isLoggerErrorToTrace = defaultConfig.isLoggerErrorToTrace(); // default to false -let _isExceptions = defaultConfig.isExceptions(); -let _isPerformance = defaultConfig.isPerformance(); -let _isPreAggregatedMetrics = defaultConfig.isPreAggregatedMetrics(); -let _isHeartBeat = defaultConfig.isHeartBeat(); // off by default for now -let _isRequests = defaultConfig.isRequests(); -let _isDependencies = defaultConfig.isDependencies(); -let _isDiskRetry = defaultConfig.isDiskRetry(); -let _isCorrelating = defaultConfig.isCorrelating(); -let _forceClsHooked: boolean; -let _isSendingLiveMetrics = defaultConfig.isSendingLiveMetrics(); // Off by default -let _isNativePerformance = defaultConfig.isNativePerformance(); -let _disabledExtendedMetrics: IDisabledExtendedMetrics; -let _isSnippetInjection = defaultConfig.isSnippetInjection(); // default to false -let _isAzureFunctions = defaultConfig.isAzureFunctions(); // default to false - -function _getDefaultAutoCollectConfig() { - return { - isConsole: () => true, - isConsoleLog: () => false, - isExceptions: () => true, - isPerformance: () => true, - isPreAggregatedMetrics: () => true, - isHeartBeat: () => false, // off by default for now - isRequests: () => true, - isDependencies: () => true, - isDiskRetry: () => true, - isCorrelating: () => true, - isSendingLiveMetrics: () => false, // Off by default - isNativePerformance: () => true, - isSnippetInjection: () => false, - isAzureFunctions: () => false, - isLoggerErrorToTrace: () => false, - } -} - -let _diskRetryInterval: number = undefined; -let _diskRetryMaxBytes: number = undefined; -let _webSnippetConnectionString: string = undefined; - let _console: AutoCollectConsole; let _exceptions: AutoCollectExceptions; let _performance: AutoCollectPerformance; @@ -112,7 +68,6 @@ let _performanceLiveMetrics: AutoCollectPerformance; export function setup(setupString?: string) { if (!defaultClient) { defaultClient = new TelemetryClient(setupString); - _initializeConfig(); _console = new AutoCollectConsole(defaultClient); _exceptions = new AutoCollectExceptions(defaultClient); _performance = new AutoCollectPerformance(defaultClient); @@ -128,12 +83,55 @@ export function setup(setupString?: string) { } else { Logging.info("The default client is already setup"); } + return Configuration; +} - if (defaultClient && defaultClient.channel) { - defaultClient.channel.setUseDiskRetryCaching(_isDiskRetry, _diskRetryInterval, _diskRetryMaxBytes); +function _setDefaultConfig() { + if (defaultClient) { + // Add default config values if no config values are not provided before start + if (defaultClient.config.enableAutoCollectExternalLoggers == undefined) { + defaultClient.config.enableAutoCollectExternalLoggers = true; + } + if (defaultClient.config.enableAutoCollectConsole == undefined) { + defaultClient.config.enableAutoCollectConsole = false; + } + if (defaultClient.config.enableAutoCollectExceptions == undefined) { + defaultClient.config.enableAutoCollectExceptions = true; + } + if (defaultClient.config.enableAutoCollectPerformance == undefined) { + defaultClient.config.enableAutoCollectPerformance = true; + } + if (defaultClient.config.enableAutoCollectPreAggregatedMetrics == undefined) { + defaultClient.config.enableAutoCollectPreAggregatedMetrics = true; + } + if (defaultClient.config.enableAutoCollectHeartbeat == undefined) { + defaultClient.config.enableAutoCollectHeartbeat = true; + } + if (defaultClient.config.enableAutoCollectRequests == undefined) { + defaultClient.config.enableAutoCollectRequests = true; + } + if (defaultClient.config.enableAutoCollectDependencies == undefined) { + defaultClient.config.enableAutoCollectDependencies = true; + } + if (defaultClient.config.enableUseDiskRetryCaching == undefined) { + defaultClient.config.enableUseDiskRetryCaching = true; + } + if (defaultClient.config.enableAutoDependencyCorrelation == undefined) { + defaultClient.config.enableAutoDependencyCorrelation = true; + } + if (defaultClient.config.enableSendLiveMetrics == undefined) { + defaultClient.config.enableSendLiveMetrics = true; + } + if (defaultClient.config.enableAutoCollectExtendedMetrics == undefined) { + defaultClient.config.enableAutoCollectExtendedMetrics = true; + } + if (defaultClient.config.enableWebInstrumentation == undefined) { + defaultClient.config.enableWebInstrumentation = false; + } + if (defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions == undefined) { + defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions = false; + } } - - return Configuration; } /** @@ -145,20 +143,36 @@ export function setup(setupString?: string) { export function start() { if (!!defaultClient) { _isStarted = true; - _console.enable(_isConsole, _isConsoleLog); - _exceptions.enable(_isExceptions); - _performance.enable(_isPerformance); - _preAggregatedMetrics.enable(_isPreAggregatedMetrics); - _heartbeat.enable(_isHeartBeat); - _nativePerformance.enable(_isNativePerformance, _disabledExtendedMetrics); - _serverRequests.useAutoCorrelation(_isCorrelating, _forceClsHooked); - _serverRequests.enable(_isRequests); - _clientRequests.enable(_isDependencies); - _webSnippet.enable(_isSnippetInjection, _webSnippetConnectionString); - if (liveMetricsClient && _isSendingLiveMetrics) { - liveMetricsClient.enable(_isSendingLiveMetrics); + _setDefaultConfig(); + _console.enable(defaultClient.config.enableAutoCollectExternalLoggers, defaultClient.config.enableAutoCollectConsole); + _exceptions.enable(defaultClient.config.enableAutoCollectExceptions); + _performance.enable(defaultClient.config.enableAutoCollectPerformance); + _preAggregatedMetrics.enable(defaultClient.config.enableAutoCollectPreAggregatedMetrics); + _heartbeat.enable(defaultClient.config.enableAutoCollectHeartbeat); + + _serverRequests.useAutoCorrelation(defaultClient.config.enableAutoDependencyCorrelation, defaultClient.config.enableUseAsyncHooks); + _serverRequests.enable(defaultClient.config.enableAutoCollectRequests); + _clientRequests.enable(defaultClient.config.enableAutoCollectDependencies); + _webSnippet.enable(defaultClient.config.enableWebInstrumentation, defaultClient.config.webInstrumentationConnectionString); + if (liveMetricsClient && defaultClient.config.enableSendLiveMetrics) { + liveMetricsClient.enable(defaultClient.config.enableSendLiveMetrics); } - _azureFunctions.enable(_isAzureFunctions); + _azureFunctions.enable(defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions); + + const extendedMetricsConfig = AutoCollectNativePerformance.parseEnabled( + defaultClient.config.enableAutoCollectExtendedMetrics, + defaultClient.config); + _nativePerformance.enable( + defaultClient.config.enableAutoCollectExtendedMetrics as boolean, + extendedMetricsConfig.disabledMetrics); + + if (defaultClient && defaultClient.channel) { + defaultClient.channel.setUseDiskRetryCaching( + defaultClient.config.enableUseDiskRetryCaching, + defaultClient.config.enableResendInterval, + defaultClient.config.enableMaxBytesOnDisk); + } + } else { Logging.warn("Start cannot be called before setup"); } @@ -166,26 +180,6 @@ export function start() { return Configuration; } -function _initializeConfig() { - _isConsole = defaultClient.config.enableAutoCollectExternalLoggers !== undefined ? defaultClient.config.enableAutoCollectExternalLoggers : _isConsole; - _isConsoleLog = defaultClient.config.enableAutoCollectConsole !== undefined ? defaultClient.config.enableAutoCollectConsole : _isConsoleLog; - _isLoggerErrorToTrace = defaultClient.config.enableLoggerErrorToTrace !== undefined ? defaultClient.config.enableLoggerErrorToTrace : _isLoggerErrorToTrace; - _isExceptions = defaultClient.config.enableAutoCollectExceptions !== undefined ? defaultClient.config.enableAutoCollectExceptions : _isExceptions; - _isPerformance = defaultClient.config.enableAutoCollectPerformance !== undefined ? defaultClient.config.enableAutoCollectPerformance : _isPerformance; - _isPreAggregatedMetrics = defaultClient.config.enableAutoCollectPreAggregatedMetrics !== undefined ? defaultClient.config.enableAutoCollectPreAggregatedMetrics : _isPreAggregatedMetrics; - _isHeartBeat = defaultClient.config.enableAutoCollectHeartbeat !== undefined ? defaultClient.config.enableAutoCollectHeartbeat : _isHeartBeat; - _isRequests = defaultClient.config.enableAutoCollectRequests !== undefined ? defaultClient.config.enableAutoCollectRequests : _isRequests; - _isDependencies = defaultClient.config.enableAutoDependencyCorrelation !== undefined ? defaultClient.config.enableAutoDependencyCorrelation : _isDependencies; - _isDiskRetry = defaultClient.config.enableUseDiskRetryCaching !== undefined ? defaultClient.config.enableUseDiskRetryCaching : _isDiskRetry; - _isCorrelating = defaultClient.config.enableAutoDependencyCorrelation !== undefined ? defaultClient.config.enableAutoDependencyCorrelation : _isCorrelating; - _forceClsHooked = defaultClient.config.enableUseAsyncHooks !== undefined ? defaultClient.config.enableUseAsyncHooks : _forceClsHooked; - _isSendingLiveMetrics = defaultClient.config.enableSendLiveMetrics !== undefined ? defaultClient.config.enableSendLiveMetrics : _isSendingLiveMetrics; - _isSnippetInjection = defaultClient.config.enableAutoWebSnippetInjection === true ? true : _isSnippetInjection; - _isAzureFunctions = defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions !== undefined ? defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions : _isAzureFunctions; - const extendedMetricsConfig = AutoCollectNativePerformance.parseEnabled(defaultClient.config.enableAutoCollectExtendedMetrics, defaultClient.config); - _isNativePerformance = extendedMetricsConfig.isEnabled; - _disabledExtendedMetrics = extendedMetricsConfig.disabledMetrics; -} /** * Returns an object that is shared across all code handling a given request. @@ -201,7 +195,7 @@ function _initializeConfig() { * @returns A plain object for request storage or null if automatic dependency correlation is disabled. */ export function getCorrelationContext(): CorrelationContextManager.CorrelationContext { - if (_isCorrelating) { + if (defaultClient.config.enableAutoDependencyCorrelation) { return CorrelationContextManager.CorrelationContextManager.getCurrentContext(); } @@ -256,8 +250,8 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoCollectConsole(value: boolean, collectConsoleLog: boolean = false) { - _isConsole = value; - _isConsoleLog = collectConsoleLog; + defaultClient.config.enableAutoCollectExternalLoggers = value; + defaultClient.config.enableAutoCollectConsole = collectConsoleLog; if (_isStarted) { _console.enable(value, collectConsoleLog); } @@ -271,7 +265,7 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoCollectExceptions(value: boolean) { - _isExceptions = value; + defaultClient.config.enableAutoCollectExceptions = value; if (_isStarted) { _exceptions.enable(value); } @@ -286,13 +280,12 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoCollectPerformance(value: boolean, collectExtendedMetrics: boolean | IDisabledExtendedMetrics = true) { - _isPerformance = value; + defaultClient.config.enableAutoCollectPerformance = value; const extendedMetricsConfig = AutoCollectNativePerformance.parseEnabled(collectExtendedMetrics, defaultClient.config); - _isNativePerformance = extendedMetricsConfig.isEnabled; - _disabledExtendedMetrics = extendedMetricsConfig.disabledMetrics; + defaultClient.config.enableAutoCollectExtendedMetrics = extendedMetricsConfig.isEnabled; if (_isStarted) { _performance.enable(value); - _nativePerformance.enable(extendedMetricsConfig.isEnabled, extendedMetricsConfig.disabledMetrics); + _nativePerformance.enable(defaultClient.config.enableAutoCollectExtendedMetrics, extendedMetricsConfig.disabledMetrics); } return Configuration; @@ -304,7 +297,7 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoCollectPreAggregatedMetrics(value: boolean) { - _isPreAggregatedMetrics = value; + defaultClient.config.enableAutoCollectPreAggregatedMetrics = value; if (_isStarted) { _preAggregatedMetrics.enable(value); } @@ -318,7 +311,7 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoCollectHeartbeat(value: boolean) { - _isHeartBeat = value; + defaultClient.config.enableAutoCollectHeartbeat = value; if (_isStarted) { _heartbeat.enable(value); } @@ -330,14 +323,14 @@ export class Configuration { * Sets the state of Web snippet injection, this config is NOT exposed in documentation after version 2.3.5 * @deprecated, please use enableWebInstrumentation instead. * @param value if true Web snippet will be tried to be injected in server response - * @param WebSnippetConnectionString if provided, web snippet injection will use this ConnectionString. Default to use the connectionString in Node.js app initialization + * @param webSnippetConnectionString if provided, web snippet injection will use this ConnectionString. Default to use the connectionString in Node.js app initialization * @returns {Configuration} this class */ - public static enableAutoWebSnippetInjection(value: boolean, WebSnippetConnectionString?: string) { - _isSnippetInjection = value; - _webSnippetConnectionString = WebSnippetConnectionString; + public static enableAutoWebSnippetInjection(value: boolean, webSnippetConnectionString?: string) { + defaultClient.config.enableWebInstrumentation = value; + defaultClient.config.webInstrumentationConnectionString = webSnippetConnectionString; if (_isStarted) { - _webSnippet.enable(value, _webSnippetConnectionString); + _webSnippet.enable(defaultClient.config.enableAutoWebSnippetInjection, defaultClient.config.webSnippetConnectionString); } return Configuration; } @@ -345,14 +338,14 @@ export class Configuration { /** * Sets the state of Web snippet injection * @param value if true Web snippet will be tried to be injected in server response - * @param WebSnippetConnectionString if provided, web snippet injection will use this ConnectionString. Default to use the connectionString in Node.js app initialization + * @param webSnippetConnectionString if provided, web snippet injection will use this ConnectionString. Default to use the connectionString in Node.js app initialization * @returns {Configuration} this class */ - public static enableWebInstrumentation(value: boolean, WebSnippetConnectionString?: string) { - _isSnippetInjection = value; - _webSnippetConnectionString = WebSnippetConnectionString; + public static enableWebInstrumentation(value: boolean, webSnippetConnectionString?: string) { + defaultClient.config.enableWebInstrumentation = value; + defaultClient.config.webInstrumentationConnectionString = webSnippetConnectionString; if (_isStarted) { - _webSnippet.enable(value, _webSnippetConnectionString); + _webSnippet.enable(defaultClient.config.enableWebInstrumentation, defaultClient.config.webInstrumentationConnectionString); } return Configuration; @@ -364,7 +357,7 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoCollectRequests(value: boolean) { - _isRequests = value; + defaultClient.config.enableAutoCollectRequests = value; if (_isStarted) { _serverRequests.enable(value); } @@ -378,7 +371,7 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoCollectDependencies(value: boolean) { - _isDependencies = value; + defaultClient.config.enableAutoCollectDependencies = value; if (_isStarted) { _clientRequests.enable(value); } @@ -393,8 +386,8 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoDependencyCorrelation(value: boolean, useAsyncHooks?: boolean) { - _isCorrelating = value; - _forceClsHooked = useAsyncHooks; + defaultClient.config.enableAutoDependencyCorrelation = value; + defaultClient.config.enableUseAsyncHooks = useAsyncHooks; if (_isStarted) { _serverRequests.useAutoCorrelation(value, useAsyncHooks); } @@ -413,11 +406,14 @@ export class Configuration { * @returns {Configuration} this class */ public static setUseDiskRetryCaching(value: boolean, resendInterval?: number, maxBytesOnDisk?: number) { - _isDiskRetry = value; - _diskRetryInterval = resendInterval; - _diskRetryMaxBytes = maxBytesOnDisk; + defaultClient.config.enableUseDiskRetryCaching = value; + defaultClient.config.enableResendInterval = resendInterval; + defaultClient.config.enableMaxBytesOnDisk = maxBytesOnDisk; if (defaultClient && defaultClient.channel) { - defaultClient.channel.setUseDiskRetryCaching(_isDiskRetry, _diskRetryInterval, _diskRetryMaxBytes); + defaultClient.channel.setUseDiskRetryCaching( + defaultClient.config.enableUseDiskRetryCaching, + defaultClient.config.enableResendInterval, + defaultClient.config.enableMaxBytesOnDisk); } return Configuration; } @@ -440,7 +436,7 @@ export class Configuration { * @returns {Configuration} this class */ public static setAutoCollectIncomingRequestAzureFunctions(value: boolean) { - _isAzureFunctions = value; + defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions = value; if (_isStarted) { _azureFunctions.enable(value); } @@ -468,7 +464,7 @@ export class Configuration { // qps client already exists; enable/disable it liveMetricsClient.enable(enable); } - _isSendingLiveMetrics = enable; + defaultClient.config.enableSendLiveMetrics = enable; return Configuration; } } @@ -509,7 +505,7 @@ export function dispose() { } if (liveMetricsClient) { liveMetricsClient.enable(false); - _isSendingLiveMetrics = false; + defaultClient.config.enableSendLiveMetrics = false; liveMetricsClient = undefined; } if (_azureFunctions) {