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
|
||||
.tscache
|
||||
ApplicationInsights/Tests/Selenium/*.tests.js
|
||||
ApplicationInsights/Tests/Selenium/*.tests.d.ts
|
||||
ApplicationInsights/Tests/Selenium/*.tests.js.map
|
||||
**/Tests/Selenium/*.tests.js
|
||||
**/Tests/Selenium/*.tests.d.ts
|
||||
**/Tests/Selenium/*.tests.js.map
|
||||
|
||||
# Misc
|
||||
statistics.html
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"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",
|
||||
"main": "dist/applicationinsights-web.js",
|
||||
"module": "dist-esm/applicationinsights-web.js",
|
||||
|
@ -26,11 +26,11 @@
|
|||
"webpack-command": "^0.4.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@microsoft/applicationinsights-analytics-js": "^1.0.0-beta.3",
|
||||
"@microsoft/applicationinsights-channel-js": "^1.0.0-beta.3",
|
||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.4",
|
||||
"@microsoft/applicationinsights-analytics-js": "^1.0.0-beta.5",
|
||||
"@microsoft/applicationinsights-channel-js": "^1.0.0-beta.6",
|
||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.7",
|
||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
||||
"@microsoft/applicationinsights-properties-js": "^1.0.0-beta",
|
||||
"@microsoft/applicationinsights-dependencies-js": "^1.0.0-beta.1"
|
||||
"@microsoft/applicationinsights-properties-js": "^1.0.0-beta.3",
|
||||
"@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
|
||||
aiName = window["appInsightsSDK"];
|
||||
|
||||
if (window[aiName] === undefined) {
|
||||
// if no snippet is present, initialize default values
|
||||
AppAnalytics.appInsightsDefaultConfig = ApplicationInsights.getDefaultConfig();
|
||||
} else {
|
||||
if (window[aiName] !== undefined) {
|
||||
if (window[aiName].initialize) { // initialize if required
|
||||
// this is the typical case for browser+snippet
|
||||
var snippet: Snippet = window[aiName] || <any>{};
|
||||
|
|
|
@ -17,7 +17,7 @@ import { AjaxPlugin as DependenciesPlugin, IDependenciesPlugin } from '@microsof
|
|||
*/
|
||||
export interface Snippet {
|
||||
queue: Array<() => void>;
|
||||
config: IConfiguration;
|
||||
config: IConfiguration & IConfig;
|
||||
}
|
||||
|
||||
export interface IApplicationInsights extends IAppInsights, IDependenciesPlugin, IPropertiesPlugin {
|
||||
|
@ -41,7 +41,7 @@ export class Initialization implements IApplicationInsights {
|
|||
constructor(snippet: Snippet) {
|
||||
// initialize the queue and config in case they are undefined
|
||||
snippet.queue = snippet.queue || [];
|
||||
var config: IConfiguration = snippet.config || <any>{};
|
||||
var config: IConfiguration & IConfig = snippet.config || <any>{};
|
||||
|
||||
// ensure instrumentationKey is specified
|
||||
if (config && !config.instrumentationKey) {
|
||||
|
@ -50,8 +50,6 @@ export class Initialization implements IApplicationInsights {
|
|||
}
|
||||
|
||||
this.appInsights = new ApplicationInsights();
|
||||
// set default values using config passed through snippet
|
||||
config = Initialization.getDefaultConfig(config, this.appInsights.identifier);
|
||||
|
||||
this.properties = new PropertiesPlugin();
|
||||
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,
|
||||
ITelemetryItem
|
||||
} from "@microsoft/applicationinsights-core-js";
|
||||
import { IConfig } from "@microsoft/applicationinsights-common";
|
||||
import { Sender } from "@microsoft/applicationinsights-channel-js";
|
||||
|
||||
"use strict";
|
||||
|
@ -23,10 +24,10 @@ export class ApplicationInsights {
|
|||
|
||||
/**
|
||||
* Creates an instance of ApplicationInsights.
|
||||
* @param {IConfiguration} config
|
||||
* @param {IConfiguration & IConfig} config
|
||||
* @memberof ApplicationInsights
|
||||
*/
|
||||
constructor(config: IConfiguration) {
|
||||
constructor(config: IConfiguration & IConfig) {
|
||||
// initialize the queue and config in case they are undefined
|
||||
if (
|
||||
CoreUtils.isNullOrUndefined(config) ||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"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",
|
||||
"main": "dist/applicationinsights-web-basic.js",
|
||||
"module": "dist-esm/index.js",
|
||||
|
@ -22,8 +22,8 @@
|
|||
"typescript": "2.5.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.5",
|
||||
"@microsoft/applicationinsights-channel-js": "^1.0.0-beta.4",
|
||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.7",
|
||||
"@microsoft/applicationinsights-channel-js": "^1.0.0-beta.6",
|
||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@microsoft/applicationinsights-common",
|
||||
"version": "1.0.0-beta.5",
|
||||
"version": "1.0.0-beta.7",
|
||||
"description": "Microsoft Application Insights Common JavaScript Library",
|
||||
"main": "./dist/applicationinsights-common.js",
|
||||
"module": "./dist-esm/applicationinsights-common.js",
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
import { IConfiguration } from '@microsoft/applicationinsights-core-js';
|
||||
|
||||
export interface IConfig {
|
||||
emitLineDelimitedJson?: boolean;
|
||||
|
@ -39,3 +40,15 @@ export interface IConfig {
|
|||
// Internal
|
||||
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 { Data } from './Telemetry/Common/Data';
|
||||
export { SeverityLevel } from './Interfaces/Contracts/Generated/SeverityLevel';
|
||||
export { IConfig } from './Interfaces/IConfig';
|
||||
export { IConfig, ConfigurationManager } from './Interfaces/IConfig';
|
||||
export { IChannelControlsAI } from './Interfaces/IChannelControlsAI';
|
||||
export { ContextTagKeys } from './Interfaces/Contracts/Generated/ContextTagKeys';
|
||||
export { DataSanitizer } from './Telemetry/Common/DataSanitizer';
|
||||
|
|
|
@ -26,6 +26,33 @@ export class ApplicationInsightsTests extends TestClass {
|
|||
}
|
||||
|
||||
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({
|
||||
name: "AppInsightsTests: public members are correct",
|
||||
test: () => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@microsoft/applicationinsights-analytics-js",
|
||||
"version": "1.0.0-beta.3",
|
||||
"version": "1.0.0-beta.5",
|
||||
"description": "Microsoft Application Insights Javascript SDK apis",
|
||||
"main": "dist/applicationinsights-analytics-js.min.js",
|
||||
"module": "dist-esm/applicationinsights-analytics-js.js",
|
||||
|
@ -25,7 +25,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@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"
|
||||
}
|
||||
|
|
|
@ -10,7 +10,8 @@ import {
|
|||
PageView, IEnvelope, RemoteDependencyData, Event, IEventTelemetry,
|
||||
TelemetryItemCreator, Data, Metric, Exception, SeverityLevel, Trace, IDependencyTelemetry,
|
||||
IExceptionTelemetry, ITraceTelemetry, IMetricTelemetry, IAutoExceptionTelemetry,
|
||||
IPageViewTelemetryInternal, IPageViewTelemetry, IPageViewPerformanceTelemetry
|
||||
IPageViewTelemetryInternal, IPageViewTelemetry, IPageViewPerformanceTelemetry,
|
||||
ConfigurationManager
|
||||
} from "@microsoft/applicationinsights-common";
|
||||
import {
|
||||
IPlugin, IConfiguration, IAppInsightsCore,
|
||||
|
@ -26,7 +27,6 @@ import { ITelemetryConfig } from "../JavaScriptSDK.Interfaces/ITelemetryConfig";
|
|||
const durationProperty: string = "duration";
|
||||
|
||||
export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IAppInsightsInternal {
|
||||
public static appInsightsDefaultConfig: IConfiguration;
|
||||
public static Version = "2.0.1-beta";
|
||||
public initialize: (config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) => void;
|
||||
public identifier: string = "ApplicationInsightsAnalytics";
|
||||
|
@ -54,6 +54,28 @@ export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IApp
|
|||
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) {
|
||||
var doNotSendItem = false;
|
||||
try {
|
||||
|
@ -353,7 +375,7 @@ export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IApp
|
|||
this._telemetryInitializers.push(telemetryInitializer);
|
||||
}
|
||||
|
||||
private _initialize(config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||
private _initialize(config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||
|
||||
if (this._isInitialized) {
|
||||
return;
|
||||
|
@ -367,21 +389,17 @@ export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IApp
|
|||
this._logger = core.logger;
|
||||
this._globalconfig = {
|
||||
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>{};
|
||||
|
||||
// load default values if specified
|
||||
var defaults: IConfiguration = ApplicationInsights.appInsightsDefaultConfig;
|
||||
var defaults: IConfig = ApplicationInsights.getDefaultConfig();
|
||||
if (defaults !== undefined) {
|
||||
if (defaults.extensions && defaults.extensions[this.identifier]) {
|
||||
for (var field in defaults.extensions[this.identifier]) {
|
||||
for (var field in defaults) {
|
||||
// for each unspecified field, set the default value
|
||||
if (this.config[field] === undefined) {
|
||||
this.config[field] = defaults[field];
|
||||
}
|
||||
}
|
||||
this.config[field] = ConfigurationManager.getConfig(config, field, this.identifier, defaults[field]);
|
||||
}
|
||||
|
||||
if (this._globalconfig) {
|
||||
|
@ -405,14 +423,14 @@ export class ApplicationInsights implements IAppInsights, ITelemetryPlugin, IApp
|
|||
|
||||
var configGetters: ITelemetryConfig = {
|
||||
instrumentationKey: () => config.instrumentationKey,
|
||||
accountId: () => this.config.accountId,
|
||||
sessionRenewalMs: () => this.config.sessionRenewalMs,
|
||||
sessionExpirationMs: () => this.config.sessionExpirationMs,
|
||||
sampleRate: () => this.config.samplingPercentage,
|
||||
cookieDomain: () => this.config.cookieDomain,
|
||||
sdkExtension: () => this.config.sdkExtension,
|
||||
isBrowserLinkTrackingEnabled: () => this.config.isBrowserLinkTrackingEnabled,
|
||||
appId: () => this.config.appId
|
||||
accountId: () => this.config.accountId || config.accountId,
|
||||
sessionRenewalMs: () => this.config.sessionRenewalMs || config.sessionRenewalMs,
|
||||
sessionExpirationMs: () => this.config.sessionExpirationMs || config.sessionExpirationMs,
|
||||
sampleRate: () => this.config.samplingPercentage || config.samplingPercentage,
|
||||
cookieDomain: () => this.config.cookieDomain || config.cookieDomain,
|
||||
sdkExtension: () => this.config.sdkExtension || config.sdkExtension,
|
||||
isBrowserLinkTrackingEnabled: () => this.config.isBrowserLinkTrackingEnabled || config.isBrowserLinkTrackingEnabled,
|
||||
appId: () => this.config.appId || config.appId
|
||||
}
|
||||
|
||||
this._pageViewManager = new PageViewManager(this, this.config.overridePageViewDuration, this.core);
|
||||
|
|
|
@ -31,6 +31,19 @@ export class AjaxTests extends TestClass {
|
|||
}
|
||||
|
||||
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({
|
||||
name: "Ajax: xhr.open gets instrumented",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@microsoft/applicationinsights-dependencies-js",
|
||||
"version": "1.0.0-beta",
|
||||
"version": "1.0.0-beta.3",
|
||||
"description": "Microsoft Application Insights XHR dependencies plugin",
|
||||
"main": "dist/applicationinsights-dependencies-js.min.js",
|
||||
"module": "dist-esm/applicationinsights-dependencies-js.js",
|
||||
|
@ -29,7 +29,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@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"
|
||||
}
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
import {
|
||||
RequestHeaders, Util, CorrelationIdHelper, TelemetryItemCreator, ICorrelationConfig,
|
||||
RemoteDependencyData, DateTimeUtils, DisabledPropertyName, Data, IDependencyTelemetry
|
||||
RemoteDependencyData, DateTimeUtils, DisabledPropertyName, Data, IDependencyTelemetry,
|
||||
IConfig, ConfigurationManager
|
||||
} from '@microsoft/applicationinsights-common';
|
||||
import {
|
||||
CoreUtils, LoggingSeverity, _InternalMessageId, IDiagnosticLogger,
|
||||
|
@ -570,24 +571,43 @@ export class AjaxMonitor implements ITelemetryPlugin, IDependenciesPlugin, IInst
|
|||
}
|
||||
}
|
||||
|
||||
public initialize(config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||
if (!this.initialized && !this._fetchInitialized) {
|
||||
this._core = core;
|
||||
config.extensionConfig = config.extensionConfig ? config.extensionConfig : {};
|
||||
let c = config.extensionConfig[AjaxMonitor.identifier] ? config.extensionConfig[AjaxMonitor.identifier] : {};
|
||||
this._config = {
|
||||
maxAjaxCallsPerView: !isNaN(c.maxAjaxCallsPerView) ? c.maxAjaxCallsPerView : 500,
|
||||
disableAjaxTracking: Util.stringToBoolOrDefault(c.disableAjaxTracking),
|
||||
disableFetchTracking: Util.stringToBoolOrDefault(c.disableFetchTracking, true),
|
||||
disableCorrelationHeaders: Util.stringToBoolOrDefault(c.disableCorrelationHeaders),
|
||||
correlationHeaderExcludedDomains: c.correlationHeaderExcludedDomains || [
|
||||
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: c.appId,
|
||||
enableCorsCorrelation: Util.stringToBoolOrDefault(c.enableCorsCorrelation)
|
||||
};
|
||||
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 & IConfig, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||
if (!this.initialized && !this._fetchInitialized) {
|
||||
this._core = core;
|
||||
const defaultConfig = AjaxMonitor.getDefaultConfig();
|
||||
this._config = AjaxMonitor.getEmptyConfig();
|
||||
for (let field in defaultConfig) {
|
||||
this._config[field] = ConfigurationManager.getConfig(config, field, AjaxMonitor.identifier, defaultConfig[field]);
|
||||
}
|
||||
|
||||
if (this._config.disableAjaxTracking === false) {
|
||||
this.instrumentXhr();
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
import { AppInsightsCore, IConfiguration, DiagnosticLogger } from "@microsoft/applicationinsights-core-js";
|
||||
import PropertiesPlugin from "../../src/PropertiesPlugin";
|
||||
import { ITelemetryConfig } from "../../src/Interfaces/ITelemetryConfig";
|
||||
import { Util } from "@microsoft/applicationinsights-common";
|
||||
|
||||
export class PropertiesTests extends TestClass {
|
||||
|
@ -20,9 +21,35 @@ export class PropertiesTests extends TestClass {
|
|||
}
|
||||
|
||||
public registerTests() {
|
||||
this.addConfigTests();
|
||||
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() {
|
||||
this.testCase({
|
||||
name: 'User: user context initializes from cookie when possible',
|
||||
|
@ -411,7 +438,7 @@ export class PropertiesTests extends TestClass {
|
|||
accountId: null,
|
||||
sessionRenewalMs: null,
|
||||
sessionExpirationMs: null,
|
||||
sampleRate: null,
|
||||
samplingPercentage: null,
|
||||
endpointUrl: null,
|
||||
cookieDomain: null,
|
||||
emitLineDelimitedJson: null,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@microsoft/applicationinsights-properties-js",
|
||||
"version": "1.0.0-beta",
|
||||
"version": "1.0.0-beta.3",
|
||||
"description": "Microsoft Application Insights properties (Part A) plugin",
|
||||
"main": "dist/applicationinsights-properties-js.min.js",
|
||||
"module": "dist-esm/applicationinsights-properties-js.js",
|
||||
|
@ -28,8 +28,8 @@
|
|||
"rollup-plugin-uglify": "^6.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta",
|
||||
"@microsoft/applicationinsights-common": "^1.0.0-beta"
|
||||
"@microsoft/applicationinsights-core-js": "^1.0.0-beta.2",
|
||||
"@microsoft/applicationinsights-common": "^1.0.0-beta.7"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ export interface ITelemetryConfig {
|
|||
instrumentationKey: () => string;
|
||||
accountId: () => string;
|
||||
sessionRenewalMs: () => number;
|
||||
sampleRate: () => number;
|
||||
samplingPercentage: () => number;
|
||||
sessionExpirationMs: () => number;
|
||||
cookieDomain: () => string;
|
||||
sdkExtension: () => string;
|
||||
|
|
|
@ -7,7 +7,7 @@ import {
|
|||
ITelemetryPlugin, IConfiguration, CoreUtils,
|
||||
IAppInsightsCore, IPlugin, ITelemetryItem, IDiagnosticLogger
|
||||
} 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 { Application } from './Context/Application';
|
||||
import { Device } from './Context/Device';
|
||||
|
@ -36,22 +36,27 @@ export default class PropertiesPlugin implements ITelemetryPlugin, ITelemetryCon
|
|||
private _nextPlugin: ITelemetryPlugin;
|
||||
private _extensionConfig: ITelemetryConfig;
|
||||
|
||||
initialize(config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||
let extensionConfig = config.extensionConfig &&
|
||||
config.extensionConfig[this.identifier] ?
|
||||
config.extensionConfig[this.identifier] : {};
|
||||
public static getDefaultConfig(): ITelemetryConfig {
|
||||
const defaultConfig: ITelemetryConfig = {
|
||||
instrumentationKey: () => undefined,
|
||||
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 = {
|
||||
instrumentationKey: () => extensionConfig.instrumentationKey,
|
||||
accountId: () => extensionConfig.accountId,
|
||||
sessionRenewalMs: () => extensionConfig.sessionRenewalMs,
|
||||
sampleRate: () => extensionConfig.sampleRate,
|
||||
sessionExpirationMs: () => extensionConfig.sessionExpirationMs,
|
||||
cookieDomain: () => extensionConfig.cookieDomain,
|
||||
sdkExtension: () => extensionConfig.sdkExtension,
|
||||
isBrowserLinkTrackingEnabled: () => extensionConfig.isBrowserLinkTrackingEnabled,
|
||||
appId: () => extensionConfig.appId
|
||||
};
|
||||
initialize(config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[]) {
|
||||
const defaultConfig: ITelemetryConfig = PropertiesPlugin.getDefaultConfig();
|
||||
this._extensionConfig = this._extensionConfig || PropertiesPlugin.getDefaultConfig();
|
||||
for (let field in defaultConfig) {
|
||||
this._extensionConfig[field] = () => ConfigurationManager.getConfig(config, field, this.identifier, defaultConfig[field]());
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
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.operation = new Operation();
|
||||
this.session = new Session();
|
||||
this.sample = new Sample(this._extensionConfig.sampleRate(), core.logger);
|
||||
this.sample = new Sample(this._extensionConfig.samplingPercentage(), core.logger);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче