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:
Mark Wolff 2018-11-16 13:28:03 -08:00 коммит произвёл GitHub
Родитель 5571517180
Коммит 90f1059e31
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
19 изменённых файлов: 207 добавлений и 140 удалений

6
.gitignore поставляемый
Просмотреть файл

@ -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;
@ -38,4 +39,16 @@ 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 each unspecified field, set the default value
if (this.config[field] === undefined) {
this.config[field] = defaults[field];
}
}
for (var field in defaults) {
// for each unspecified field, set the default value
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,
@ -569,25 +570,44 @@ export class AjaxMonitor implements ITelemetryPlugin, IDependenciesPlugin, IInst
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) {
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 || [
"*.blob.core.windows.net",
"*.blob.core.chinacloudapi.cn",
"*.blob.core.cloudapi.de",
"*.blob.core.usgovcloudapi.net"],
appId: c.appId,
enableCorsCorrelation: Util.stringToBoolOrDefault(c.enableCorsCorrelation)
};
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);
}
}