Update for flattening IConfiguration (#713)
* Update for flattening IConfiguration * Add ConfigurationManager to common * Change version for ConfigurationManager * Add defaultValue to ConfigurationManager * Change PropertiesPlugin defaults to nulls * Add defaults to PropertiesPlugin
This commit is contained in:
Родитель
5571517180
Коммит
90f1059e31
|
@ -177,9 +177,9 @@ dist/
|
||||||
|
|
||||||
# Grunt
|
# Grunt
|
||||||
.tscache
|
.tscache
|
||||||
ApplicationInsights/Tests/Selenium/*.tests.js
|
**/Tests/Selenium/*.tests.js
|
||||||
ApplicationInsights/Tests/Selenium/*.tests.d.ts
|
**/Tests/Selenium/*.tests.d.ts
|
||||||
ApplicationInsights/Tests/Selenium/*.tests.js.map
|
**/Tests/Selenium/*.tests.js.map
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
statistics.html
|
statistics.html
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@microsoft/applicationinsights-web",
|
"name": "@microsoft/applicationinsights-web",
|
||||||
"version": "1.0.0-beta.1",
|
"version": "1.0.0-beta.2",
|
||||||
"description": "Microsoft Application Insights Javascript SDK API 1.0 beta",
|
"description": "Microsoft Application Insights Javascript SDK API 1.0 beta",
|
||||||
"main": "dist/applicationinsights-web.js",
|
"main": "dist/applicationinsights-web.js",
|
||||||
"module": "dist-esm/applicationinsights-web.js",
|
"module": "dist-esm/applicationinsights-web.js",
|
||||||
|
@ -26,11 +26,11 @@
|
||||||
"webpack-command": "^0.4.1"
|
"webpack-command": "^0.4.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@microsoft/applicationinsights-analytics-js": "^1.0.0-beta.3",
|
"@microsoft/applicationinsights-analytics-js": "^1.0.0-beta.5",
|
||||||
"@microsoft/applicationinsights-channel-js": "^1.0.0-beta.3",
|
"@microsoft/applicationinsights-channel-js": "^1.0.0-beta.6",
|
||||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.4",
|
"@microsoft/applicationinsights-common": "^1.0.0-beta.7",
|
||||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
||||||
"@microsoft/applicationinsights-properties-js": "^1.0.0-beta",
|
"@microsoft/applicationinsights-properties-js": "^1.0.0-beta.3",
|
||||||
"@microsoft/applicationinsights-dependencies-js": "^1.0.0-beta.1"
|
"@microsoft/applicationinsights-dependencies-js": "^1.0.0-beta.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,10 +18,7 @@ try {
|
||||||
// get sdk instance name should not conflict if page uses existing sdk for a layer of instrumentation
|
// get sdk instance name should not conflict if page uses existing sdk for a layer of instrumentation
|
||||||
aiName = window["appInsightsSDK"];
|
aiName = window["appInsightsSDK"];
|
||||||
|
|
||||||
if (window[aiName] === undefined) {
|
if (window[aiName] !== undefined) {
|
||||||
// if no snippet is present, initialize default values
|
|
||||||
AppAnalytics.appInsightsDefaultConfig = ApplicationInsights.getDefaultConfig();
|
|
||||||
} else {
|
|
||||||
if (window[aiName].initialize) { // initialize if required
|
if (window[aiName].initialize) { // initialize if required
|
||||||
// this is the typical case for browser+snippet
|
// this is the typical case for browser+snippet
|
||||||
var snippet: Snippet = window[aiName] || <any>{};
|
var snippet: Snippet = window[aiName] || <any>{};
|
||||||
|
|
|
@ -17,7 +17,7 @@ import { AjaxPlugin as DependenciesPlugin, IDependenciesPlugin } from '@microsof
|
||||||
*/
|
*/
|
||||||
export interface Snippet {
|
export interface Snippet {
|
||||||
queue: Array<() => void>;
|
queue: Array<() => void>;
|
||||||
config: IConfiguration;
|
config: IConfiguration & IConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IApplicationInsights extends IAppInsights, IDependenciesPlugin, IPropertiesPlugin {
|
export interface IApplicationInsights extends IAppInsights, IDependenciesPlugin, IPropertiesPlugin {
|
||||||
|
@ -41,7 +41,7 @@ export class Initialization implements IApplicationInsights {
|
||||||
constructor(snippet: Snippet) {
|
constructor(snippet: Snippet) {
|
||||||
// initialize the queue and config in case they are undefined
|
// initialize the queue and config in case they are undefined
|
||||||
snippet.queue = snippet.queue || [];
|
snippet.queue = snippet.queue || [];
|
||||||
var config: IConfiguration = snippet.config || <any>{};
|
var config: IConfiguration & IConfig = snippet.config || <any>{};
|
||||||
|
|
||||||
// ensure instrumentationKey is specified
|
// ensure instrumentationKey is specified
|
||||||
if (config && !config.instrumentationKey) {
|
if (config && !config.instrumentationKey) {
|
||||||
|
@ -50,8 +50,6 @@ export class Initialization implements IApplicationInsights {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.appInsights = new ApplicationInsights();
|
this.appInsights = new ApplicationInsights();
|
||||||
// set default values using config passed through snippet
|
|
||||||
config = Initialization.getDefaultConfig(config, this.appInsights.identifier);
|
|
||||||
|
|
||||||
this.properties = new PropertiesPlugin();
|
this.properties = new PropertiesPlugin();
|
||||||
this.dependencies = new DependenciesPlugin();
|
this.dependencies = new DependenciesPlugin();
|
||||||
|
@ -295,56 +293,4 @@ export class Initialization implements IApplicationInsights {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static getDefaultConfig(configuration?: IConfiguration, identifier?: string): IConfiguration {
|
|
||||||
if (!configuration) {
|
|
||||||
configuration = <IConfiguration>{};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (configuration) {
|
|
||||||
identifier = identifier ? identifier : "ApplicationInsightsAnalytics";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Undefined checks
|
|
||||||
if (!configuration.extensionConfig) {
|
|
||||||
configuration.extensionConfig = {};
|
|
||||||
}
|
|
||||||
if (!configuration.extensionConfig[identifier]) {
|
|
||||||
configuration.extensionConfig[identifier] = {};
|
|
||||||
}
|
|
||||||
const extensionConfig: IConfig = configuration.extensionConfig[identifier]; // ref to main config
|
|
||||||
// set default values
|
|
||||||
configuration.endpointUrl = configuration.endpointUrl || "https://dc.services.visualstudio.com/v2/track";
|
|
||||||
configuration.diagnosticLoggingInterval = configuration.diagnosticLoggingInterval || 10000;
|
|
||||||
extensionConfig.sessionRenewalMs = 30 * 60 * 1000;
|
|
||||||
extensionConfig.sessionExpirationMs = 24 * 60 * 60 * 1000;
|
|
||||||
|
|
||||||
extensionConfig.enableDebug = Util.stringToBoolOrDefault(extensionConfig.enableDebug);
|
|
||||||
extensionConfig.disableExceptionTracking = Util.stringToBoolOrDefault(extensionConfig.disableExceptionTracking);
|
|
||||||
extensionConfig.consoleLoggingLevel = extensionConfig.consoleLoggingLevel || 1; // Show only CRITICAL level
|
|
||||||
extensionConfig.telemetryLoggingLevel = extensionConfig.telemetryLoggingLevel || 0; // Send nothing
|
|
||||||
extensionConfig.autoTrackPageVisitTime = Util.stringToBoolOrDefault(extensionConfig.autoTrackPageVisitTime);
|
|
||||||
|
|
||||||
if (isNaN(extensionConfig.samplingPercentage) || extensionConfig.samplingPercentage <= 0 || extensionConfig.samplingPercentage >= 100) {
|
|
||||||
extensionConfig.samplingPercentage = 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
extensionConfig.disableAjaxTracking = Util.stringToBoolOrDefault(extensionConfig.disableAjaxTracking)
|
|
||||||
extensionConfig.disableFetchTracking = Util.stringToBoolOrDefault(extensionConfig.disableFetchTracking, false);
|
|
||||||
extensionConfig.maxAjaxCallsPerView = !isNaN(extensionConfig.maxAjaxCallsPerView) ? extensionConfig.maxAjaxCallsPerView : 500;
|
|
||||||
|
|
||||||
extensionConfig.disableCorrelationHeaders = Util.stringToBoolOrDefault(extensionConfig.disableCorrelationHeaders);
|
|
||||||
extensionConfig.correlationHeaderExcludedDomains = extensionConfig.correlationHeaderExcludedDomains || [
|
|
||||||
"*.blob.core.windows.net",
|
|
||||||
"*.blob.core.chinacloudapi.cn",
|
|
||||||
"*.blob.core.cloudapi.de",
|
|
||||||
"*.blob.core.usgovcloudapi.net"];
|
|
||||||
extensionConfig.disableFlushOnBeforeUnload = Util.stringToBoolOrDefault(extensionConfig.disableFlushOnBeforeUnload);
|
|
||||||
extensionConfig.isCookieUseDisabled = Util.stringToBoolOrDefault(extensionConfig.isCookieUseDisabled);
|
|
||||||
extensionConfig.isStorageUseDisabled = Util.stringToBoolOrDefault(extensionConfig.isStorageUseDisabled);
|
|
||||||
extensionConfig.isBrowserLinkTrackingEnabled = Util.stringToBoolOrDefault(extensionConfig.isBrowserLinkTrackingEnabled);
|
|
||||||
extensionConfig.enableCorsCorrelation = Util.stringToBoolOrDefault(extensionConfig.enableCorsCorrelation);
|
|
||||||
|
|
||||||
return configuration;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import {
|
||||||
CoreUtils,
|
CoreUtils,
|
||||||
ITelemetryItem
|
ITelemetryItem
|
||||||
} from "@microsoft/applicationinsights-core-js";
|
} from "@microsoft/applicationinsights-core-js";
|
||||||
|
import { IConfig } from "@microsoft/applicationinsights-common";
|
||||||
import { Sender } from "@microsoft/applicationinsights-channel-js";
|
import { Sender } from "@microsoft/applicationinsights-channel-js";
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
@ -23,10 +24,10 @@ export class ApplicationInsights {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an instance of ApplicationInsights.
|
* Creates an instance of ApplicationInsights.
|
||||||
* @param {IConfiguration} config
|
* @param {IConfiguration & IConfig} config
|
||||||
* @memberof ApplicationInsights
|
* @memberof ApplicationInsights
|
||||||
*/
|
*/
|
||||||
constructor(config: IConfiguration) {
|
constructor(config: IConfiguration & IConfig) {
|
||||||
// initialize the queue and config in case they are undefined
|
// initialize the queue and config in case they are undefined
|
||||||
if (
|
if (
|
||||||
CoreUtils.isNullOrUndefined(config) ||
|
CoreUtils.isNullOrUndefined(config) ||
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@microsoft/applicationinsights-web-basic",
|
"name": "@microsoft/applicationinsights-web-basic",
|
||||||
"version": "1.0.0-beta.5",
|
"version": "1.0.0-beta.6",
|
||||||
"description": "Microsoft Application Insights Javascript SDK core and channel",
|
"description": "Microsoft Application Insights Javascript SDK core and channel",
|
||||||
"main": "dist/applicationinsights-web-basic.js",
|
"main": "dist/applicationinsights-web-basic.js",
|
||||||
"module": "dist-esm/index.js",
|
"module": "dist-esm/index.js",
|
||||||
|
@ -22,8 +22,8 @@
|
||||||
"typescript": "2.5.3"
|
"typescript": "2.5.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.5",
|
"@microsoft/applicationinsights-common": "^1.0.0-beta.7",
|
||||||
"@microsoft/applicationinsights-channel-js": "^1.0.0-beta.4",
|
"@microsoft/applicationinsights-channel-js": "^1.0.0-beta.6",
|
||||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2"
|
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@microsoft/applicationinsights-common",
|
"name": "@microsoft/applicationinsights-common",
|
||||||
"version": "1.0.0-beta.5",
|
"version": "1.0.0-beta.7",
|
||||||
"description": "Microsoft Application Insights Common JavaScript Library",
|
"description": "Microsoft Application Insights Common JavaScript Library",
|
||||||
"main": "./dist/applicationinsights-common.js",
|
"main": "./dist/applicationinsights-common.js",
|
||||||
"module": "./dist-esm/applicationinsights-common.js",
|
"module": "./dist-esm/applicationinsights-common.js",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
// Licensed under the MIT License.
|
// Licensed under the MIT License.
|
||||||
|
import { IConfiguration } from '@microsoft/applicationinsights-core-js';
|
||||||
|
|
||||||
export interface IConfig {
|
export interface IConfig {
|
||||||
emitLineDelimitedJson?: boolean;
|
emitLineDelimitedJson?: boolean;
|
||||||
|
@ -38,4 +39,16 @@ export interface IConfig {
|
||||||
|
|
||||||
// Internal
|
// Internal
|
||||||
autoExceptionInstrumented?: boolean;
|
autoExceptionInstrumented?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class ConfigurationManager {
|
||||||
|
public static getConfig(config: IConfiguration & IConfig, field: string, identifier?: string, defaultValue: any = false): number | string | boolean {
|
||||||
|
let configValue;
|
||||||
|
if (!identifier || !config.extensionConfig || !config.extensionConfig[identifier]) {
|
||||||
|
configValue = config[field];
|
||||||
|
} else {
|
||||||
|
configValue = config.extensionConfig[identifier][field] || config[field];
|
||||||
|
}
|
||||||
|
return configValue !== undefined ? configValue : defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ export { Trace } from './Telemetry/Trace';
|
||||||
export { PageViewPerformance } from './Telemetry/PageViewPerformance';
|
export { PageViewPerformance } from './Telemetry/PageViewPerformance';
|
||||||
export { Data } from './Telemetry/Common/Data';
|
export { Data } from './Telemetry/Common/Data';
|
||||||
export { SeverityLevel } from './Interfaces/Contracts/Generated/SeverityLevel';
|
export { SeverityLevel } from './Interfaces/Contracts/Generated/SeverityLevel';
|
||||||
export { IConfig } from './Interfaces/IConfig';
|
export { IConfig, ConfigurationManager } from './Interfaces/IConfig';
|
||||||
export { IChannelControlsAI } from './Interfaces/IChannelControlsAI';
|
export { IChannelControlsAI } from './Interfaces/IChannelControlsAI';
|
||||||
export { ContextTagKeys } from './Interfaces/Contracts/Generated/ContextTagKeys';
|
export { ContextTagKeys } from './Interfaces/Contracts/Generated/ContextTagKeys';
|
||||||
export { DataSanitizer } from './Telemetry/Common/DataSanitizer';
|
export { DataSanitizer } from './Telemetry/Common/DataSanitizer';
|
||||||
|
|
|
@ -26,6 +26,33 @@ export class ApplicationInsightsTests extends TestClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
public registerTests() {
|
public registerTests() {
|
||||||
|
this.testCase({
|
||||||
|
name: 'AppInsightsTests: config can be set from root',
|
||||||
|
test: () => {
|
||||||
|
// Setup
|
||||||
|
var appInsights: ApplicationInsights = new ApplicationInsights();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var config = {
|
||||||
|
instrumentationKey: 'instrumentation_key',
|
||||||
|
samplingPercentage: 12,
|
||||||
|
accountId: 'aaa',
|
||||||
|
extensionConfig: {
|
||||||
|
[appInsights.identifier]: {
|
||||||
|
accountId: 'def'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
appInsights.initialize(config, new AppInsightsCore(), []);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.equal(12, appInsights.config.samplingPercentage);
|
||||||
|
Assert.notEqual('aaa', appInsights.config.accountId);
|
||||||
|
Assert.equal('def', appInsights.config.accountId);
|
||||||
|
Assert.equal('instrumentation_key', appInsights['_globalconfig'].instrumentationKey);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.testCase({
|
this.testCase({
|
||||||
name: "AppInsightsTests: public members are correct",
|
name: "AppInsightsTests: public members are correct",
|
||||||
test: () => {
|
test: () => {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@microsoft/applicationinsights-analytics-js",
|
"name": "@microsoft/applicationinsights-analytics-js",
|
||||||
"version": "1.0.0-beta.3",
|
"version": "1.0.0-beta.5",
|
||||||
"description": "Microsoft Application Insights Javascript SDK apis",
|
"description": "Microsoft Application Insights Javascript SDK apis",
|
||||||
"main": "dist/applicationinsights-analytics-js.min.js",
|
"main": "dist/applicationinsights-analytics-js.min.js",
|
||||||
"module": "dist-esm/applicationinsights-analytics-js.js",
|
"module": "dist-esm/applicationinsights-analytics-js.js",
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
||||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.3"
|
"@microsoft/applicationinsights-common": "^1.0.0-beta.7"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,8 @@ import {
|
||||||
PageView, IEnvelope, RemoteDependencyData, Event, IEventTelemetry,
|
PageView, IEnvelope, RemoteDependencyData, Event, IEventTelemetry,
|
||||||
TelemetryItemCreator, Data, Metric, Exception, SeverityLevel, Trace, IDependencyTelemetry,
|
TelemetryItemCreator, Data, Metric, Exception, SeverityLevel, Trace, IDependencyTelemetry,
|
||||||
IExceptionTelemetry, ITraceTelemetry, IMetricTelemetry, IAutoExceptionTelemetry,
|
IExceptionTelemetry, ITraceTelemetry, IMetricTelemetry, IAutoExceptionTelemetry,
|
||||||
IPageViewTelemetryInternal, IPageViewTelemetry, IPageViewPerformanceTelemetry
|
IPageViewTelemetryInternal, IPageViewTelemetry, IPageViewPerformanceTelemetry,
|
||||||
|
ConfigurationManager
|
||||||
} from "@microsoft/applicationinsights-common";
|
} from "@microsoft/applicationinsights-common";
|
||||||
import {
|
import {
|
||||||
IPlugin, IConfiguration, IAppInsightsCore,
|
IPlugin, IConfiguration, IAppInsightsCore,
|
||||||
|
@ -26,7 +27,6 @@ import { ITelemetryConfig } from "../JavaScriptSDK.Interfaces/ITelemetryConfig";
|
||||||
const durationProperty: string = "duration";
|
const durationProperty: string = "duration";
|
||||||
|
|
||||||
export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IAppInsightsInternal {
|
export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IAppInsightsInternal {
|
||||||
public static appInsightsDefaultConfig: IConfiguration;
|
|
||||||
public static Version = "2.0.1-beta";
|
public static Version = "2.0.1-beta";
|
||||||
public initialize: (config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) => void;
|
public initialize: (config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) => void;
|
||||||
public identifier: string = "ApplicationInsightsAnalytics";
|
public identifier: string = "ApplicationInsightsAnalytics";
|
||||||
|
@ -54,6 +54,28 @@ export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IApp
|
||||||
this.initialize = this._initialize.bind(this);
|
this.initialize = this._initialize.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static getDefaultConfig(config?: IConfig): IConfig {
|
||||||
|
if (!config) {
|
||||||
|
config = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
// set default values
|
||||||
|
config.sessionRenewalMs = 30 * 60 * 1000;
|
||||||
|
config.sessionExpirationMs = 24 * 60 * 60 * 1000;
|
||||||
|
config.disableExceptionTracking = Util.stringToBoolOrDefault(config.disableExceptionTracking);
|
||||||
|
config.autoTrackPageVisitTime = Util.stringToBoolOrDefault(config.autoTrackPageVisitTime);
|
||||||
|
|
||||||
|
if (isNaN(config.samplingPercentage) || config.samplingPercentage <= 0 || config.samplingPercentage >= 100) {
|
||||||
|
config.samplingPercentage = 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
config.isCookieUseDisabled = Util.stringToBoolOrDefault(config.isCookieUseDisabled);
|
||||||
|
config.isStorageUseDisabled = Util.stringToBoolOrDefault(config.isStorageUseDisabled);
|
||||||
|
config.isBrowserLinkTrackingEnabled = Util.stringToBoolOrDefault(config.isBrowserLinkTrackingEnabled);
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
public processTelemetry(env: ITelemetryItem) {
|
public processTelemetry(env: ITelemetryItem) {
|
||||||
var doNotSendItem = false;
|
var doNotSendItem = false;
|
||||||
try {
|
try {
|
||||||
|
@ -353,7 +375,7 @@ export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IApp
|
||||||
this._telemetryInitializers.push(telemetryInitializer);
|
this._telemetryInitializers.push(telemetryInitializer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _initialize(config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) {
|
private _initialize(config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||||
|
|
||||||
if (this._isInitialized) {
|
if (this._isInitialized) {
|
||||||
return;
|
return;
|
||||||
|
@ -367,21 +389,17 @@ export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IApp
|
||||||
this._logger = core.logger;
|
this._logger = core.logger;
|
||||||
this._globalconfig = {
|
this._globalconfig = {
|
||||||
instrumentationKey: config.instrumentationKey,
|
instrumentationKey: config.instrumentationKey,
|
||||||
endpointUrl: config.endpointUrl
|
endpointUrl: config.endpointUrl || "https://dc.services.visualstudio.com/v2/track"
|
||||||
};
|
};
|
||||||
|
|
||||||
this.config = config.extensionConfig && config.extensionConfig[this.identifier] ? config.extensionConfig[this.identifier] : <IConfig>{};
|
this.config = config.extensionConfig && config.extensionConfig[this.identifier] ? config.extensionConfig[this.identifier] : <IConfig>{};
|
||||||
|
|
||||||
// load default values if specified
|
// load default values if specified
|
||||||
var defaults: IConfiguration = ApplicationInsights.appInsightsDefaultConfig;
|
var defaults: IConfig = ApplicationInsights.getDefaultConfig();
|
||||||
if (defaults !== undefined) {
|
if (defaults !== undefined) {
|
||||||
if (defaults.extensions && defaults.extensions[this.identifier]) {
|
for (var field in defaults) {
|
||||||
for (var field in defaults.extensions[this.identifier]) {
|
// for each unspecified field, set the default value
|
||||||
// for each unspecified field, set the default value
|
this.config[field] = ConfigurationManager.getConfig(config, field, this.identifier, defaults[field]);
|
||||||
if (this.config[field] === undefined) {
|
|
||||||
this.config[field] = defaults[field];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._globalconfig) {
|
if (this._globalconfig) {
|
||||||
|
@ -405,14 +423,14 @@ export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IApp
|
||||||
|
|
||||||
var configGetters: ITelemetryConfig = {
|
var configGetters: ITelemetryConfig = {
|
||||||
instrumentationKey: () => config.instrumentationKey,
|
instrumentationKey: () => config.instrumentationKey,
|
||||||
accountId: () => this.config.accountId,
|
accountId: () => this.config.accountId || config.accountId,
|
||||||
sessionRenewalMs: () => this.config.sessionRenewalMs,
|
sessionRenewalMs: () => this.config.sessionRenewalMs || config.sessionRenewalMs,
|
||||||
sessionExpirationMs: () => this.config.sessionExpirationMs,
|
sessionExpirationMs: () => this.config.sessionExpirationMs || config.sessionExpirationMs,
|
||||||
sampleRate: () => this.config.samplingPercentage,
|
sampleRate: () => this.config.samplingPercentage || config.samplingPercentage,
|
||||||
cookieDomain: () => this.config.cookieDomain,
|
cookieDomain: () => this.config.cookieDomain || config.cookieDomain,
|
||||||
sdkExtension: () => this.config.sdkExtension,
|
sdkExtension: () => this.config.sdkExtension || config.sdkExtension,
|
||||||
isBrowserLinkTrackingEnabled: () => this.config.isBrowserLinkTrackingEnabled,
|
isBrowserLinkTrackingEnabled: () => this.config.isBrowserLinkTrackingEnabled || config.isBrowserLinkTrackingEnabled,
|
||||||
appId: () => this.config.appId
|
appId: () => this.config.appId || config.appId
|
||||||
}
|
}
|
||||||
|
|
||||||
this._pageViewManager = new PageViewManager(this, this.config.overridePageViewDuration, this.core);
|
this._pageViewManager = new PageViewManager(this, this.config.overridePageViewDuration, this.core);
|
||||||
|
|
|
@ -31,6 +31,19 @@ export class AjaxTests extends TestClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
public registerTests() {
|
public registerTests() {
|
||||||
|
this.testCase({
|
||||||
|
name: "Dependencies Configuration: Config can be set from root config",
|
||||||
|
test: () => {
|
||||||
|
let ajaxMonitor = new AjaxMonitor();
|
||||||
|
ajaxMonitor.initialize({
|
||||||
|
instrumentationKey: "instrumentation_key",
|
||||||
|
maxAjaxCallsPerView: 999,
|
||||||
|
}, new AppInsightsCore(), []);
|
||||||
|
|
||||||
|
Assert.equal(999, ajaxMonitor["_config"].maxAjaxCallsPerView, "Config options can be set from root config");
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
this.testCase({
|
this.testCase({
|
||||||
name: "Ajax: xhr.open gets instrumented",
|
name: "Ajax: xhr.open gets instrumented",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@microsoft/applicationinsights-dependencies-js",
|
"name": "@microsoft/applicationinsights-dependencies-js",
|
||||||
"version": "1.0.0-beta",
|
"version": "1.0.0-beta.3",
|
||||||
"description": "Microsoft Application Insights XHR dependencies plugin",
|
"description": "Microsoft Application Insights XHR dependencies plugin",
|
||||||
"main": "dist/applicationinsights-dependencies-js.min.js",
|
"main": "dist/applicationinsights-dependencies-js.min.js",
|
||||||
"module": "dist-esm/applicationinsights-dependencies-js.js",
|
"module": "dist-esm/applicationinsights-dependencies-js.js",
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
||||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.3"
|
"@microsoft/applicationinsights-common": "^1.0.0-beta.7"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
|
|
||||||
import {
|
import {
|
||||||
RequestHeaders, Util, CorrelationIdHelper, TelemetryItemCreator, ICorrelationConfig,
|
RequestHeaders, Util, CorrelationIdHelper, TelemetryItemCreator, ICorrelationConfig,
|
||||||
RemoteDependencyData, DateTimeUtils, DisabledPropertyName, Data, IDependencyTelemetry
|
RemoteDependencyData, DateTimeUtils, DisabledPropertyName, Data, IDependencyTelemetry,
|
||||||
|
IConfig, ConfigurationManager
|
||||||
} from '@microsoft/applicationinsights-common';
|
} from '@microsoft/applicationinsights-common';
|
||||||
import {
|
import {
|
||||||
CoreUtils, LoggingSeverity, _InternalMessageId, IDiagnosticLogger,
|
CoreUtils, LoggingSeverity, _InternalMessageId, IDiagnosticLogger,
|
||||||
|
@ -569,25 +570,44 @@ export class AjaxMonitor implements ITelemetryPlugin, IDependenciesPlugin, IInst
|
||||||
this.initialized = true;
|
this.initialized = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static getDefaultConfig(): ICorrelationConfig {
|
||||||
|
const config: ICorrelationConfig = {
|
||||||
|
maxAjaxCallsPerView: 500,
|
||||||
|
disableAjaxTracking: false,
|
||||||
|
disableFetchTracking: true,
|
||||||
|
disableCorrelationHeaders: false,
|
||||||
|
correlationHeaderExcludedDomains: [
|
||||||
|
"*.blob.core.windows.net",
|
||||||
|
"*.blob.core.chinacloudapi.cn",
|
||||||
|
"*.blob.core.cloudapi.de",
|
||||||
|
"*.blob.core.usgovcloudapi.net"],
|
||||||
|
appId: undefined,
|
||||||
|
enableCorsCorrelation: false
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getEmptyConfig(): ICorrelationConfig {
|
||||||
|
return {
|
||||||
|
maxAjaxCallsPerView: undefined,
|
||||||
|
disableAjaxTracking: undefined,
|
||||||
|
disableFetchTracking: undefined,
|
||||||
|
disableCorrelationHeaders: undefined,
|
||||||
|
correlationHeaderExcludedDomains: undefined,
|
||||||
|
appId: undefined,
|
||||||
|
enableCorsCorrelation: undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public initialize(config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) {
|
public initialize(config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||||
if (!this.initialized && !this._fetchInitialized) {
|
if (!this.initialized && !this._fetchInitialized) {
|
||||||
this._core = core;
|
this._core = core;
|
||||||
config.extensionConfig = config.extensionConfig ? config.extensionConfig : {};
|
const defaultConfig = AjaxMonitor.getDefaultConfig();
|
||||||
let c = config.extensionConfig[AjaxMonitor.identifier] ? config.extensionConfig[AjaxMonitor.identifier] : {};
|
this._config = AjaxMonitor.getEmptyConfig();
|
||||||
this._config = {
|
for (let field in defaultConfig) {
|
||||||
maxAjaxCallsPerView: !isNaN(c.maxAjaxCallsPerView) ? c.maxAjaxCallsPerView : 500,
|
this._config[field] = ConfigurationManager.getConfig(config, field, AjaxMonitor.identifier, defaultConfig[field]);
|
||||||
disableAjaxTracking: Util.stringToBoolOrDefault(c.disableAjaxTracking),
|
}
|
||||||
disableFetchTracking: Util.stringToBoolOrDefault(c.disableFetchTracking, true),
|
|
||||||
disableCorrelationHeaders: Util.stringToBoolOrDefault(c.disableCorrelationHeaders),
|
|
||||||
correlationHeaderExcludedDomains: c.correlationHeaderExcludedDomains || [
|
|
||||||
"*.blob.core.windows.net",
|
|
||||||
"*.blob.core.chinacloudapi.cn",
|
|
||||||
"*.blob.core.cloudapi.de",
|
|
||||||
"*.blob.core.usgovcloudapi.net"],
|
|
||||||
appId: c.appId,
|
|
||||||
enableCorsCorrelation: Util.stringToBoolOrDefault(c.enableCorsCorrelation)
|
|
||||||
};
|
|
||||||
|
|
||||||
if (this._config.disableAjaxTracking === false) {
|
if (this._config.disableAjaxTracking === false) {
|
||||||
this.instrumentXhr();
|
this.instrumentXhr();
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
import { AppInsightsCore, IConfiguration, DiagnosticLogger } from "@microsoft/applicationinsights-core-js";
|
import { AppInsightsCore, IConfiguration, DiagnosticLogger } from "@microsoft/applicationinsights-core-js";
|
||||||
import PropertiesPlugin from "../../src/PropertiesPlugin";
|
import PropertiesPlugin from "../../src/PropertiesPlugin";
|
||||||
|
import { ITelemetryConfig } from "../../src/Interfaces/ITelemetryConfig";
|
||||||
import { Util } from "@microsoft/applicationinsights-common";
|
import { Util } from "@microsoft/applicationinsights-common";
|
||||||
|
|
||||||
export class PropertiesTests extends TestClass {
|
export class PropertiesTests extends TestClass {
|
||||||
|
@ -20,9 +21,35 @@ export class PropertiesTests extends TestClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
public registerTests() {
|
public registerTests() {
|
||||||
|
this.addConfigTests();
|
||||||
this.addUserTests();
|
this.addUserTests();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private addConfigTests() {
|
||||||
|
this.testCase({
|
||||||
|
name: 'Properties Configuration: Config options can be passed from root config',
|
||||||
|
test: () => {
|
||||||
|
this.properties.initialize({
|
||||||
|
instrumentationKey: 'instrumentation_key',
|
||||||
|
accountId: 'abc',
|
||||||
|
samplingPercentage: 15,
|
||||||
|
sessionExpirationMs: 99999,
|
||||||
|
extensionConfig: {
|
||||||
|
[this.properties.identifier]: {
|
||||||
|
sessionExpirationMs: 88888
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, this.core, []);
|
||||||
|
const config: ITelemetryConfig = this.properties['_extensionConfig'];
|
||||||
|
Assert.equal(15, config.samplingPercentage(), 'Extension configs can be set via root config (number)');
|
||||||
|
Assert.equal('abc', config.accountId(), 'Extension configs can be set via root config (string)');
|
||||||
|
Assert.equal(88888, config.sessionExpirationMs(), 'Root config does not override extensionConfig field when both are present')
|
||||||
|
Assert.notEqual(99999, config.sessionExpirationMs(), 'extensionConfig overrides root config field when both are present');
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private addUserTests() {
|
private addUserTests() {
|
||||||
this.testCase({
|
this.testCase({
|
||||||
name: 'User: user context initializes from cookie when possible',
|
name: 'User: user context initializes from cookie when possible',
|
||||||
|
@ -411,7 +438,7 @@ export class PropertiesTests extends TestClass {
|
||||||
accountId: null,
|
accountId: null,
|
||||||
sessionRenewalMs: null,
|
sessionRenewalMs: null,
|
||||||
sessionExpirationMs: null,
|
sessionExpirationMs: null,
|
||||||
sampleRate: null,
|
samplingPercentage: null,
|
||||||
endpointUrl: null,
|
endpointUrl: null,
|
||||||
cookieDomain: null,
|
cookieDomain: null,
|
||||||
emitLineDelimitedJson: null,
|
emitLineDelimitedJson: null,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@microsoft/applicationinsights-properties-js",
|
"name": "@microsoft/applicationinsights-properties-js",
|
||||||
"version": "1.0.0-beta",
|
"version": "1.0.0-beta.3",
|
||||||
"description": "Microsoft Application Insights properties (Part A) plugin",
|
"description": "Microsoft Application Insights properties (Part A) plugin",
|
||||||
"main": "dist/applicationinsights-properties-js.min.js",
|
"main": "dist/applicationinsights-properties-js.min.js",
|
||||||
"module": "dist-esm/applicationinsights-properties-js.js",
|
"module": "dist-esm/applicationinsights-properties-js.js",
|
||||||
|
@ -28,8 +28,8 @@
|
||||||
"rollup-plugin-uglify": "^6.0.0"
|
"rollup-plugin-uglify": "^6.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta",
|
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
||||||
"@microsoft/applicationinsights-common": "^1.0.0-beta"
|
"@microsoft/applicationinsights-common": "^1.0.0-beta.7"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ export interface ITelemetryConfig {
|
||||||
instrumentationKey: () => string;
|
instrumentationKey: () => string;
|
||||||
accountId: () => string;
|
accountId: () => string;
|
||||||
sessionRenewalMs: () => number;
|
sessionRenewalMs: () => number;
|
||||||
sampleRate: () => number;
|
samplingPercentage: () => number;
|
||||||
sessionExpirationMs: () => number;
|
sessionExpirationMs: () => number;
|
||||||
cookieDomain: () => string;
|
cookieDomain: () => string;
|
||||||
sdkExtension: () => string;
|
sdkExtension: () => string;
|
||||||
|
|
|
@ -7,7 +7,7 @@ import {
|
||||||
ITelemetryPlugin, IConfiguration, CoreUtils,
|
ITelemetryPlugin, IConfiguration, CoreUtils,
|
||||||
IAppInsightsCore, IPlugin, ITelemetryItem, IDiagnosticLogger
|
IAppInsightsCore, IPlugin, ITelemetryItem, IDiagnosticLogger
|
||||||
} from '@microsoft/applicationinsights-core-js';
|
} from '@microsoft/applicationinsights-core-js';
|
||||||
import { ContextTagKeys, Util, PageView } from '@microsoft/applicationinsights-common';
|
import { ContextTagKeys, Util, PageView, ConfigurationManager, IConfig } from '@microsoft/applicationinsights-common';
|
||||||
import { Session, _SessionManager } from './Context/Session';
|
import { Session, _SessionManager } from './Context/Session';
|
||||||
import { Application } from './Context/Application';
|
import { Application } from './Context/Application';
|
||||||
import { Device } from './Context/Device';
|
import { Device } from './Context/Device';
|
||||||
|
@ -36,22 +36,27 @@ export default class PropertiesPlugin implements ITelemetryPlugin, ITelemetryCon
|
||||||
private _nextPlugin: ITelemetryPlugin;
|
private _nextPlugin: ITelemetryPlugin;
|
||||||
private _extensionConfig: ITelemetryConfig;
|
private _extensionConfig: ITelemetryConfig;
|
||||||
|
|
||||||
initialize(config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) {
|
public static getDefaultConfig(): ITelemetryConfig {
|
||||||
let extensionConfig = config.extensionConfig &&
|
const defaultConfig: ITelemetryConfig = {
|
||||||
config.extensionConfig[this.identifier] ?
|
instrumentationKey: () => undefined,
|
||||||
config.extensionConfig[this.identifier] : {};
|
accountId: () => null,
|
||||||
|
sessionRenewalMs: () => 30 * 60 * 1000,
|
||||||
|
samplingPercentage: () => 100,
|
||||||
|
sessionExpirationMs: () => 24 * 60 * 60 * 1000,
|
||||||
|
cookieDomain: () => null,
|
||||||
|
sdkExtension: () => null,
|
||||||
|
isBrowserLinkTrackingEnabled: () => false,
|
||||||
|
appId: () => null
|
||||||
|
}
|
||||||
|
return defaultConfig;
|
||||||
|
}
|
||||||
|
|
||||||
this._extensionConfig = {
|
initialize(config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||||
instrumentationKey: () => extensionConfig.instrumentationKey,
|
const defaultConfig: ITelemetryConfig = PropertiesPlugin.getDefaultConfig();
|
||||||
accountId: () => extensionConfig.accountId,
|
this._extensionConfig = this._extensionConfig || PropertiesPlugin.getDefaultConfig();
|
||||||
sessionRenewalMs: () => extensionConfig.sessionRenewalMs,
|
for (let field in defaultConfig) {
|
||||||
sampleRate: () => extensionConfig.sampleRate,
|
this._extensionConfig[field] = () => ConfigurationManager.getConfig(config, field, this.identifier, defaultConfig[field]());
|
||||||
sessionExpirationMs: () => extensionConfig.sessionExpirationMs,
|
}
|
||||||
cookieDomain: () => extensionConfig.cookieDomain,
|
|
||||||
sdkExtension: () => extensionConfig.sdkExtension,
|
|
||||||
isBrowserLinkTrackingEnabled: () => extensionConfig.isBrowserLinkTrackingEnabled,
|
|
||||||
appId: () => extensionConfig.appId
|
|
||||||
};
|
|
||||||
|
|
||||||
if (typeof window !== 'undefined') {
|
if (typeof window !== 'undefined') {
|
||||||
this._sessionManager = new _SessionManager(this._extensionConfig, core.logger);
|
this._sessionManager = new _SessionManager(this._extensionConfig, core.logger);
|
||||||
|
@ -62,7 +67,7 @@ export default class PropertiesPlugin implements ITelemetryPlugin, ITelemetryCon
|
||||||
this.user = new User(this._extensionConfig, core.logger);
|
this.user = new User(this._extensionConfig, core.logger);
|
||||||
this.operation = new Operation();
|
this.operation = new Operation();
|
||||||
this.session = new Session();
|
this.session = new Session();
|
||||||
this.sample = new Sample(this._extensionConfig.sampleRate(), core.logger);
|
this.sample = new Sample(this._extensionConfig.samplingPercentage(), core.logger);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче