Skip to content

Commit

Permalink
Fix issue with JSON config precedence (#1214)
Browse files Browse the repository at this point in the history
  • Loading branch information
hectorhdzg authored Sep 25, 2023
1 parent 1721de1 commit 86a575f
Show file tree
Hide file tree
Showing 3 changed files with 258 additions and 131 deletions.
71 changes: 53 additions & 18 deletions Bootstrap/Default.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
96 changes: 96 additions & 0 deletions Tests/Bootstrap/Default.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -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", () => {
Expand Down Expand Up @@ -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");
});
});
Loading

0 comments on commit 86a575f

Please sign in to comment.