@microsoft/applicationinsights-dependencies-js 2.8.4-nightly.2205-08 → 2.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/applicationinsights-dependencies-js.integrity.json +9 -9
- package/browser/applicationinsights-dependencies-js.js +310 -190
- package/browser/applicationinsights-dependencies-js.js.map +1 -1
- package/browser/applicationinsights-dependencies-js.min.js +2 -2
- package/browser/applicationinsights-dependencies-js.min.js.map +1 -1
- package/dist/applicationinsights-dependencies-js.api.json +92 -3
- package/dist/applicationinsights-dependencies-js.api.md +8 -1
- package/dist/applicationinsights-dependencies-js.d.ts +65 -2
- package/dist/applicationinsights-dependencies-js.js +310 -190
- package/dist/applicationinsights-dependencies-js.js.map +1 -1
- package/dist/applicationinsights-dependencies-js.min.js +2 -2
- package/dist/applicationinsights-dependencies-js.min.js.map +1 -1
- package/dist/applicationinsights-dependencies-js.rollup.d.ts +65 -2
- package/dist-esm/DependencyListener.js +8 -0
- package/dist-esm/DependencyListener.js.map +1 -0
- package/dist-esm/ajax.js +121 -45
- package/dist-esm/ajax.js.map +1 -1
- package/dist-esm/ajaxRecord.js +1 -1
- package/dist-esm/ajaxUtils.js +1 -1
- package/dist-esm/applicationinsights-dependencies-js.js +1 -1
- package/package.json +57 -60
- package/src/DependencyListener.ts +65 -0
- package/src/ajax.ts +121 -9
- package/src/ajaxRecord.ts +1 -0
- package/types/DependencyListener.d.ts +52 -0
- package/types/ajax.d.ts +9 -1
- package/types/ajaxRecord.d.ts +1 -0
- package/types/tsdoc-metadata.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Microsoft Application Insights XHR dependencies plugin, 2.8.4
|
|
2
|
+
* Microsoft Application Insights XHR dependencies plugin, 2.8.4
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* Microsoft Application Insights Team
|
|
@@ -42,6 +42,13 @@ export declare class AjaxPlugin extends BaseTelemetryPlugin implements IDependen
|
|
|
42
42
|
[key: string]: any;
|
|
43
43
|
}): void;
|
|
44
44
|
includeCorrelationHeaders(ajaxData: ajaxRecord, input?: Request | string, init?: RequestInit, xhr?: XMLHttpRequestInstrumented): any;
|
|
45
|
+
/**
|
|
46
|
+
* Add an ajax listener which is called just prior to the request being sent and before the correlation headers are added, to allow you
|
|
47
|
+
* to access the headers and modify the values used to generate the distributed tracing correlation headers.
|
|
48
|
+
* @param dependencyListener - The Telemetry Initializer function
|
|
49
|
+
* @returns - A IDependencyListenerHandler to enable the initializer to be removed
|
|
50
|
+
*/
|
|
51
|
+
addDependencyListener(dependencyListener: DependencyListenerFunction): IDependencyListenerHandler;
|
|
45
52
|
/**
|
|
46
53
|
* Protected function to allow sub classes the chance to add additional properties to the dependency event
|
|
47
54
|
* before it's sent. This function calls track, so sub-classes must call this function after they have
|
|
@@ -82,12 +89,15 @@ export declare class ajaxRecord {
|
|
|
82
89
|
clientFailure: number;
|
|
83
90
|
traceID: string;
|
|
84
91
|
spanID: string;
|
|
92
|
+
traceFlags?: number;
|
|
85
93
|
constructor(traceID: string, spanID: string, logger: IDiagnosticLogger);
|
|
86
94
|
getAbsoluteUrl(): string;
|
|
87
95
|
getPathName(): string;
|
|
88
96
|
CreateTrackItem(ajaxType: string, enableRequestHeaderTracking: boolean, getResponse: () => IAjaxRecordResponse): IDependencyTelemetry;
|
|
89
97
|
}
|
|
90
98
|
|
|
99
|
+
declare type DependencyListenerFunction = (dependencyDetails: IDependencyListenerDetails) => void;
|
|
100
|
+
|
|
91
101
|
declare interface IAjaxRecordResponse {
|
|
92
102
|
statusText: string;
|
|
93
103
|
headerMap: Object;
|
|
@@ -97,7 +107,7 @@ declare interface IAjaxRecordResponse {
|
|
|
97
107
|
response?: Object;
|
|
98
108
|
}
|
|
99
109
|
|
|
100
|
-
export declare interface IDependenciesPlugin {
|
|
110
|
+
export declare interface IDependenciesPlugin extends IDependencyListenerContainer {
|
|
101
111
|
/**
|
|
102
112
|
* Logs dependency call
|
|
103
113
|
* @param dependencyData dependency data object
|
|
@@ -105,6 +115,59 @@ export declare interface IDependenciesPlugin {
|
|
|
105
115
|
trackDependencyData(dependency: IDependencyTelemetry): void;
|
|
106
116
|
}
|
|
107
117
|
|
|
118
|
+
declare interface IDependencyListenerContainer {
|
|
119
|
+
/**
|
|
120
|
+
* Add an ajax listener which is called just prior to the request being sent and before the correlation headers are added, to allow you
|
|
121
|
+
* to access the headers and modify the values used to generate the distributed tracing correlation headers. (added in v2.8.4)
|
|
122
|
+
* @param dependencyListener - The Telemetry Initializer function
|
|
123
|
+
* @returns - A IDependencyListenerHandler to enable the initializer to be removed
|
|
124
|
+
*/
|
|
125
|
+
addDependencyListener(dependencyListener: DependencyListenerFunction): IDependencyListenerHandler;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
declare interface IDependencyListenerDetails {
|
|
129
|
+
/**
|
|
130
|
+
* The current core instance
|
|
131
|
+
*/
|
|
132
|
+
core: IAppInsightsCore;
|
|
133
|
+
/**
|
|
134
|
+
* Provided only if the dependency request is an XHR call
|
|
135
|
+
*/
|
|
136
|
+
xhr?: XMLHttpRequest;
|
|
137
|
+
/**
|
|
138
|
+
* Provided only if the dependency request is a fetch call, this is the input argument being used,
|
|
139
|
+
* re-assigning this value has not affect on the value used for the request, however, when this is a Request
|
|
140
|
+
* object changing the value of the Request will be used for the outbound request.
|
|
141
|
+
*/
|
|
142
|
+
input?: Request | string;
|
|
143
|
+
/**
|
|
144
|
+
* Provided only if the dependency request is a fetch call, this is the init argument being used,
|
|
145
|
+
* re-assigning this value does not change the value used for the request, however, changing properties
|
|
146
|
+
* of this object will be used.
|
|
147
|
+
*/
|
|
148
|
+
init?: RequestInit;
|
|
149
|
+
/**
|
|
150
|
+
* Returns the unique identifier for a trace. All requests / spans from the same trace share the same traceId.
|
|
151
|
+
* Must be read from incoming headers or generated according to the W3C TraceContext specification,
|
|
152
|
+
* in a hex representation of 16-byte array. A.k.a. trace-id, TraceID or Distributed TraceID
|
|
153
|
+
*/
|
|
154
|
+
traceId?: string;
|
|
155
|
+
/**
|
|
156
|
+
* Self-generated 8-bytes identifier of the incoming request. Must be a hex representation of 8-byte array.
|
|
157
|
+
* Also know as the parentId, used to link requests together
|
|
158
|
+
*/
|
|
159
|
+
spanId?: string;
|
|
160
|
+
/**
|
|
161
|
+
* An integer representation of the W3C TraceContext trace-flags.
|
|
162
|
+
* https://www.w3.org/TR/trace-context/#trace-flags
|
|
163
|
+
*/
|
|
164
|
+
traceFlags?: number;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
declare interface IDependencyListenerHandler {
|
|
168
|
+
remove(): void;
|
|
169
|
+
}
|
|
170
|
+
|
|
108
171
|
export declare interface IInstrumentationRequirements extends IDependenciesPlugin {
|
|
109
172
|
includeCorrelationHeaders: (ajaxData: ajaxRecord, input?: Request | string, init?: RequestInit, xhr?: XMLHttpRequestInstrumented) => any;
|
|
110
173
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyListener.js.map","sources":["DependencyListener.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nexport {};\r\n//# sourceMappingURL=DependencyListener.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA"}
|
package/dist-esm/ajax.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Dependencies Plugin, 2.8.4
|
|
2
|
+
* Application Insights JavaScript SDK - Dependencies Plugin, 2.8.4
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
import { __assignFn as __assign, __extendsFn as __extends } from "@microsoft/applicationinsights-shims";
|
|
8
|
-
import { RequestHeaders, CorrelationIdHelper, createTelemetryItem, RemoteDependencyData, dateTimeUtilsNow, DisabledPropertyName, PropertiesPluginIdentifier, isInternalApplicationInsightsEndpoint, formatTraceParent, createTraceParent } from "@microsoft/applicationinsights-common";
|
|
9
|
-
import { isNullOrUndefined, arrForEach, isString, strTrim, isFunction, BaseTelemetryPlugin, getLocation, getGlobal, strPrototype, InstrumentFunc, InstrumentProto, getPerformance, objForEachKey, generateW3CId, getIEVersion, dumpObj, isXhrSupported, eventOn, mergeEvtNamespace, createUniqueNamespace, createProcessTelemetryContext, _throwInternal } from "@microsoft/applicationinsights-core-js";
|
|
8
|
+
import { RequestHeaders, CorrelationIdHelper, createTelemetryItem, RemoteDependencyData, dateTimeUtilsNow, DisabledPropertyName, PropertiesPluginIdentifier, isInternalApplicationInsightsEndpoint, formatTraceParent, createTraceParent, createDistributedTraceContextFromTrace } from "@microsoft/applicationinsights-common";
|
|
9
|
+
import { isNullOrUndefined, arrForEach, isString, strTrim, isFunction, BaseTelemetryPlugin, getLocation, getGlobal, strPrototype, InstrumentFunc, InstrumentProto, getPerformance, objForEachKey, generateW3CId, getIEVersion, dumpObj, isXhrSupported, eventOn, mergeEvtNamespace, createUniqueNamespace, createProcessTelemetryContext, _throwInternal, getExceptionName } from "@microsoft/applicationinsights-core-js";
|
|
10
10
|
import { ajaxRecord } from "./ajaxRecord";
|
|
11
11
|
import dynamicProto from "@microsoft/dynamicproto-js";
|
|
12
12
|
var AJAX_MONITOR_PREFIX = "ai.ajxmn.";
|
|
@@ -57,7 +57,7 @@ function _supportsAjaxMonitoring(ajaxMonitorInstance) {
|
|
|
57
57
|
catch (e) {
|
|
58
58
|
// We can't decorate the xhr object so disable monitoring
|
|
59
59
|
result = false;
|
|
60
|
-
_throwInternalCritical(ajaxMonitorInstance, 15 /* FailedMonitorAjaxOpen */, "Failed to enable XMLHttpRequest monitoring, extension is not supported", {
|
|
60
|
+
_throwInternalCritical(ajaxMonitorInstance, 15 /* _eInternalMessageId.FailedMonitorAjaxOpen */, "Failed to enable XMLHttpRequest monitoring, extension is not supported", {
|
|
61
61
|
exception: dumpObj(e)
|
|
62
62
|
});
|
|
63
63
|
}
|
|
@@ -81,11 +81,11 @@ function _getFailedAjaxDiagnosticsMessage(xhr) {
|
|
|
81
81
|
}
|
|
82
82
|
/** @ignore */
|
|
83
83
|
function _throwInternalCritical(ajaxMonitorInstance, msgId, message, properties, isUserAct) {
|
|
84
|
-
_throwInternal(ajaxMonitorInstance[strDiagLog](), 1 /* CRITICAL */, msgId, message, properties, isUserAct);
|
|
84
|
+
_throwInternal(ajaxMonitorInstance[strDiagLog](), 1 /* eLoggingSeverity.CRITICAL */, msgId, message, properties, isUserAct);
|
|
85
85
|
}
|
|
86
86
|
/** @ignore */
|
|
87
87
|
function _throwInternalWarning(ajaxMonitorInstance, msgId, message, properties, isUserAct) {
|
|
88
|
-
_throwInternal(ajaxMonitorInstance[strDiagLog](), 2 /* WARNING */, msgId, message, properties, isUserAct);
|
|
88
|
+
_throwInternal(ajaxMonitorInstance[strDiagLog](), 2 /* eLoggingSeverity.WARNING */, msgId, message, properties, isUserAct);
|
|
89
89
|
}
|
|
90
90
|
/** @Ignore */
|
|
91
91
|
function _createErrorCallbackFunc(ajaxMonitorInstance, internalMessage, message) {
|
|
@@ -103,6 +103,35 @@ function _indexOf(value, match) {
|
|
|
103
103
|
}
|
|
104
104
|
return -1;
|
|
105
105
|
}
|
|
106
|
+
function _processDependencyListeners(listeners, core, ajaxData, xhr, input, init) {
|
|
107
|
+
var initializersCount = listeners.length;
|
|
108
|
+
if (initializersCount > 0) {
|
|
109
|
+
var details = {
|
|
110
|
+
core: core,
|
|
111
|
+
xhr: xhr,
|
|
112
|
+
input: input,
|
|
113
|
+
init: init,
|
|
114
|
+
traceId: ajaxData.traceID,
|
|
115
|
+
spanId: ajaxData.spanID,
|
|
116
|
+
traceFlags: ajaxData.traceFlags
|
|
117
|
+
};
|
|
118
|
+
for (var i = 0; i < initializersCount; ++i) {
|
|
119
|
+
var dependencyListener = listeners[i];
|
|
120
|
+
if (dependencyListener && dependencyListener.fn) {
|
|
121
|
+
try {
|
|
122
|
+
dependencyListener.fn.call(null, details);
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
var core_1 = details.core;
|
|
126
|
+
_throwInternal(core_1 && core_1.logger, 1 /* eLoggingSeverity.CRITICAL */, 64 /* _eInternalMessageId.TelemetryInitializerFailed */, "Dependency listener [#" + i + "] failed: " + getExceptionName(e), { exception: dumpObj(e) }, true);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
ajaxData.traceID = details.traceId;
|
|
131
|
+
ajaxData.spanID = details.spanId;
|
|
132
|
+
ajaxData.traceFlags = details.traceFlags;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
106
135
|
var AjaxMonitor = /** @class */ (function (_super) {
|
|
107
136
|
__extends(AjaxMonitor, _super);
|
|
108
137
|
function AjaxMonitor() {
|
|
@@ -129,6 +158,8 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
129
158
|
var _excludeRequestFromAutoTrackingPatterns;
|
|
130
159
|
var _addRequestContext;
|
|
131
160
|
var _evtNamespace;
|
|
161
|
+
var _dependencyListenerId;
|
|
162
|
+
var _dependencyListeners;
|
|
132
163
|
dynamicProto(AjaxMonitor, _this, function (_self, _base) {
|
|
133
164
|
var _addHook = _base._addHook;
|
|
134
165
|
_initDefaults();
|
|
@@ -151,6 +182,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
151
182
|
_self.includeCorrelationHeaders = function (ajaxData, input, init, xhr) {
|
|
152
183
|
// Test Hook to allow the overriding of the location host
|
|
153
184
|
var currentWindowHost = _self["_currentWindowHost"] || _currentWindowHost;
|
|
185
|
+
_processDependencyListeners(_dependencyListeners, _self.core, ajaxData, xhr, input, init);
|
|
154
186
|
if (input) { // Fetch
|
|
155
187
|
if (CorrelationIdHelper.canIncludeCorrelationHeader(_config, ajaxData.getAbsoluteUrl(), currentWindowHost)) {
|
|
156
188
|
if (!init) {
|
|
@@ -162,23 +194,27 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
162
194
|
init.headers = new Headers(init.headers || (input instanceof Request ? (input.headers || {}) : {}));
|
|
163
195
|
if (_isUsingAIHeaders) {
|
|
164
196
|
var id = "|" + ajaxData.traceID + "." + ajaxData.spanID;
|
|
165
|
-
init.headers.set(RequestHeaders[3 /* requestIdHeader */], id);
|
|
197
|
+
init.headers.set(RequestHeaders[3 /* eRequestHeaders.requestIdHeader */], id);
|
|
166
198
|
if (_enableRequestHeaderTracking) {
|
|
167
|
-
ajaxData.requestHeaders[RequestHeaders[3 /* requestIdHeader */]] = id;
|
|
199
|
+
ajaxData.requestHeaders[RequestHeaders[3 /* eRequestHeaders.requestIdHeader */]] = id;
|
|
168
200
|
}
|
|
169
201
|
}
|
|
170
202
|
var appId = _config.appId || (_context && _context.appId());
|
|
171
203
|
if (appId) {
|
|
172
|
-
init.headers.set(RequestHeaders[0 /* requestContextHeader */], RequestHeaders[2 /* requestContextAppIdFormat */] + appId);
|
|
204
|
+
init.headers.set(RequestHeaders[0 /* eRequestHeaders.requestContextHeader */], RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId);
|
|
173
205
|
if (_enableRequestHeaderTracking) {
|
|
174
|
-
ajaxData.requestHeaders[RequestHeaders[0 /* requestContextHeader */]] = RequestHeaders[2 /* requestContextAppIdFormat */] + appId;
|
|
206
|
+
ajaxData.requestHeaders[RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]] = RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId;
|
|
175
207
|
}
|
|
176
208
|
}
|
|
177
209
|
if (_isUsingW3CHeaders) {
|
|
178
|
-
var
|
|
179
|
-
|
|
210
|
+
var traceFlags = ajaxData.traceFlags;
|
|
211
|
+
if (isNullOrUndefined(traceFlags)) {
|
|
212
|
+
traceFlags = 0x01;
|
|
213
|
+
}
|
|
214
|
+
var traceParent = formatTraceParent(createTraceParent(ajaxData.traceID, ajaxData.spanID, traceFlags));
|
|
215
|
+
init.headers.set(RequestHeaders[4 /* eRequestHeaders.traceParentHeader */], traceParent);
|
|
180
216
|
if (_enableRequestHeaderTracking) {
|
|
181
|
-
ajaxData.requestHeaders[RequestHeaders[4 /* traceParentHeader */]] = traceParent;
|
|
217
|
+
ajaxData.requestHeaders[RequestHeaders[4 /* eRequestHeaders.traceParentHeader */]] = traceParent;
|
|
182
218
|
}
|
|
183
219
|
}
|
|
184
220
|
}
|
|
@@ -188,23 +224,27 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
188
224
|
if (CorrelationIdHelper.canIncludeCorrelationHeader(_config, ajaxData.getAbsoluteUrl(), currentWindowHost)) {
|
|
189
225
|
if (_isUsingAIHeaders) {
|
|
190
226
|
var id = "|" + ajaxData.traceID + "." + ajaxData.spanID;
|
|
191
|
-
xhr.setRequestHeader(RequestHeaders[3 /* requestIdHeader */], id);
|
|
227
|
+
xhr.setRequestHeader(RequestHeaders[3 /* eRequestHeaders.requestIdHeader */], id);
|
|
192
228
|
if (_enableRequestHeaderTracking) {
|
|
193
|
-
ajaxData.requestHeaders[RequestHeaders[3 /* requestIdHeader */]] = id;
|
|
229
|
+
ajaxData.requestHeaders[RequestHeaders[3 /* eRequestHeaders.requestIdHeader */]] = id;
|
|
194
230
|
}
|
|
195
231
|
}
|
|
196
232
|
var appId = _config.appId || (_context && _context.appId());
|
|
197
233
|
if (appId) {
|
|
198
|
-
xhr.setRequestHeader(RequestHeaders[0 /* requestContextHeader */], RequestHeaders[2 /* requestContextAppIdFormat */] + appId);
|
|
234
|
+
xhr.setRequestHeader(RequestHeaders[0 /* eRequestHeaders.requestContextHeader */], RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId);
|
|
199
235
|
if (_enableRequestHeaderTracking) {
|
|
200
|
-
ajaxData.requestHeaders[RequestHeaders[0 /* requestContextHeader */]] = RequestHeaders[2 /* requestContextAppIdFormat */] + appId;
|
|
236
|
+
ajaxData.requestHeaders[RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]] = RequestHeaders[2 /* eRequestHeaders.requestContextAppIdFormat */] + appId;
|
|
201
237
|
}
|
|
202
238
|
}
|
|
203
239
|
if (_isUsingW3CHeaders) {
|
|
204
|
-
var
|
|
205
|
-
|
|
240
|
+
var traceFlags = ajaxData.traceFlags;
|
|
241
|
+
if (isNullOrUndefined(traceFlags)) {
|
|
242
|
+
traceFlags = 0x01;
|
|
243
|
+
}
|
|
244
|
+
var traceParent = formatTraceParent(createTraceParent(ajaxData.traceID, ajaxData.spanID, traceFlags));
|
|
245
|
+
xhr.setRequestHeader(RequestHeaders[4 /* eRequestHeaders.traceParentHeader */], traceParent);
|
|
206
246
|
if (_enableRequestHeaderTracking) {
|
|
207
|
-
ajaxData.requestHeaders[RequestHeaders[4 /* traceParentHeader */]] = traceParent;
|
|
247
|
+
ajaxData.requestHeaders[RequestHeaders[4 /* eRequestHeaders.traceParentHeader */]] = traceParent;
|
|
208
248
|
}
|
|
209
249
|
}
|
|
210
250
|
}
|
|
@@ -217,8 +257,8 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
217
257
|
// Hack since expected format in w3c mode is |abc.def.
|
|
218
258
|
// Non-w3c format is |abc.def
|
|
219
259
|
// @todo Remove if better solution is available, e.g. handle in portal
|
|
220
|
-
if ((_config.distributedTracingMode === 2 /* W3C */
|
|
221
|
-
|| _config.distributedTracingMode === 1 /* AI_AND_W3C */)
|
|
260
|
+
if ((_config.distributedTracingMode === 2 /* eDistributedTracingModes.W3C */
|
|
261
|
+
|| _config.distributedTracingMode === 1 /* eDistributedTracingModes.AI_AND_W3C */)
|
|
222
262
|
&& typeof dependency.id === "string" && dependency.id[dependency.id.length - 1] !== ".") {
|
|
223
263
|
dependency.id += ".";
|
|
224
264
|
}
|
|
@@ -229,10 +269,28 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
229
269
|
_self.core.track(item);
|
|
230
270
|
}
|
|
231
271
|
else if (_trackAjaxAttempts === _maxAjaxCallsPerView) {
|
|
232
|
-
_throwInternalCritical(_self, 55 /* MaxAjaxPerPVExceeded */, "Maximum ajax per page view limit reached, ajax monitoring is paused until the next trackPageView(). In order to increase the limit set the maxAjaxCallsPerView configuration parameter.", true);
|
|
272
|
+
_throwInternalCritical(_self, 55 /* _eInternalMessageId.MaxAjaxPerPVExceeded */, "Maximum ajax per page view limit reached, ajax monitoring is paused until the next trackPageView(). In order to increase the limit set the maxAjaxCallsPerView configuration parameter.", true);
|
|
233
273
|
}
|
|
234
274
|
++_trackAjaxAttempts;
|
|
235
275
|
};
|
|
276
|
+
_self.addDependencyListener = function (dependencyListener) {
|
|
277
|
+
var theInitializer = {
|
|
278
|
+
id: _dependencyListenerId++,
|
|
279
|
+
fn: dependencyListener
|
|
280
|
+
};
|
|
281
|
+
_dependencyListeners.push(theInitializer);
|
|
282
|
+
var handler = {
|
|
283
|
+
remove: function () {
|
|
284
|
+
arrForEach(_dependencyListeners, function (initializer, idx) {
|
|
285
|
+
if (initializer.id === theInitializer.id) {
|
|
286
|
+
_dependencyListeners.splice(idx, 1);
|
|
287
|
+
return -1;
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
return handler;
|
|
293
|
+
};
|
|
236
294
|
function _initDefaults() {
|
|
237
295
|
var location = getLocation();
|
|
238
296
|
_fetchInitialized = false; // fetch monitoring initialized
|
|
@@ -255,6 +313,8 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
255
313
|
_excludeRequestFromAutoTrackingPatterns = null;
|
|
256
314
|
_addRequestContext = null;
|
|
257
315
|
_evtNamespace = null;
|
|
316
|
+
_dependencyListenerId = 0;
|
|
317
|
+
_dependencyListeners = [];
|
|
258
318
|
}
|
|
259
319
|
function _populateDefaults(config) {
|
|
260
320
|
var ctx = createProcessTelemetryContext(null, config, _self.core);
|
|
@@ -272,8 +332,8 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
272
332
|
_enableResponseHeaderTracking = _config.enableResponseHeaderTracking;
|
|
273
333
|
_excludeRequestFromAutoTrackingPatterns = _config.excludeRequestFromAutoTrackingPatterns;
|
|
274
334
|
_addRequestContext = _config.addRequestContext;
|
|
275
|
-
_isUsingAIHeaders = distributedTracingMode === 0 /* AI */ || distributedTracingMode === 1 /* AI_AND_W3C */;
|
|
276
|
-
_isUsingW3CHeaders = distributedTracingMode === 1 /* AI_AND_W3C */ || distributedTracingMode === 2 /* W3C */;
|
|
335
|
+
_isUsingAIHeaders = distributedTracingMode === 0 /* eDistributedTracingModes.AI */ || distributedTracingMode === 1 /* eDistributedTracingModes.AI_AND_W3C */;
|
|
336
|
+
_isUsingW3CHeaders = distributedTracingMode === 1 /* eDistributedTracingModes.AI_AND_W3C */ || distributedTracingMode === 2 /* eDistributedTracingModes.W3C */;
|
|
277
337
|
if (_enableAjaxPerfTracking) {
|
|
278
338
|
var iKey = config.instrumentationKey || "unkwn";
|
|
279
339
|
if (iKey.length > 5) {
|
|
@@ -364,7 +424,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
364
424
|
}
|
|
365
425
|
},
|
|
366
426
|
// Create an error callback to report any hook errors
|
|
367
|
-
hkErr: _createErrorCallbackFunc(_self, 15 /* FailedMonitorAjaxOpen */, "Failed to monitor Window.fetch, monitoring data for this fetch call may be incorrect.")
|
|
427
|
+
hkErr: _createErrorCallbackFunc(_self, 15 /* _eInternalMessageId.FailedMonitorAjaxOpen */, "Failed to monitor Window.fetch, monitoring data for this fetch call may be incorrect.")
|
|
368
428
|
}));
|
|
369
429
|
_fetchInitialized = true;
|
|
370
430
|
}
|
|
@@ -411,7 +471,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
411
471
|
}
|
|
412
472
|
}
|
|
413
473
|
},
|
|
414
|
-
hkErr: _createErrorCallbackFunc(_self, 15 /* FailedMonitorAjaxOpen */, "Failed to monitor XMLHttpRequest.open, monitoring data for this ajax call may be incorrect.")
|
|
474
|
+
hkErr: _createErrorCallbackFunc(_self, 15 /* _eInternalMessageId.FailedMonitorAjaxOpen */, "Failed to monitor XMLHttpRequest.open, monitoring data for this ajax call may be incorrect.")
|
|
415
475
|
});
|
|
416
476
|
// Instrument send
|
|
417
477
|
_hookProto(XMLHttpRequest, "send", {
|
|
@@ -428,7 +488,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
428
488
|
}
|
|
429
489
|
}
|
|
430
490
|
},
|
|
431
|
-
hkErr: _createErrorCallbackFunc(_self, 17 /* FailedMonitorAjaxSend */, "Failed to monitor XMLHttpRequest, monitoring data for this ajax call may be incorrect.")
|
|
491
|
+
hkErr: _createErrorCallbackFunc(_self, 17 /* _eInternalMessageId.FailedMonitorAjaxSend */, "Failed to monitor XMLHttpRequest, monitoring data for this ajax call may be incorrect.")
|
|
432
492
|
});
|
|
433
493
|
// Instrument abort
|
|
434
494
|
_hookProto(XMLHttpRequest, "abort", {
|
|
@@ -443,7 +503,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
443
503
|
}
|
|
444
504
|
}
|
|
445
505
|
},
|
|
446
|
-
hkErr: _createErrorCallbackFunc(_self, 13 /* FailedMonitorAjaxAbort */, "Failed to monitor XMLHttpRequest.abort, monitoring data for this ajax call may be incorrect.")
|
|
506
|
+
hkErr: _createErrorCallbackFunc(_self, 13 /* _eInternalMessageId.FailedMonitorAjaxAbort */, "Failed to monitor XMLHttpRequest.abort, monitoring data for this ajax call may be incorrect.")
|
|
447
507
|
});
|
|
448
508
|
// Instrument setRequestHeader
|
|
449
509
|
_hookProto(XMLHttpRequest, "setRequestHeader", {
|
|
@@ -456,7 +516,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
456
516
|
}
|
|
457
517
|
}
|
|
458
518
|
},
|
|
459
|
-
hkErr: _createErrorCallbackFunc(_self, 71 /* FailedMonitorAjaxSetRequestHeader */, "Failed to monitor XMLHttpRequest.setRequestHeader, monitoring data for this ajax call may be incorrect.")
|
|
519
|
+
hkErr: _createErrorCallbackFunc(_self, 71 /* _eInternalMessageId.FailedMonitorAjaxSetRequestHeader */, "Failed to monitor XMLHttpRequest.setRequestHeader, monitoring data for this ajax call may be incorrect.")
|
|
460
520
|
});
|
|
461
521
|
_xhrInitialized = true;
|
|
462
522
|
}
|
|
@@ -529,10 +589,23 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
529
589
|
// checking on ajaxData to see that it was not removed in user code
|
|
530
590
|
&& ajaxValidation;
|
|
531
591
|
}
|
|
592
|
+
function _getDistributedTraceCtx() {
|
|
593
|
+
var distributedTraceCtx = null;
|
|
594
|
+
if (_self.core && _self.core.getTraceCtx) {
|
|
595
|
+
distributedTraceCtx = _self.core.getTraceCtx(false);
|
|
596
|
+
}
|
|
597
|
+
// Fall back
|
|
598
|
+
if (!distributedTraceCtx && _context && _context.telemetryTrace) {
|
|
599
|
+
distributedTraceCtx = createDistributedTraceContextFromTrace(_context.telemetryTrace);
|
|
600
|
+
}
|
|
601
|
+
return distributedTraceCtx;
|
|
602
|
+
}
|
|
532
603
|
function _openHandler(xhr, method, url, async) {
|
|
533
|
-
var
|
|
604
|
+
var distributedTraceCtx = _getDistributedTraceCtx();
|
|
605
|
+
var traceID = (distributedTraceCtx && distributedTraceCtx.getTraceId()) || generateW3CId();
|
|
534
606
|
var spanID = generateW3CId().substr(0, 16);
|
|
535
607
|
var ajaxData = new ajaxRecord(traceID, spanID, _self[strDiagLog]());
|
|
608
|
+
ajaxData.traceFlags = distributedTraceCtx && distributedTraceCtx.getTraceFlags();
|
|
536
609
|
ajaxData.method = method;
|
|
537
610
|
ajaxData.requestUrl = url;
|
|
538
611
|
ajaxData.xhrMonitoringState.openDone = true;
|
|
@@ -552,7 +625,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
552
625
|
var exceptionText = dumpObj(e);
|
|
553
626
|
// ignore messages with c00c023f, as this a known IE9 XHR abort issue
|
|
554
627
|
if (!exceptionText || _indexOf(exceptionText.toLowerCase(), "c00c023f") === -1) {
|
|
555
|
-
_throwInternalCritical(_self, 16 /* FailedMonitorAjaxRSC */, "Failed to monitor XMLHttpRequest 'readystatechange' event handler, monitoring data for this ajax call may be incorrect.", {
|
|
628
|
+
_throwInternalCritical(_self, 16 /* _eInternalMessageId.FailedMonitorAjaxRSC */, "Failed to monitor XMLHttpRequest 'readystatechange' event handler, monitoring data for this ajax call may be incorrect.", {
|
|
556
629
|
ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr),
|
|
557
630
|
exception: exceptionText
|
|
558
631
|
});
|
|
@@ -583,7 +656,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
583
656
|
if (e) {
|
|
584
657
|
errorProps["exception"] = dumpObj(e);
|
|
585
658
|
}
|
|
586
|
-
_throwInternalWarning(_self, 14 /* FailedMonitorAjaxDur */, "Failed to calculate the duration of the ajax call, monitoring data for this ajax call won't be sent.", errorProps);
|
|
659
|
+
_throwInternalWarning(_self, 14 /* _eInternalMessageId.FailedMonitorAjaxDur */, "Failed to calculate the duration of the ajax call, monitoring data for this ajax call won't be sent.", errorProps);
|
|
587
660
|
}
|
|
588
661
|
_findPerfResourceEntry("xmlhttprequest", ajaxData, function () {
|
|
589
662
|
try {
|
|
@@ -623,7 +696,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
623
696
|
}
|
|
624
697
|
}
|
|
625
698
|
catch (e) {
|
|
626
|
-
_throwInternalWarning(_self, 104 /* FailedAddingCustomDefinedRequestContext */, "Failed to add custom defined request context as configured call back may missing a null check.");
|
|
699
|
+
_throwInternalWarning(_self, 104 /* _eInternalMessageId.FailedAddingCustomDefinedRequestContext */, "Failed to add custom defined request context as configured call back may missing a null check.");
|
|
627
700
|
}
|
|
628
701
|
if (dependency) {
|
|
629
702
|
if (properties !== undefined) {
|
|
@@ -655,15 +728,15 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
655
728
|
try {
|
|
656
729
|
var responseHeadersString = xhr.getAllResponseHeaders();
|
|
657
730
|
if (responseHeadersString !== null) {
|
|
658
|
-
var index = _indexOf(responseHeadersString.toLowerCase(), RequestHeaders[8 /* requestContextHeaderLowerCase */]);
|
|
731
|
+
var index = _indexOf(responseHeadersString.toLowerCase(), RequestHeaders[8 /* eRequestHeaders.requestContextHeaderLowerCase */]);
|
|
659
732
|
if (index !== -1) {
|
|
660
|
-
var responseHeader = xhr.getResponseHeader(RequestHeaders[0 /* requestContextHeader */]);
|
|
733
|
+
var responseHeader = xhr.getResponseHeader(RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]);
|
|
661
734
|
return CorrelationIdHelper.getCorrelationContext(responseHeader);
|
|
662
735
|
}
|
|
663
736
|
}
|
|
664
737
|
}
|
|
665
738
|
catch (e) {
|
|
666
|
-
_throwInternalWarning(_self, 18 /* FailedMonitorAjaxGetCorrelationHeader */, "Failed to get Request-Context correlation header as it may be not included in the response or not accessible.", {
|
|
739
|
+
_throwInternalWarning(_self, 18 /* _eInternalMessageId.FailedMonitorAjaxGetCorrelationHeader */, "Failed to get Request-Context correlation header as it may be not included in the response or not accessible.", {
|
|
667
740
|
ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr),
|
|
668
741
|
exception: dumpObj(e)
|
|
669
742
|
});
|
|
@@ -742,9 +815,11 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
742
815
|
})();
|
|
743
816
|
}
|
|
744
817
|
function _createFetchRecord(input, init) {
|
|
745
|
-
var
|
|
818
|
+
var distributedTraceCtx = _getDistributedTraceCtx();
|
|
819
|
+
var traceID = (distributedTraceCtx && distributedTraceCtx.getTraceId()) || generateW3CId();
|
|
746
820
|
var spanID = generateW3CId().substr(0, 16);
|
|
747
821
|
var ajaxData = new ajaxRecord(traceID, spanID, _self[strDiagLog]());
|
|
822
|
+
ajaxData.traceFlags = distributedTraceCtx && distributedTraceCtx.getTraceFlags();
|
|
748
823
|
ajaxData.requestSentTime = dateTimeUtilsNow();
|
|
749
824
|
ajaxData.errorStatusText = _enableAjaxErrorStatusText;
|
|
750
825
|
if (input instanceof Request) {
|
|
@@ -787,7 +862,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
787
862
|
}
|
|
788
863
|
}
|
|
789
864
|
catch (e) {
|
|
790
|
-
_throwInternalCritical(_self, 15 /* FailedMonitorAjaxOpen */, "Failed to grab failed fetch diagnostics message", { exception: dumpObj(e) });
|
|
865
|
+
_throwInternalCritical(_self, 15 /* _eInternalMessageId.FailedMonitorAjaxOpen */, "Failed to grab failed fetch diagnostics message", { exception: dumpObj(e) });
|
|
791
866
|
}
|
|
792
867
|
return result;
|
|
793
868
|
}
|
|
@@ -814,7 +889,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
814
889
|
}
|
|
815
890
|
}
|
|
816
891
|
catch (e) {
|
|
817
|
-
_throwInternalWarning(_self, 104 /* FailedAddingCustomDefinedRequestContext */, "Failed to add custom defined request context as configured call back may missing a null check.");
|
|
892
|
+
_throwInternalWarning(_self, 104 /* _eInternalMessageId.FailedAddingCustomDefinedRequestContext */, "Failed to add custom defined request context as configured call back may missing a null check.");
|
|
818
893
|
}
|
|
819
894
|
if (dependency) {
|
|
820
895
|
if (properties !== undefined) {
|
|
@@ -823,23 +898,23 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
823
898
|
_self[strTrackDependencyDataInternal](dependency);
|
|
824
899
|
}
|
|
825
900
|
else {
|
|
826
|
-
_reportFetchError(14 /* FailedMonitorAjaxDur */, null, {
|
|
901
|
+
_reportFetchError(14 /* _eInternalMessageId.FailedMonitorAjaxDur */, null, {
|
|
827
902
|
requestSentTime: ajaxData.requestSentTime,
|
|
828
903
|
responseFinishedTime: ajaxData.responseFinishedTime
|
|
829
904
|
});
|
|
830
905
|
}
|
|
831
906
|
}, function (e) {
|
|
832
|
-
_reportFetchError(18 /* FailedMonitorAjaxGetCorrelationHeader */, e, null);
|
|
907
|
+
_reportFetchError(18 /* _eInternalMessageId.FailedMonitorAjaxGetCorrelationHeader */, e, null);
|
|
833
908
|
});
|
|
834
909
|
}
|
|
835
910
|
function _getFetchCorrelationContext(response) {
|
|
836
911
|
if (response && response.headers) {
|
|
837
912
|
try {
|
|
838
|
-
var responseHeader = response.headers.get(RequestHeaders[0 /* requestContextHeader */]);
|
|
913
|
+
var responseHeader = response.headers.get(RequestHeaders[0 /* eRequestHeaders.requestContextHeader */]);
|
|
839
914
|
return CorrelationIdHelper.getCorrelationContext(responseHeader);
|
|
840
915
|
}
|
|
841
916
|
catch (e) {
|
|
842
|
-
_throwInternalWarning(_self, 18 /* FailedMonitorAjaxGetCorrelationHeader */, "Failed to get Request-Context correlation header as it may be not included in the response or not accessible.", {
|
|
917
|
+
_throwInternalWarning(_self, 18 /* _eInternalMessageId.FailedMonitorAjaxGetCorrelationHeader */, "Failed to get Request-Context correlation header as it may be not included in the response or not accessible.", {
|
|
843
918
|
fetchDiagnosticsMessage: _getFailedFetchDiagnosticsMessage(response),
|
|
844
919
|
exception: dumpObj(e)
|
|
845
920
|
});
|
|
@@ -856,7 +931,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
856
931
|
disableFetchTracking: false,
|
|
857
932
|
excludeRequestFromAutoTrackingPatterns: undefined,
|
|
858
933
|
disableCorrelationHeaders: false,
|
|
859
|
-
distributedTracingMode: 1 /* AI_AND_W3C */,
|
|
934
|
+
distributedTracingMode: 1 /* eDistributedTracingModes.AI_AND_W3C */,
|
|
860
935
|
correlationHeaderExcludedDomains: [
|
|
861
936
|
"*.blob.core.windows.net",
|
|
862
937
|
"*.blob.core.chinacloudapi.cn",
|
|
@@ -895,6 +970,7 @@ var AjaxMonitor = /** @class */ (function (_super) {
|
|
|
895
970
|
};
|
|
896
971
|
// Removed Stub for AjaxMonitor.prototype.trackDependencyData.
|
|
897
972
|
// Removed Stub for AjaxMonitor.prototype.includeCorrelationHeaders.
|
|
973
|
+
// Removed Stub for AjaxMonitor.prototype.addDependencyListener.
|
|
898
974
|
// Removed Stub for AjaxMonitor.prototype.trackDependencyDataInternal.
|
|
899
975
|
AjaxMonitor.identifier = "AjaxDependencyPlugin";
|
|
900
976
|
return AjaxMonitor;
|