{"version":3,"sources":["appInsights.js","appInsights.ts"],"names":["Portico","Insights","SeverityLevel","module","angular","config","$provide","$httpProvider","decorator","$delegate","debug","delegateMethod","Verbose","info","Information","warn","Warning","error","Error","log","interceptLogging","origExceptionHandler","exception","window","appInsights","AI","trackException","undefined","interceptExceptions","factory","webServiceUrls","track","response","aiData","data","extend","responseFinishedTime","Microsoft","ApplicationInsights","dateTime","Now","status","CalculateMetrics","dependency","RemoteDependencyData","id","getAbsoluteUrl","getPathName","ajaxTotalDuration","method","correlationContext","getCorrelationContext","target","ai","trackDependencyData","headers","RequestHeaders","requestContextHeader","responseHeader","CorrelationIdHelper","e","request","_","startsWith","url","gateway","ajaxRecord","Util","newId","requestUrl","requestSentTime","requestIdHeader","context","appId","requestContextAppIdFormat","responseError","interceptors","push","interceptHttp","Options","this","applicationName","autoStateChangeTracking","properties","tags","run","$rootScope","$state","$location","$timeout","dataService","storageService","options","queue","addTelemetryInitializer","envelope","item","baseData","merge","getProgramId","toString","getEnvironmentValue","Models","KnownKeyNames","tenant","sessionId","getItem","StorageType","Session","SESSION_STORAGE_KEY","current","name","each","params","value","key","get","trackPageView","$on","event","to","toParams","from","fromParams","startTrackEvent","getEventName","stopTrackEvent","toHref","href","fromHref","stopTrackPage","getPageName","startTrackPage","q","_a","apply","__spread","console","page","pageParams","replace","provider","serverConstants","AppInsightsProvider","_this","_options","$get","prototype","configure","originalFn","level","interceptingFn","args","slice","call","arguments","message","join","trackTrace"],"mappings":"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","file":"appInsights.js","sourcesContent":[null,"namespace Portico.Insights {\r\n // Application Insights Module\r\n const module = angular.module('app');\r\n\r\n // setup some features that can only be done during the configure pass\r\n module.config([\r\n '$provide',\r\n '$httpProvider',\r\n ($provide: ng.auto.IProvideService, $httpProvider: ng.IHttpProvider) => {\r\n interceptLogging($provide);\r\n interceptExceptions($provide);\r\n interceptHttp($provide, $httpProvider);\r\n },\r\n ]);\r\n\r\n interface AiRecord {\r\n getAbsoluteUrl(): string;\r\n getPathName(): string;\r\n CalculateMetrics(): void;\r\n completed: boolean;\r\n requestHeadersSize: number | null;\r\n ttfb: any;\r\n responseReceivingDuration: number | null;\r\n callbackDuration: number | null;\r\n ajaxTotalDuration: number | null;\r\n aborted: any;\r\n pageUrl: any;\r\n requestUrl: any;\r\n requestSize: number;\r\n method: string;\r\n status: number;\r\n requestSentTime: number | null;\r\n responseStartedTime: number | null;\r\n responseFinishedTime: number | null;\r\n callbackFinishedTime: number | null;\r\n endTime: number | null;\r\n id: string;\r\n }\r\n\r\n enum SeverityLevel {\r\n Verbose = 0,\r\n Information = 1,\r\n Warning = 2,\r\n Error = 3,\r\n Critical = 4,\r\n }\r\n\r\n class Options {\r\n applicationName = 'Portico';\r\n autoStateChangeTracking = true;\r\n properties: { [key: string]: any } = {};\r\n tags: { [key: string]: any } = {};\r\n }\r\n\r\n // the run block sets up automatic page view tracking\r\n module.run([\r\n '$rootScope',\r\n '$state',\r\n '$location',\r\n '$timeout',\r\n 'dataService',\r\n 'storageService',\r\n 'appInsights',\r\n 'appInsightsSettings',\r\n (\r\n $rootScope: ng.IRootScopeService,\r\n $state: ng.ui.IStateService,\r\n $location: ng.ILocationService,\r\n $timeout: ng.ITimeoutService,\r\n dataService: Portico.Services.IDataService,\r\n storageService: Portico.Services.IStorageService,\r\n appInsights: appInsights,\r\n options: Options\r\n ) => {\r\n if (!appInsights.ai) {\r\n // ai is not loaded\r\n console.warn('Application Insights not loaded');\r\n return;\r\n }\r\n\r\n if (appInsights.options) {\r\n angular.extend(appInsights.options, options);\r\n }\r\n\r\n const queue: Array<() => void> = [];\r\n\r\n queue.push(() => {\r\n appInsights.ai.context.addTelemetryInitializer(envelope => {\r\n try {\r\n let item: {\r\n properties: { [key: string]: string };\r\n measurements: { [key: string]: number };\r\n } =\r\n envelope.data.baseData;\r\n envelope.tags['ai.cloud.role'] = envelope.tags['ai.device.roleName'] = 'Portico UI';\r\n\r\n item.properties = _.merge(item.properties, appInsights.options.properties);\r\n item.properties['programId'] = dataService.getProgramId().toString();\r\n item.properties['tenantId'] = dataService.getEnvironmentValue(\r\n Portico.Models.KnownKeyNames.tenant\r\n );\r\n const sessionId = storageService.getItem(\r\n Models.StorageType.Session,\r\n Portico.Models.SESSION_STORAGE_KEY\r\n );\r\n if (sessionId) {\r\n item.properties[Portico.Models.SESSION_STORAGE_KEY] = sessionId;\r\n }\r\n } catch (e) {\r\n // We're not ready yet, which is okay\r\n }\r\n });\r\n\r\n appInsights.ai.context.addTelemetryInitializer(envelope => {\r\n let item: {\r\n properties: { [key: string]: string };\r\n measurements: { [key: string]: number };\r\n } =\r\n envelope.data.baseData;\r\n item.properties['state'] = $state.current.name;\r\n _.each(\r\n $state.params,\r\n (value, key) => (item.properties[`param.${key}`] = value)\r\n );\r\n });\r\n\r\n appInsights.ai.context.addTelemetryInitializer(envelope => {\r\n let item: {\r\n properties: { [key: string]: string };\r\n measurements: { [key: string]: number };\r\n } =\r\n envelope.data.baseData;\r\n item.properties['portalId'] = _.get(dataService, 'setup.portal.id', null);\r\n envelope.tags['ai.cloud.roleInstance'] = envelope.tags['ai.device.roleInstance'] = item.properties['portalName'] = _.get(dataService, 'setup.portal.name', null);\r\n });\r\n\r\n appInsights.ai.trackPageView();\r\n\r\n // $timeout(() => appInsights.ai.startTrackPage(getPageName($state.current, $state.params)));\r\n });\r\n\r\n function getEventName(to: ng.ui.IState, toParams: object) {\r\n return `${appInsights.options.applicationName}:goto:${href(to, toParams)}`;\r\n }\r\n function getPageName(page: ng.ui.IState, pageParams: object) {\r\n return `${appInsights.options.applicationName}@${href(page, pageParams)}`;\r\n }\r\n function href(page: ng.ui.IState, pageParams: object) {\r\n return ($state.href(page, pageParams) || '').replace('#', '');\r\n }\r\n\r\n if (appInsights.options.autoStateChangeTracking) {\r\n $rootScope.$on(\r\n '$stateChangeStart',\r\n (\r\n event: ng.IAngularEvent,\r\n to: ng.ui.IState,\r\n toParams: { [key: string]: any },\r\n from: ng.ui.IState,\r\n fromParams: { [key: string]: any }\r\n ) => {\r\n if (appInsights.ai.startTrackEvent) {\r\n appInsights.ai.startTrackEvent(getEventName(to, toParams));\r\n }\r\n }\r\n );\r\n\r\n $rootScope.$on(\r\n '$stateChangeError',\r\n (\r\n event: ng.IAngularEvent,\r\n to: ng.ui.IState,\r\n toParams: { [key: string]: any },\r\n from: ng.ui.IState,\r\n fromParams: { [key: string]: any }\r\n ) => {\r\n if (appInsights.ai.stopTrackEvent) {\r\n appInsights.ai.stopTrackEvent(getEventName(to, toParams), {\r\n toHref: href(to, toParams),\r\n fromHref: href(from, fromParams),\r\n });\r\n }\r\n }\r\n );\r\n\r\n $rootScope.$on(\r\n '$stateChangeSuccess',\r\n (\r\n event: ng.IAngularEvent,\r\n to: ng.ui.IState,\r\n toParams: { [key: string]: any },\r\n from: ng.ui.IState,\r\n fromParams: { [key: string]: any }\r\n ) => {\r\n if (appInsights.ai.stopTrackEvent) {\r\n appInsights.ai.stopTrackEvent(getEventName(to, toParams), {\r\n toHref: href(to, toParams),\r\n fromHref: href(from, fromParams),\r\n });\r\n appInsights.ai.stopTrackPage(\r\n getPageName(from, fromParams),\r\n href(from, fromParams),\r\n {\r\n toHref: href(to, toParams),\r\n fromHref: href(from, fromParams),\r\n }\r\n );\r\n appInsights.ai.startTrackPage(getPageName(to, toParams));\r\n }\r\n }\r\n );\r\n\r\n _.each(queue, q => {\r\n if (appInsights.ai.queue) {\r\n appInsights.ai.queue.push(...queue);\r\n } else {\r\n q();\r\n }\r\n });\r\n }\r\n },\r\n ]);\r\n\r\n export interface appInsights {\r\n ai: any;\r\n options: Options;\r\n }\r\n\r\n module.provider('appInsights', [\r\n 'serverConstants',\r\n serverConstants => new AppInsightsProvider(serverConstants),\r\n ]);\r\n\r\n class AppInsightsProvider implements angular.IServiceProvider {\r\n constructor(private serverConstants: Portico.Models.Interfaces.IServerConstants) {}\r\n // configuration properties for the provider\r\n private _options = new Options();\r\n\r\n configure(options: Options) {\r\n angular.extend(this._options, options);\r\n }\r\n $get = [\r\n () => {\r\n return {\r\n options: this._options,\r\n ai: (window as any).appInsights,\r\n };\r\n },\r\n ];\r\n }\r\n\r\n function delegateMethod(originalFn: ng.ILogCall, level: SeverityLevel): ng.ILogCall {\r\n var interceptingFn = function() {\r\n var args = [].slice.call(arguments);\r\n // track the call\r\n var message = args.join(' ');\r\n // Call the original\r\n originalFn.apply(null, args);\r\n if ((window).appInsights) (window).appInsights.trackTrace(message, {}, level);\r\n };\r\n\r\n angular.extend(interceptingFn, originalFn);\r\n return interceptingFn;\r\n }\r\n\r\n // $log interceptor .. will send log data to application insights, once app insights is\r\n // registered. $provide is only available in the config phase, so we need to setup\r\n // the decorator before app insights is instantiated.\r\n function interceptLogging($provide: ng.auto.IProvideService) {\r\n $provide.decorator('$log', [\r\n '$delegate',\r\n ($delegate: ng.ILogService) => {\r\n $delegate.debug = delegateMethod($delegate.debug, SeverityLevel.Verbose);\r\n $delegate.info = delegateMethod($delegate.info, SeverityLevel.Information);\r\n $delegate.warn = delegateMethod($delegate.warn, SeverityLevel.Warning);\r\n $delegate.error = delegateMethod($delegate.error, SeverityLevel.Error);\r\n $delegate.log = delegateMethod($delegate.log, SeverityLevel.Verbose);\r\n\r\n return $delegate;\r\n },\r\n ]);\r\n }\r\n\r\n function interceptExceptions($provide: ng.auto.IProvideService) {\r\n $provide.decorator('$exceptionHandler', [\r\n '$delegate',\r\n ($delegate: ng.IExceptionHandlerService) => {\r\n const origExceptionHandler = $delegate;\r\n return exception => {\r\n // Call the original\r\n origExceptionHandler(exception);\r\n if ((window).appInsights && (window).AI)\r\n (window).appInsights.trackException(\r\n exception,\r\n undefined,\r\n undefined,\r\n undefined,\r\n SeverityLevel.Error\r\n );\r\n };\r\n },\r\n ]);\r\n }\r\n\r\n function interceptHttp($provide: ng.auto.IProvideService, $httpProvider: ng.IHttpProvider) {\r\n type ResponseType = ng.IHttpResponse & { config: { aiData: AiRecord } };\r\n type RequestType = ng.IRequestConfig & { aiData: AiRecord };\r\n $provide.factory('aiTrackGateway', [\r\n 'appInsights',\r\n 'webServiceUrls',\r\n (\r\n appInsights: Portico.Insights.appInsights,\r\n webServiceUrls: Portico.Models.Interfaces.IWebServiceUrls\r\n ) => {\r\n function track(response: ResponseType) {\r\n if (!response || !response.config || !response.config.aiData)\r\n return;\r\n\r\n const data = response.config.aiData;\r\n angular.extend(data, >{\r\n responseFinishedTime: (window as any).Microsoft.ApplicationInsights.dateTime.Now(),\r\n status: response.status,\r\n });\r\n data.CalculateMetrics();\r\n\r\n var dependency = new (window as any).AI.RemoteDependencyData(\r\n data.id,\r\n data.getAbsoluteUrl(),\r\n data.getPathName(),\r\n data.ajaxTotalDuration,\r\n +data.status >= 200 && +data.status < 400,\r\n +data.status,\r\n data.method\r\n );\r\n\r\n // enrich dependency target with correlation context from the server\r\n var correlationContext = getCorrelationContext(response);\r\n if (correlationContext) {\r\n dependency.target = dependency.target + ' | ' + correlationContext;\r\n }\r\n\r\n if ((appInsights as any).ai.trackDependencyData)\r\n (appInsights as any).ai.trackDependencyData(data);\r\n\r\n response.config.aiData = null;\r\n }\r\n\r\n function getCorrelationContext(response: ResponseType) {\r\n try {\r\n var responseHeadersString =\r\n response.headers[\r\n (window as any).Microsoft.ApplicationInsights.RequestHeaders\r\n .requestContextHeader\r\n ];\r\n if (responseHeadersString !== null) {\r\n var responseHeader =\r\n response.headers[\r\n (window as any).Microsoft.ApplicationInsights.RequestHeaders\r\n .requestContextHeader\r\n ];\r\n return (window as any).Microsoft.ApplicationInsights.CorrelationIdHelper.getCorrelationContext(\r\n responseHeader\r\n );\r\n }\r\n } catch (e) {}\r\n }\r\n\r\n return {\r\n request(config: RequestType) {\r\n if (_.startsWith(config.url, webServiceUrls.gateway.url)) {\r\n if (!(window as any).Microsoft ||\r\n !(window as any).Microsoft.ApplicationInsights ||\r\n !(window as any).Microsoft.ApplicationInsights.ajaxRecord)\r\n return config;\r\n const data = (config.aiData = new (window as any).Microsoft.ApplicationInsights.ajaxRecord(\r\n (window as any).Microsoft.ApplicationInsights.Util.newId()\r\n ));\r\n angular.extend(data, >{\r\n method: config.method,\r\n requestUrl: config.url,\r\n requestSentTime: (window as any).Microsoft.ApplicationInsights.dateTime.Now(),\r\n });\r\n config.headers[\r\n (window as any).Microsoft.ApplicationInsights.RequestHeaders.requestIdHeader\r\n ] =\r\n data.id;\r\n if (appInsights.ai.context) {\r\n const appId = (appInsights as any).ai.context.appId();\r\n if (appId) {\r\n config.headers[\r\n (window as any).Microsoft.ApplicationInsights.RequestHeaders.requestContextHeader\r\n ] = `${\r\n (window as any).Microsoft.ApplicationInsights.RequestHeaders\r\n .requestContextAppIdFormat\r\n }${appId}`;\r\n }\r\n }\r\n }\r\n return config;\r\n },\r\n response(response: ResponseType) {\r\n track(response);\r\n return response;\r\n },\r\n responseError(response: ResponseType) {\r\n track(response);\r\n return response;\r\n },\r\n };\r\n },\r\n ]);\r\n $httpProvider.interceptors.push('aiTrackGateway');\r\n }\r\n}\r\n"]}