@cloudcare/browser-rum-slim 3.3.3
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/LICENSE +21 -0
- package/README.md +15 -0
- package/bundle/dataflux-rum-slim.js +1 -0
- package/cjs/boot/buildEnv.js +11 -0
- package/cjs/boot/buildEnv.js.map +1 -0
- package/cjs/boot/perStartRum.js +227 -0
- package/cjs/boot/perStartRum.js.map +1 -0
- package/cjs/boot/rum.js +180 -0
- package/cjs/boot/rum.js.map +1 -0
- package/cjs/boot/rum.slim.entry.js +13 -0
- package/cjs/boot/rum.slim.entry.js.map +1 -0
- package/cjs/boot/rumEntryFactory.js +15 -0
- package/cjs/boot/rumEntryFactory.js.map +1 -0
- package/cjs/boot/rumPublicApi.js +285 -0
- package/cjs/boot/rumPublicApi.js.map +1 -0
- package/cjs/boot/rumRecorderApiStub.js +19 -0
- package/cjs/boot/rumRecorderApiStub.js.map +1 -0
- package/cjs/boot/rumSlimConfiguration.js +16 -0
- package/cjs/boot/rumSlimConfiguration.js.map +1 -0
- package/cjs/constants.js +41 -0
- package/cjs/constants.js.map +1 -0
- package/cjs/domain/assembly.js +172 -0
- package/cjs/domain/assembly.js.map +1 -0
- package/cjs/domain/configuration.js +272 -0
- package/cjs/domain/configuration.js.map +1 -0
- package/cjs/domain/contexts/commonContext.js +14 -0
- package/cjs/domain/contexts/commonContext.js.map +1 -0
- package/cjs/domain/contexts/displayContext.js +22 -0
- package/cjs/domain/contexts/displayContext.js.map +1 -0
- package/cjs/domain/contexts/foregroundContexts.js +111 -0
- package/cjs/domain/contexts/foregroundContexts.js.map +1 -0
- package/cjs/domain/contexts/internalContext.js +47 -0
- package/cjs/domain/contexts/internalContext.js.map +1 -0
- package/cjs/domain/contexts/pageStateHistory.js +111 -0
- package/cjs/domain/contexts/pageStateHistory.js.map +1 -0
- package/cjs/domain/contexts/urlContexts.js +73 -0
- package/cjs/domain/contexts/urlContexts.js.map +1 -0
- package/cjs/domain/contexts/viewContexts.js +51 -0
- package/cjs/domain/contexts/viewContexts.js.map +1 -0
- package/cjs/domain/domMutationObservable.js +69 -0
- package/cjs/domain/domMutationObservable.js.map +1 -0
- package/cjs/domain/encoderStreamId.js +11 -0
- package/cjs/domain/encoderStreamId.js.map +1 -0
- package/cjs/domain/firstInputPolyfill.js +83 -0
- package/cjs/domain/firstInputPolyfill.js.map +1 -0
- package/cjs/domain/initViewportObservable.js +44 -0
- package/cjs/domain/initViewportObservable.js.map +1 -0
- package/cjs/domain/locationChangeObservable.js +57 -0
- package/cjs/domain/locationChangeObservable.js.map +1 -0
- package/cjs/domain/performanceObservable.js +124 -0
- package/cjs/domain/performanceObservable.js.map +1 -0
- package/cjs/domain/performanceUtils.js +47 -0
- package/cjs/domain/performanceUtils.js.map +1 -0
- package/cjs/domain/requestCollection.js +127 -0
- package/cjs/domain/requestCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/actionCollection.js +89 -0
- package/cjs/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/clickChain.js +69 -0
- package/cjs/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/computeFrustration.js +75 -0
- package/cjs/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js +232 -0
- package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js +220 -0
- package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js +28 -0
- package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js +73 -0
- package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/trackClickActions.js +253 -0
- package/cjs/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/errorCollection.js +90 -0
- package/cjs/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/trackConsoleError.js +18 -0
- package/cjs/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/trackReportError.js +25 -0
- package/cjs/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
- package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +61 -0
- package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js +44 -0
- package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +74 -0
- package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceCollection.js +239 -0
- package/cjs/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js +237 -0
- package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceUtils.js +240 -0
- package/cjs/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +25 -0
- package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js +54 -0
- package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js +48 -0
- package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +125 -0
- package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +27 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js +55 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstInput.js +47 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js +51 -0
- package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +162 -0
- package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +61 -0
- package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js +51 -0
- package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js +57 -0
- package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js +92 -0
- package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js +21 -0
- package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackViews.js +269 -0
- package/cjs/domain/rumEventsCollection/view/trackViews.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/viewCollection.js +131 -0
- package/cjs/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
- package/cjs/domain/rumSessionManager.js +187 -0
- package/cjs/domain/rumSessionManager.js.map +1 -0
- package/cjs/domain/tracing/ddtraceTracer.js +46 -0
- package/cjs/domain/tracing/ddtraceTracer.js.map +1 -0
- package/cjs/domain/tracing/getDocumentTraceId.js +80 -0
- package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -0
- package/cjs/domain/tracing/jaegerTracer.js +48 -0
- package/cjs/domain/tracing/jaegerTracer.js.map +1 -0
- package/cjs/domain/tracing/sampler.js +69 -0
- package/cjs/domain/tracing/sampler.js.map +1 -0
- package/cjs/domain/tracing/skywalkingTracer.js +96 -0
- package/cjs/domain/tracing/skywalkingTracer.js.map +1 -0
- package/cjs/domain/tracing/traceIdentifier.js +66 -0
- package/cjs/domain/tracing/traceIdentifier.js.map +1 -0
- package/cjs/domain/tracing/tracer.js +133 -0
- package/cjs/domain/tracing/tracer.js.map +1 -0
- package/cjs/domain/tracing/w3cTraceParentTracer.js +74 -0
- package/cjs/domain/tracing/w3cTraceParentTracer.js.map +1 -0
- package/cjs/domain/tracing/zipkinMultiTracer.js +48 -0
- package/cjs/domain/tracing/zipkinMultiTracer.js.map +1 -0
- package/cjs/domain/tracing/zipkinSingleTracer.js +47 -0
- package/cjs/domain/tracing/zipkinSingleTracer.js.map +1 -0
- package/cjs/domain/trackEventCounts.js +55 -0
- package/cjs/domain/trackEventCounts.js.map +1 -0
- package/cjs/domain/usr/index.js +44 -0
- package/cjs/domain/usr/index.js.map +1 -0
- package/cjs/domain/waitPageActivityEnd.js +151 -0
- package/cjs/domain/waitPageActivityEnd.js.map +1 -0
- package/cjs/index.js +13 -0
- package/cjs/index.js.map +1 -0
- package/cjs/transport/startRumBatch.js +26 -0
- package/cjs/transport/startRumBatch.js.map +1 -0
- package/cjs/transport/startRumEventBridge.js +15 -0
- package/cjs/transport/startRumEventBridge.js.map +1 -0
- package/esm/boot/buildEnv.js +5 -0
- package/esm/boot/buildEnv.js.map +1 -0
- package/esm/boot/perStartRum.js +221 -0
- package/esm/boot/perStartRum.js.map +1 -0
- package/esm/boot/rum.js +173 -0
- package/esm/boot/rum.js.map +1 -0
- package/esm/boot/rum.slim.entry.js +7 -0
- package/esm/boot/rum.slim.entry.js.map +1 -0
- package/esm/boot/rumEntryFactory.js +9 -0
- package/esm/boot/rumEntryFactory.js.map +1 -0
- package/esm/boot/rumPublicApi.js +279 -0
- package/esm/boot/rumPublicApi.js.map +1 -0
- package/esm/boot/rumRecorderApiStub.js +13 -0
- package/esm/boot/rumRecorderApiStub.js.map +1 -0
- package/esm/boot/rumSlimConfiguration.js +10 -0
- package/esm/boot/rumSlimConfiguration.js.map +1 -0
- package/esm/constants.js +35 -0
- package/esm/constants.js.map +1 -0
- package/esm/domain/assembly.js +166 -0
- package/esm/domain/assembly.js.map +1 -0
- package/esm/domain/configuration.js +266 -0
- package/esm/domain/configuration.js.map +1 -0
- package/esm/domain/contexts/commonContext.js +8 -0
- package/esm/domain/contexts/commonContext.js.map +1 -0
- package/esm/domain/contexts/displayContext.js +16 -0
- package/esm/domain/contexts/displayContext.js.map +1 -0
- package/esm/domain/contexts/foregroundContexts.js +103 -0
- package/esm/domain/contexts/foregroundContexts.js.map +1 -0
- package/esm/domain/contexts/internalContext.js +41 -0
- package/esm/domain/contexts/internalContext.js.map +1 -0
- package/esm/domain/contexts/pageStateHistory.js +104 -0
- package/esm/domain/contexts/pageStateHistory.js.map +1 -0
- package/esm/domain/contexts/urlContexts.js +67 -0
- package/esm/domain/contexts/urlContexts.js.map +1 -0
- package/esm/domain/contexts/viewContexts.js +44 -0
- package/esm/domain/contexts/viewContexts.js.map +1 -0
- package/esm/domain/domMutationObservable.js +62 -0
- package/esm/domain/domMutationObservable.js.map +1 -0
- package/esm/domain/encoderStreamId.js +5 -0
- package/esm/domain/encoderStreamId.js.map +1 -0
- package/esm/domain/firstInputPolyfill.js +77 -0
- package/esm/domain/firstInputPolyfill.js.map +1 -0
- package/esm/domain/initViewportObservable.js +36 -0
- package/esm/domain/initViewportObservable.js.map +1 -0
- package/esm/domain/locationChangeObservable.js +51 -0
- package/esm/domain/locationChangeObservable.js.map +1 -0
- package/esm/domain/performanceObservable.js +116 -0
- package/esm/domain/performanceObservable.js.map +1 -0
- package/esm/domain/performanceUtils.js +40 -0
- package/esm/domain/performanceUtils.js.map +1 -0
- package/esm/domain/requestCollection.js +119 -0
- package/esm/domain/requestCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/actionCollection.js +83 -0
- package/esm/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/clickChain.js +62 -0
- package/esm/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/computeFrustration.js +67 -0
- package/esm/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js +225 -0
- package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js +212 -0
- package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js +20 -0
- package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/listenActionEvents.js +67 -0
- package/esm/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/trackClickActions.js +244 -0
- package/esm/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/errorCollection.js +83 -0
- package/esm/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/trackConsoleError.js +12 -0
- package/esm/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/trackReportError.js +19 -0
- package/esm/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
- package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +55 -0
- package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js +38 -0
- package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +69 -0
- package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceCollection.js +233 -0
- package/esm/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js +231 -0
- package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceUtils.js +218 -0
- package/esm/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +19 -0
- package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js +47 -0
- package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js +42 -0
- package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +117 -0
- package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +20 -0
- package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstHidden.js +49 -0
- package/esm/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstInput.js +41 -0
- package/esm/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js +44 -0
- package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +153 -0
- package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +54 -0
- package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackLoadingTime.js +45 -0
- package/esm/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js +51 -0
- package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js +84 -0
- package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js +15 -0
- package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackViews.js +262 -0
- package/esm/domain/rumEventsCollection/view/trackViews.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/viewCollection.js +125 -0
- package/esm/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
- package/esm/domain/rumSessionManager.js +179 -0
- package/esm/domain/rumSessionManager.js.map +1 -0
- package/esm/domain/tracing/ddtraceTracer.js +40 -0
- package/esm/domain/tracing/ddtraceTracer.js.map +1 -0
- package/esm/domain/tracing/getDocumentTraceId.js +69 -0
- package/esm/domain/tracing/getDocumentTraceId.js.map +1 -0
- package/esm/domain/tracing/jaegerTracer.js +42 -0
- package/esm/domain/tracing/jaegerTracer.js.map +1 -0
- package/esm/domain/tracing/sampler.js +61 -0
- package/esm/domain/tracing/sampler.js.map +1 -0
- package/esm/domain/tracing/skywalkingTracer.js +90 -0
- package/esm/domain/tracing/skywalkingTracer.js.map +1 -0
- package/esm/domain/tracing/traceIdentifier.js +57 -0
- package/esm/domain/tracing/traceIdentifier.js.map +1 -0
- package/esm/domain/tracing/tracer.js +124 -0
- package/esm/domain/tracing/tracer.js.map +1 -0
- package/esm/domain/tracing/w3cTraceParentTracer.js +69 -0
- package/esm/domain/tracing/w3cTraceParentTracer.js.map +1 -0
- package/esm/domain/tracing/zipkinMultiTracer.js +42 -0
- package/esm/domain/tracing/zipkinMultiTracer.js.map +1 -0
- package/esm/domain/tracing/zipkinSingleTracer.js +41 -0
- package/esm/domain/tracing/zipkinSingleTracer.js.map +1 -0
- package/esm/domain/trackEventCounts.js +49 -0
- package/esm/domain/trackEventCounts.js.map +1 -0
- package/esm/domain/usr/index.js +38 -0
- package/esm/domain/usr/index.js.map +1 -0
- package/esm/domain/waitPageActivityEnd.js +142 -0
- package/esm/domain/waitPageActivityEnd.js.map +1 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/transport/startRumBatch.js +20 -0
- package/esm/transport/startRumBatch.js.map +1 -0
- package/esm/transport/startRumEventBridge.js +9 -0
- package/esm/transport/startRumEventBridge.js.map +1 -0
- package/package.json +39 -0
- package/types/index.d.ts +134 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createRequestResourceEntryMatcher = createRequestResourceEntryMatcher;
|
|
7
|
+
var _resourceUtils = require("./resourceUtils");
|
|
8
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
9
|
+
/**
|
|
10
|
+
* Look for corresponding timing in resource timing buffer
|
|
11
|
+
*
|
|
12
|
+
* Observations:
|
|
13
|
+
* - Timing (start, end) are nested inside the request (start, end)
|
|
14
|
+
* - Browsers generate a timing entry for OPTIONS request
|
|
15
|
+
*
|
|
16
|
+
* Strategy:
|
|
17
|
+
* - from valid nested entries
|
|
18
|
+
* - if a single timing match, return the timing
|
|
19
|
+
* - if two following timings match (OPTIONS request), return the timing for the actual request
|
|
20
|
+
* - otherwise we can't decide, return undefined
|
|
21
|
+
*/
|
|
22
|
+
function createRequestResourceEntryMatcher() {
|
|
23
|
+
var alreadyMatchedEntries = new _browserCore.WeakSet();
|
|
24
|
+
return {
|
|
25
|
+
matchRequestResourceEntry: function matchRequestResourceEntry(request) {
|
|
26
|
+
if (!performance || !('getEntriesByName' in performance)) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
var sameNameEntries = performance.getEntriesByName(request.url, 'resource');
|
|
30
|
+
if (!sameNameEntries.length || !('toJSON' in sameNameEntries[0])) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
var candidates = (0, _browserCore.filter)(sameNameEntries, function (entry) {
|
|
34
|
+
return !alreadyMatchedEntries.has(entry);
|
|
35
|
+
});
|
|
36
|
+
candidates = (0, _browserCore.filter)(candidates, function (entry) {
|
|
37
|
+
return (0, _resourceUtils.hasValidResourceEntryDuration)(entry) && (0, _resourceUtils.hasValidResourceEntryTimings)(entry);
|
|
38
|
+
});
|
|
39
|
+
candidates = (0, _browserCore.filter)(candidates, function (entry) {
|
|
40
|
+
return isBetween(entry, request.startClocks.relative, endTime({
|
|
41
|
+
startTime: request.startClocks.relative,
|
|
42
|
+
duration: request.duration
|
|
43
|
+
}));
|
|
44
|
+
});
|
|
45
|
+
var lastEntry = undefined;
|
|
46
|
+
if (candidates.length > 1) {
|
|
47
|
+
var startTimeDuration = Number.MAX_SAFE_INTEGER;
|
|
48
|
+
candidates.forEach(function (entry) {
|
|
49
|
+
var _startTimeDuration = Math.abs(entry.startTime - request.startClocks.relative);
|
|
50
|
+
if (_startTimeDuration < startTimeDuration) {
|
|
51
|
+
startTimeDuration = _startTimeDuration;
|
|
52
|
+
lastEntry = entry;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
} else if (candidates.length === 1) {
|
|
56
|
+
lastEntry = candidates[0];
|
|
57
|
+
}
|
|
58
|
+
if (lastEntry) {
|
|
59
|
+
alreadyMatchedEntries.add(lastEntry);
|
|
60
|
+
return lastEntry.toJSON();
|
|
61
|
+
}
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function endTime(timing) {
|
|
67
|
+
return (0, _browserCore.addDuration)(timing.startTime, timing.duration);
|
|
68
|
+
}
|
|
69
|
+
function isBetween(timing, start, end) {
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
71
|
+
var errorMargin = 1;
|
|
72
|
+
return timing.startTime >= start - errorMargin && endTime(timing) <= (0, _browserCore.addDuration)(end, errorMargin);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=matchRequestResourceEntry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchRequestResourceEntry.js","names":["_resourceUtils","require","_browserCore","createRequestResourceEntryMatcher","alreadyMatchedEntries","WeakSet","matchRequestResourceEntry","request","performance","sameNameEntries","getEntriesByName","url","length","candidates","filter","entry","has","hasValidResourceEntryDuration","hasValidResourceEntryTimings","isBetween","startClocks","relative","endTime","startTime","duration","lastEntry","undefined","startTimeDuration","Number","MAX_SAFE_INTEGER","forEach","_startTimeDuration","Math","abs","add","toJSON","timing","addDuration","start","end","errorMargin"],"sources":["../../../../../rum/src/domain/rumEventsCollection/resource/matchRequestResourceEntry.js"],"sourcesContent":["import {\n hasValidResourceEntryDuration,\n hasValidResourceEntryTimings\n} from './resourceUtils'\nimport { filter, addDuration, WeakSet } from '@cloudcare/browser-core'\n\n/**\n * Look for corresponding timing in resource timing buffer\n *\n * Observations:\n * - Timing (start, end) are nested inside the request (start, end)\n * - Browsers generate a timing entry for OPTIONS request\n *\n * Strategy:\n * - from valid nested entries\n * - if a single timing match, return the timing\n * - if two following timings match (OPTIONS request), return the timing for the actual request\n * - otherwise we can't decide, return undefined\n */\nexport function createRequestResourceEntryMatcher() {\n var alreadyMatchedEntries = new WeakSet()\n\n return {\n matchRequestResourceEntry: function (request) {\n if (!performance || !('getEntriesByName' in performance)) {\n return\n }\n var sameNameEntries = performance.getEntriesByName(request.url, 'resource')\n\n if (!sameNameEntries.length || !('toJSON' in sameNameEntries[0])) {\n return\n }\n\n var candidates = filter(sameNameEntries, function (entry) {\n return !alreadyMatchedEntries.has(entry)\n })\n candidates = filter(candidates, function (entry) {\n return (\n hasValidResourceEntryDuration(entry) &&\n hasValidResourceEntryTimings(entry)\n )\n })\n candidates = filter(candidates, function (entry) {\n return isBetween(\n entry,\n request.startClocks.relative,\n endTime({\n startTime: request.startClocks.relative,\n duration: request.duration\n })\n )\n })\n let lastEntry = undefined\n if (candidates.length > 1) {\n let startTimeDuration = Number.MAX_SAFE_INTEGER\n candidates.forEach((entry) => {\n const _startTimeDuration = Math.abs(\n entry.startTime - request.startClocks.relative\n )\n if (_startTimeDuration < startTimeDuration) {\n startTimeDuration = _startTimeDuration\n lastEntry = entry\n }\n })\n } else if (candidates.length === 1) {\n lastEntry = candidates[0]\n }\n\n if (lastEntry) {\n alreadyMatchedEntries.add(lastEntry)\n return lastEntry.toJSON()\n }\n\n return\n }\n }\n}\n\nfunction endTime(timing) {\n return addDuration(timing.startTime, timing.duration)\n}\n\nfunction isBetween(timing, start, end) {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n var errorMargin = 1\n return (\n timing.startTime >= start - errorMargin &&\n endTime(timing) <= addDuration(end, errorMargin)\n )\n}\n"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAIA,IAAAC,YAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,iCAAiCA,CAAA,EAAG;EAClD,IAAIC,qBAAqB,GAAG,IAAIC,oBAAO,CAAC,CAAC;EAEzC,OAAO;IACLC,yBAAyB,EAAE,SAA3BA,yBAAyBA,CAAYC,OAAO,EAAE;MAC5C,IAAI,CAACC,WAAW,IAAI,EAAE,kBAAkB,IAAIA,WAAW,CAAC,EAAE;QACxD;MACF;MACA,IAAIC,eAAe,GAAGD,WAAW,CAACE,gBAAgB,CAACH,OAAO,CAACI,GAAG,EAAE,UAAU,CAAC;MAE3E,IAAI,CAACF,eAAe,CAACG,MAAM,IAAI,EAAE,QAAQ,IAAIH,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;QAChE;MACF;MAEA,IAAII,UAAU,GAAG,IAAAC,mBAAM,EAACL,eAAe,EAAE,UAAUM,KAAK,EAAE;QACxD,OAAO,CAACX,qBAAqB,CAACY,GAAG,CAACD,KAAK,CAAC;MAC1C,CAAC,CAAC;MACFF,UAAU,GAAG,IAAAC,mBAAM,EAACD,UAAU,EAAE,UAAUE,KAAK,EAAE;QAC/C,OACE,IAAAE,4CAA6B,EAACF,KAAK,CAAC,IACpC,IAAAG,2CAA4B,EAACH,KAAK,CAAC;MAEvC,CAAC,CAAC;MACFF,UAAU,GAAG,IAAAC,mBAAM,EAACD,UAAU,EAAE,UAAUE,KAAK,EAAE;QAC/C,OAAOI,SAAS,CACdJ,KAAK,EACLR,OAAO,CAACa,WAAW,CAACC,QAAQ,EAC5BC,OAAO,CAAC;UACNC,SAAS,EAAEhB,OAAO,CAACa,WAAW,CAACC,QAAQ;UACvCG,QAAQ,EAAEjB,OAAO,CAACiB;QACpB,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MACF,IAAIC,SAAS,GAAGC,SAAS;MACzB,IAAIb,UAAU,CAACD,MAAM,GAAG,CAAC,EAAE;QACzB,IAAIe,iBAAiB,GAAGC,MAAM,CAACC,gBAAgB;QAC/ChB,UAAU,CAACiB,OAAO,CAAC,UAACf,KAAK,EAAK;UAC5B,IAAMgB,kBAAkB,GAAGC,IAAI,CAACC,GAAG,CACjClB,KAAK,CAACQ,SAAS,GAAGhB,OAAO,CAACa,WAAW,CAACC,QACxC,CAAC;UACD,IAAIU,kBAAkB,GAAGJ,iBAAiB,EAAE;YAC1CA,iBAAiB,GAAGI,kBAAkB;YACtCN,SAAS,GAAGV,KAAK;UACnB;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIF,UAAU,CAACD,MAAM,KAAK,CAAC,EAAE;QAClCa,SAAS,GAAGZ,UAAU,CAAC,CAAC,CAAC;MAC3B;MAEA,IAAIY,SAAS,EAAE;QACbrB,qBAAqB,CAAC8B,GAAG,CAACT,SAAS,CAAC;QACpC,OAAOA,SAAS,CAACU,MAAM,CAAC,CAAC;MAC3B;MAEA;IACF;EACF,CAAC;AACH;AAEA,SAASb,OAAOA,CAACc,MAAM,EAAE;EACvB,OAAO,IAAAC,wBAAW,EAACD,MAAM,CAACb,SAAS,EAAEa,MAAM,CAACZ,QAAQ,CAAC;AACvD;AAEA,SAASL,SAASA,CAACiB,MAAM,EAAEE,KAAK,EAAEC,GAAG,EAAE;EACrC;EACA,IAAIC,WAAW,GAAG,CAAC;EACnB,OACEJ,MAAM,CAACb,SAAS,IAAIe,KAAK,GAAGE,WAAW,IACvClB,OAAO,CAACc,MAAM,CAAC,IAAI,IAAAC,wBAAW,EAACE,GAAG,EAAEC,WAAW,CAAC;AAEpD","ignoreList":[]}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.startResourceCollection = startResourceCollection;
|
|
7
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
8
|
+
var _matchRequestResourceEntry = require("./matchRequestResourceEntry");
|
|
9
|
+
var _resourceUtils = require("./resourceUtils");
|
|
10
|
+
var _pageStateHistory = require("../../contexts/pageStateHistory");
|
|
11
|
+
var _performanceObservable = require("../../performanceObservable");
|
|
12
|
+
var _retrieveInitialDocumentResourceTiming = require("./retrieveInitialDocumentResourceTiming");
|
|
13
|
+
function startResourceCollection(lifeCycle, configuration, pageStateHistory, taskQueue, retrieveInitialDocumentResourceTimingImpl, resourceTrackerManager) {
|
|
14
|
+
if (taskQueue === undefined) {
|
|
15
|
+
taskQueue = (0, _browserCore.createTaskQueue)();
|
|
16
|
+
}
|
|
17
|
+
if (typeof retrieveInitialDocumentResourceTimingImpl === 'undefined') {
|
|
18
|
+
retrieveInitialDocumentResourceTimingImpl = _retrieveInitialDocumentResourceTiming.retrieveInitialDocumentResourceTiming;
|
|
19
|
+
}
|
|
20
|
+
if (resourceTrackerManager) {
|
|
21
|
+
resourceTrackerManager.setFlushTrackedResource(function (rawEvent) {
|
|
22
|
+
lifeCycle.notify(_browserCore.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
var requestResourceEntryMatcher = (0, _matchRequestResourceEntry.createRequestResourceEntryMatcher)();
|
|
26
|
+
lifeCycle.subscribe(_browserCore.LifeCycleEventType.REQUEST_COMPLETED, function (request) {
|
|
27
|
+
handleResource(function () {
|
|
28
|
+
return processRequest(request, pageStateHistory, requestResourceEntryMatcher);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
var performanceResourceSubscription = (0, _performanceObservable.createPerformanceObservable)(configuration, {
|
|
32
|
+
type: _performanceObservable.RumPerformanceEntryType.RESOURCE,
|
|
33
|
+
buffered: true
|
|
34
|
+
}).subscribe(function (entries) {
|
|
35
|
+
var loop = function loop(entry) {
|
|
36
|
+
if (!(0, _resourceUtils.isResourceEntryRequestType)(entry) && !(0, _resourceUtils.isResourceUrlLimit)(entry.name, configuration.resourceUrlLimit)) {
|
|
37
|
+
handleResource(function () {
|
|
38
|
+
return processResourceEntry(entry, configuration);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
|
|
43
|
+
var entry = entries_1[_i];
|
|
44
|
+
loop(entry);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
retrieveInitialDocumentResourceTimingImpl(configuration, function (timing) {
|
|
48
|
+
handleResource(function () {
|
|
49
|
+
return processResourceEntry(timing, configuration);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
function handleResource(computeRawEvent) {
|
|
53
|
+
taskQueue.push(function () {
|
|
54
|
+
try {
|
|
55
|
+
var rawEvent = computeRawEvent();
|
|
56
|
+
if (rawEvent) {
|
|
57
|
+
if (resourceTrackerManager && rawEvent.domainContext && rawEvent.domainContext.resourceTrackerId && resourceTrackerManager.trackRequestResource(rawEvent.domainContext.resourceTrackerId, rawEvent)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
lifeCycle.notify(_browserCore.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent);
|
|
61
|
+
}
|
|
62
|
+
} catch (error) {
|
|
63
|
+
(0, _browserCore.addTelemetryError)(error);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
stop: function stop() {
|
|
69
|
+
performanceResourceSubscription.unsubscribe();
|
|
70
|
+
},
|
|
71
|
+
addResource: function addResource(resource, savedCommonContext) {
|
|
72
|
+
handleResource(function () {
|
|
73
|
+
return (0, _browserCore.extend)({
|
|
74
|
+
savedCommonContext: savedCommonContext
|
|
75
|
+
}, processCustomResource(resource));
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function processRequest(request, pageStateHistory, requestResourceEntryMatcher) {
|
|
81
|
+
var matchingTiming = requestResourceEntryMatcher.matchRequestResourceEntry(request);
|
|
82
|
+
var startClocks = matchingTiming ? (0, _browserCore.relativeToClocks)(matchingTiming.startTime) : request.startClocks;
|
|
83
|
+
var tracingInfo = computeRequestTracingInfo(request);
|
|
84
|
+
var type = request.type === _browserCore.RequestType.XHR ? _browserCore.ResourceType.XHR : _browserCore.ResourceType.FETCH;
|
|
85
|
+
var correspondingTimingOverrides = matchingTiming ? computeResourceEntryMetrics(matchingTiming) : undefined;
|
|
86
|
+
var duration = computeRequestDuration(pageStateHistory, startClocks, request.duration);
|
|
87
|
+
var urlObj = (0, _browserCore.urlParse)(request.url).getParse();
|
|
88
|
+
var resourceEvent = (0, _browserCore.extend2Lev)({
|
|
89
|
+
date: startClocks.timeStamp,
|
|
90
|
+
resource: {
|
|
91
|
+
id: (0, _browserCore.UUID)(),
|
|
92
|
+
type: type,
|
|
93
|
+
duration: duration,
|
|
94
|
+
method: request.method,
|
|
95
|
+
status: request.status,
|
|
96
|
+
statusGroup: (0, _browserCore.getStatusGroup)(request.status),
|
|
97
|
+
url: (0, _resourceUtils.isLongDataUrl)(request.url) ? (0, _resourceUtils.sanitizeDataUrl)(request.url) : request.url,
|
|
98
|
+
urlHost: urlObj.Host,
|
|
99
|
+
urlPath: urlObj.Path,
|
|
100
|
+
urlPathGroup: (0, _browserCore.replaceNumberCharByPath)(urlObj.Path),
|
|
101
|
+
urlQuery: (0, _browserCore.getQueryParamsFromUrl)(request.url),
|
|
102
|
+
deliveryType: matchingTiming && (0, _resourceUtils.computeResourceEntryDeliveryType)(matchingTiming),
|
|
103
|
+
protocol: matchingTiming && (0, _resourceUtils.computeResourceEntryProtocol)(matchingTiming)
|
|
104
|
+
},
|
|
105
|
+
type: _browserCore.RumEventType.RESOURCE
|
|
106
|
+
}, tracingInfo, correspondingTimingOverrides);
|
|
107
|
+
return {
|
|
108
|
+
startTime: startClocks.relative,
|
|
109
|
+
rawRumEvent: resourceEvent,
|
|
110
|
+
domainContext: {
|
|
111
|
+
performanceEntry: matchingTiming,
|
|
112
|
+
xhr: request.xhr,
|
|
113
|
+
requestHeaderContexts: request.requestHeaderContexts,
|
|
114
|
+
response: request.response,
|
|
115
|
+
requestInput: request.input,
|
|
116
|
+
requestInit: request.init,
|
|
117
|
+
error: request.error,
|
|
118
|
+
isAborted: request.isAborted,
|
|
119
|
+
handlingStack: request.handlingStack,
|
|
120
|
+
resourceTrackerId: getResourceTrackerIdFromRequest(request)
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function processResourceEntry(entry, configuration) {
|
|
125
|
+
var startClocks = (0, _browserCore.relativeToClocks)(entry.startTime);
|
|
126
|
+
var tracingInfo = computeResourceEntryTracingInfo(entry);
|
|
127
|
+
var type = (0, _resourceUtils.computeResourceEntryType)(entry);
|
|
128
|
+
var entryMetrics = computeResourceEntryMetrics(entry);
|
|
129
|
+
var urlObj = (0, _browserCore.urlParse)(entry.name).getParse();
|
|
130
|
+
var resourceEvent = (0, _browserCore.extend2Lev)({
|
|
131
|
+
date: startClocks.timeStamp,
|
|
132
|
+
resource: {
|
|
133
|
+
id: (0, _browserCore.UUID)(),
|
|
134
|
+
type: type,
|
|
135
|
+
url: entry.name,
|
|
136
|
+
urlHost: urlObj.Host,
|
|
137
|
+
urlPath: urlObj.Path,
|
|
138
|
+
urlPathGroup: (0, _browserCore.replaceNumberCharByPath)(urlObj.Path),
|
|
139
|
+
urlQuery: (0, _browserCore.getQueryParamsFromUrl)(entry.name),
|
|
140
|
+
method: 'GET',
|
|
141
|
+
status: discardZeroStatus(entry.responseStatus),
|
|
142
|
+
statusGroup: (0, _browserCore.getStatusGroup)(entry.responseStatus),
|
|
143
|
+
deliveryType: (0, _resourceUtils.computeResourceEntryDeliveryType)(entry),
|
|
144
|
+
protocol: (0, _resourceUtils.computeResourceEntryProtocol)(entry)
|
|
145
|
+
},
|
|
146
|
+
type: _browserCore.RumEventType.RESOURCE
|
|
147
|
+
}, tracingInfo, entryMetrics);
|
|
148
|
+
return {
|
|
149
|
+
startTime: startClocks.relative,
|
|
150
|
+
rawRumEvent: resourceEvent,
|
|
151
|
+
domainContext: {
|
|
152
|
+
performanceEntry: entry
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function processCustomResource(resource) {
|
|
157
|
+
var resourceEvent = {
|
|
158
|
+
date: resource.startClocks.timeStamp,
|
|
159
|
+
resource: {
|
|
160
|
+
id: (0, _browserCore.UUID)(),
|
|
161
|
+
type: resource.type
|
|
162
|
+
},
|
|
163
|
+
type: _browserCore.RumEventType.RESOURCE
|
|
164
|
+
};
|
|
165
|
+
return {
|
|
166
|
+
customerContext: resource.context,
|
|
167
|
+
startTime: resource.startClocks.relative,
|
|
168
|
+
rawRumEvent: resourceEvent,
|
|
169
|
+
domainContext: {
|
|
170
|
+
resource: resource
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function computeResourceEntryMetrics(entry) {
|
|
175
|
+
return {
|
|
176
|
+
resource: (0, _browserCore.extend2Lev)({}, {
|
|
177
|
+
duration: (0, _resourceUtils.computeResourceEntryDuration)(entry)
|
|
178
|
+
}, (0, _resourceUtils.computeResourceEntrySize)(entry), (0, _resourceUtils.computePerformanceResourceDetails)(entry))
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function computeRequestTracingInfo(request) {
|
|
182
|
+
var hasBeenTraced = request.traceSampled && request.traceId && request.spanId;
|
|
183
|
+
if (!hasBeenTraced) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
_gc: {
|
|
188
|
+
spanId: request.spanId,
|
|
189
|
+
traceId: request.traceId
|
|
190
|
+
},
|
|
191
|
+
resource: {
|
|
192
|
+
id: (0, _browserCore.UUID)()
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function computeRequestDuration(pageStateHistory, startClocks, duration) {
|
|
197
|
+
return !pageStateHistory.wasInPageStateDuringPeriod(_pageStateHistory.PageState.FROZEN, startClocks.relative, duration) ? (0, _browserCore.toServerDuration)(duration) : undefined;
|
|
198
|
+
}
|
|
199
|
+
function computeResourceEntryTracingInfo(entry) {
|
|
200
|
+
return entry.traceId ? {
|
|
201
|
+
_gc: {
|
|
202
|
+
traceId: entry.traceId
|
|
203
|
+
}
|
|
204
|
+
} : undefined;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it
|
|
208
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes
|
|
209
|
+
*/
|
|
210
|
+
function discardZeroStatus(statusCode) {
|
|
211
|
+
return statusCode === 0 ? undefined : statusCode;
|
|
212
|
+
}
|
|
213
|
+
function getResourceTrackerIdFromRequest(request) {
|
|
214
|
+
return getHeaderValue(request.requestHeaderContexts, 'x-rum-resource-id');
|
|
215
|
+
}
|
|
216
|
+
function getHeaderValue(headers, key) {
|
|
217
|
+
if (!headers || !key) {
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
var normalizedKey = String(key).toLowerCase();
|
|
221
|
+
if (typeof headers.get === 'function') {
|
|
222
|
+
return headers.get(key) || headers.get(normalizedKey) || undefined;
|
|
223
|
+
}
|
|
224
|
+
if (Array.isArray(headers)) {
|
|
225
|
+
for (var i = 0; i < headers.length; i += 1) {
|
|
226
|
+
var headerEntry = headers[i];
|
|
227
|
+
if (Array.isArray(headerEntry) && String(headerEntry[0]).toLowerCase() === normalizedKey) {
|
|
228
|
+
return headerEntry[1];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
for (var headerKey in headers) {
|
|
234
|
+
if (String(headerKey).toLowerCase() === normalizedKey) {
|
|
235
|
+
return headers[headerKey];
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=resourceCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceCollection.js","names":["_browserCore","require","_matchRequestResourceEntry","_resourceUtils","_pageStateHistory","_performanceObservable","_retrieveInitialDocumentResourceTiming","startResourceCollection","lifeCycle","configuration","pageStateHistory","taskQueue","retrieveInitialDocumentResourceTimingImpl","resourceTrackerManager","undefined","createTaskQueue","retrieveInitialDocumentResourceTiming","setFlushTrackedResource","rawEvent","notify","LifeCycleEventType","RAW_RUM_EVENT_COLLECTED","requestResourceEntryMatcher","createRequestResourceEntryMatcher","subscribe","REQUEST_COMPLETED","request","handleResource","processRequest","performanceResourceSubscription","createPerformanceObservable","type","RumPerformanceEntryType","RESOURCE","buffered","entries","loop","entry","isResourceEntryRequestType","isResourceUrlLimit","name","resourceUrlLimit","processResourceEntry","_i","entries_1","length","timing","computeRawEvent","push","domainContext","resourceTrackerId","trackRequestResource","error","addTelemetryError","stop","unsubscribe","addResource","resource","savedCommonContext","extend","processCustomResource","matchingTiming","matchRequestResourceEntry","startClocks","relativeToClocks","startTime","tracingInfo","computeRequestTracingInfo","RequestType","XHR","ResourceType","FETCH","correspondingTimingOverrides","computeResourceEntryMetrics","duration","computeRequestDuration","urlObj","urlParse","url","getParse","resourceEvent","extend2Lev","date","timeStamp","id","UUID","method","status","statusGroup","getStatusGroup","isLongDataUrl","sanitizeDataUrl","urlHost","Host","urlPath","Path","urlPathGroup","replaceNumberCharByPath","urlQuery","getQueryParamsFromUrl","deliveryType","computeResourceEntryDeliveryType","protocol","computeResourceEntryProtocol","RumEventType","relative","rawRumEvent","performanceEntry","xhr","requestHeaderContexts","response","requestInput","input","requestInit","init","isAborted","handlingStack","getResourceTrackerIdFromRequest","computeResourceEntryTracingInfo","computeResourceEntryType","entryMetrics","discardZeroStatus","responseStatus","customerContext","context","computeResourceEntryDuration","computeResourceEntrySize","computePerformanceResourceDetails","hasBeenTraced","traceSampled","traceId","spanId","_gc","wasInPageStateDuringPeriod","PageState","FROZEN","toServerDuration","statusCode","getHeaderValue","headers","key","normalizedKey","String","toLowerCase","get","Array","isArray","i","headerEntry","headerKey"],"sources":["../../../../../rum/src/domain/rumEventsCollection/resource/resourceCollection.js"],"sourcesContent":["import {\n getStatusGroup,\n UUID,\n extend,\n extend2Lev,\n relativeToClocks,\n urlParse,\n getQueryParamsFromUrl,\n replaceNumberCharByPath,\n RequestType,\n ResourceType,\n RumEventType,\n LifeCycleEventType,\n toServerDuration,\n createTaskQueue,\n addTelemetryError\n} from '@cloudcare/browser-core'\nimport { createRequestResourceEntryMatcher } from './matchRequestResourceEntry'\nimport {\n computePerformanceResourceDetails,\n computeResourceEntryDuration,\n computeResourceEntryType,\n computeResourceEntrySize,\n isResourceEntryRequestType,\n isResourceUrlLimit,\n isLongDataUrl,\n sanitizeDataUrl,\n computeResourceEntryDeliveryType,\n computeResourceEntryProtocol\n} from './resourceUtils'\nimport { PageState } from '../../contexts/pageStateHistory'\nimport {\n createPerformanceObservable,\n RumPerformanceEntryType\n} from '../../performanceObservable'\nimport { retrieveInitialDocumentResourceTiming } from './retrieveInitialDocumentResourceTiming'\nexport function startResourceCollection(\n lifeCycle,\n configuration,\n pageStateHistory,\n taskQueue,\n retrieveInitialDocumentResourceTimingImpl,\n resourceTrackerManager\n) {\n if (taskQueue === undefined) {\n taskQueue = createTaskQueue()\n }\n if (typeof retrieveInitialDocumentResourceTimingImpl === 'undefined') {\n retrieveInitialDocumentResourceTimingImpl =\n retrieveInitialDocumentResourceTiming\n }\n if (resourceTrackerManager) {\n resourceTrackerManager.setFlushTrackedResource(function (rawEvent) {\n lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent)\n })\n }\n var requestResourceEntryMatcher = createRequestResourceEntryMatcher()\n lifeCycle.subscribe(LifeCycleEventType.REQUEST_COMPLETED, function (request) {\n handleResource(function () {\n return processRequest(request, pageStateHistory, requestResourceEntryMatcher)\n })\n })\n var performanceResourceSubscription = createPerformanceObservable(\n configuration,\n {\n type: RumPerformanceEntryType.RESOURCE,\n buffered: true\n }\n ).subscribe(function (entries) {\n var loop = function (entry) {\n if (\n !isResourceEntryRequestType(entry) &&\n !isResourceUrlLimit(entry.name, configuration.resourceUrlLimit)\n ) {\n handleResource(function () {\n return processResourceEntry(entry, configuration)\n })\n }\n }\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var entry = entries_1[_i]\n loop(entry)\n }\n })\n\n retrieveInitialDocumentResourceTimingImpl(configuration, function (timing) {\n handleResource(function () {\n return processResourceEntry(timing, configuration)\n })\n })\n function handleResource(computeRawEvent) {\n taskQueue.push(function () {\n try {\n const rawEvent = computeRawEvent()\n if (rawEvent) {\n if (\n resourceTrackerManager &&\n rawEvent.domainContext &&\n rawEvent.domainContext.resourceTrackerId &&\n resourceTrackerManager.trackRequestResource(\n rawEvent.domainContext.resourceTrackerId,\n rawEvent\n )\n ) {\n return\n }\n lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent)\n }\n } catch (error) {\n addTelemetryError(error)\n }\n })\n }\n return {\n stop: function () {\n performanceResourceSubscription.unsubscribe()\n },\n addResource: (resource, savedCommonContext) => {\n handleResource(function () {\n return extend(\n { savedCommonContext: savedCommonContext },\n processCustomResource(resource)\n )\n })\n }\n }\n}\n\nfunction processRequest(request, pageStateHistory, requestResourceEntryMatcher) {\n var matchingTiming = requestResourceEntryMatcher.matchRequestResourceEntry(request)\n var startClocks = matchingTiming\n ? relativeToClocks(matchingTiming.startTime)\n : request.startClocks\n var tracingInfo = computeRequestTracingInfo(request)\n\n var type =\n request.type === RequestType.XHR ? ResourceType.XHR : ResourceType.FETCH\n var correspondingTimingOverrides = matchingTiming\n ? computeResourceEntryMetrics(matchingTiming)\n : undefined\n\n var duration = computeRequestDuration(\n pageStateHistory,\n startClocks,\n request.duration\n )\n\n var urlObj = urlParse(request.url).getParse()\n var resourceEvent = extend2Lev(\n {\n date: startClocks.timeStamp,\n resource: {\n id: UUID(),\n type: type,\n duration: duration,\n method: request.method,\n status: request.status,\n statusGroup: getStatusGroup(request.status),\n url: isLongDataUrl(request.url)\n ? sanitizeDataUrl(request.url)\n : request.url,\n urlHost: urlObj.Host,\n urlPath: urlObj.Path,\n urlPathGroup: replaceNumberCharByPath(urlObj.Path),\n urlQuery: getQueryParamsFromUrl(request.url),\n deliveryType:\n matchingTiming && computeResourceEntryDeliveryType(matchingTiming),\n protocol: matchingTiming && computeResourceEntryProtocol(matchingTiming)\n },\n type: RumEventType.RESOURCE\n },\n tracingInfo,\n correspondingTimingOverrides\n )\n return {\n startTime: startClocks.relative,\n rawRumEvent: resourceEvent,\n domainContext: {\n performanceEntry: matchingTiming,\n xhr: request.xhr,\n requestHeaderContexts: request.requestHeaderContexts,\n response: request.response,\n requestInput: request.input,\n requestInit: request.init,\n error: request.error,\n isAborted: request.isAborted,\n handlingStack: request.handlingStack,\n resourceTrackerId: getResourceTrackerIdFromRequest(request)\n }\n }\n}\n\nfunction processResourceEntry(entry, configuration) {\n var startClocks = relativeToClocks(entry.startTime)\n var tracingInfo = computeResourceEntryTracingInfo(entry)\n var type = computeResourceEntryType(entry)\n var entryMetrics = computeResourceEntryMetrics(entry)\n var urlObj = urlParse(entry.name).getParse()\n var resourceEvent = extend2Lev(\n {\n date: startClocks.timeStamp,\n resource: {\n id: UUID(),\n type: type,\n url: entry.name,\n urlHost: urlObj.Host,\n urlPath: urlObj.Path,\n urlPathGroup: replaceNumberCharByPath(urlObj.Path),\n urlQuery: getQueryParamsFromUrl(entry.name),\n method: 'GET',\n status: discardZeroStatus(entry.responseStatus),\n statusGroup: getStatusGroup(entry.responseStatus),\n deliveryType: computeResourceEntryDeliveryType(entry),\n protocol: computeResourceEntryProtocol(entry)\n },\n type: RumEventType.RESOURCE\n },\n tracingInfo,\n entryMetrics\n )\n return {\n startTime: startClocks.relative,\n rawRumEvent: resourceEvent,\n domainContext: {\n performanceEntry: entry\n }\n }\n}\nfunction processCustomResource(resource) {\n var resourceEvent = {\n date: resource.startClocks.timeStamp,\n resource: {\n id: UUID(),\n type: resource.type\n },\n type: RumEventType.RESOURCE\n }\n return {\n customerContext: resource.context,\n startTime: resource.startClocks.relative,\n rawRumEvent: resourceEvent,\n domainContext: {\n resource: resource\n }\n }\n}\nfunction computeResourceEntryMetrics(entry) {\n return {\n resource: extend2Lev(\n {},\n {\n duration: computeResourceEntryDuration(entry)\n },\n computeResourceEntrySize(entry),\n computePerformanceResourceDetails(entry)\n )\n }\n}\n\nfunction computeRequestTracingInfo(request) {\n var hasBeenTraced = request.traceSampled && request.traceId && request.spanId\n if (!hasBeenTraced) {\n return undefined\n }\n return {\n _gc: {\n spanId: request.spanId,\n traceId: request.traceId\n },\n resource: { id: UUID() }\n }\n}\n\nfunction computeRequestDuration(pageStateHistory, startClocks, duration) {\n return !pageStateHistory.wasInPageStateDuringPeriod(\n PageState.FROZEN,\n startClocks.relative,\n duration\n )\n ? toServerDuration(duration)\n : undefined\n}\nfunction computeResourceEntryTracingInfo(entry) {\n return entry.traceId ? { _gc: { traceId: entry.traceId } } : undefined\n}\n/**\n * The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it\n * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes\n */\nfunction discardZeroStatus(statusCode) {\n return statusCode === 0 ? undefined : statusCode\n}\n\nfunction getResourceTrackerIdFromRequest(request) {\n return getHeaderValue(request.requestHeaderContexts, 'x-rum-resource-id')\n}\n\nfunction getHeaderValue(headers, key) {\n if (!headers || !key) {\n return undefined\n }\n\n var normalizedKey = String(key).toLowerCase()\n\n if (typeof headers.get === 'function') {\n return headers.get(key) || headers.get(normalizedKey) || undefined\n }\n\n if (Array.isArray(headers)) {\n for (var i = 0; i < headers.length; i += 1) {\n var headerEntry = headers[i]\n if (\n Array.isArray(headerEntry) &&\n String(headerEntry[0]).toLowerCase() === normalizedKey\n ) {\n return headerEntry[1]\n }\n }\n return undefined\n }\n\n for (var headerKey in headers) {\n if (String(headerKey).toLowerCase() === normalizedKey) {\n return headers[headerKey]\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createResourceTrackerManager = createResourceTrackerManager;
|
|
7
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
8
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
9
|
+
var RESOURCE_TRACKER_HEADER = 'x-rum-resource-id';
|
|
10
|
+
var RESOURCE_TRACKER_TIMEOUT_MS = 30 * 1000;
|
|
11
|
+
var RESOURCE_TRACKER_RETENTION_MS = 60 * 1000;
|
|
12
|
+
var RESOURCE_TRACKER_ORPHAN_TTL_MS = 5 * 60 * 1000;
|
|
13
|
+
var DEBUG_CLONE_MAX_DEPTH = 8;
|
|
14
|
+
function createResourceTrackerManager() {
|
|
15
|
+
var trackers = new Map();
|
|
16
|
+
var flushTrackedResource;
|
|
17
|
+
return {
|
|
18
|
+
createTrackerId: function createTrackerId() {
|
|
19
|
+
var trackerId = (0, _browserCore.UUID)();
|
|
20
|
+
getOrCreateTracker(trackerId);
|
|
21
|
+
return trackerId;
|
|
22
|
+
},
|
|
23
|
+
setResourceContext: function setResourceContext(trackerId, context) {
|
|
24
|
+
var tracker = trackers.get(trackerId);
|
|
25
|
+
if (!tracker) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (isTrackerImmutable(tracker)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
tracker.context = (0, _browserCore.assign)({}, context || {});
|
|
32
|
+
},
|
|
33
|
+
appendResourceContext: function appendResourceContext(trackerId, context) {
|
|
34
|
+
var tracker = trackers.get(trackerId);
|
|
35
|
+
if (!tracker) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (isTrackerImmutable(tracker)) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
tracker.context = (0, _browserCore.assign)(tracker.context, context || {});
|
|
42
|
+
},
|
|
43
|
+
finishResource: function finishResource(trackerId) {
|
|
44
|
+
var tracker = trackers.get(trackerId);
|
|
45
|
+
if (!tracker) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
tracker.finished = true;
|
|
49
|
+
if (tracker.status === 'request_collected') {
|
|
50
|
+
flushTracker(tracker, 'flushed');
|
|
51
|
+
} else if (tracker.status === 'created') {
|
|
52
|
+
tracker.status = 'finished';
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
getResource: function getResource(trackerId) {
|
|
56
|
+
var tracker = trackers.get(trackerId);
|
|
57
|
+
if (!tracker) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return cloneTrackerSnapshot(tracker);
|
|
61
|
+
},
|
|
62
|
+
trackRequestResource: function trackRequestResource(trackerId, rawEvent) {
|
|
63
|
+
var tracker = trackers.get(trackerId);
|
|
64
|
+
if (!tracker) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (tracker.requestHeaderMatched || tracker.flushed) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
clearTrackerTimeout(tracker);
|
|
71
|
+
tracker.requestHeaderMatched = true;
|
|
72
|
+
tracker.rawResourceEvent = rawEvent.rawRumEvent;
|
|
73
|
+
tracker.startTime = rawEvent.startTime;
|
|
74
|
+
tracker.domainContext = rawEvent.domainContext;
|
|
75
|
+
tracker.resource = extractResourceSummary(rawEvent.rawRumEvent);
|
|
76
|
+
tracker.status = 'request_collected';
|
|
77
|
+
if (tracker.finished) {
|
|
78
|
+
flushTracker(tracker, 'flushed');
|
|
79
|
+
} else {
|
|
80
|
+
tracker.timeoutId = setTimeout(function () {
|
|
81
|
+
tracker.timeoutId = undefined;
|
|
82
|
+
if (tracker.status === 'request_collected') {
|
|
83
|
+
flushTracker(tracker, 'timeout_flushed');
|
|
84
|
+
}
|
|
85
|
+
}, RESOURCE_TRACKER_TIMEOUT_MS);
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
},
|
|
89
|
+
setFlushTrackedResource: function setFlushTrackedResource(handler) {
|
|
90
|
+
flushTrackedResource = handler;
|
|
91
|
+
},
|
|
92
|
+
getTrackerIdFromRequestHeaders: function getTrackerIdFromRequestHeaders(requestHeaders) {
|
|
93
|
+
return getHeaderValue(requestHeaders, RESOURCE_TRACKER_HEADER);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
function getOrCreateTracker(trackerId) {
|
|
97
|
+
var tracker = trackers.get(trackerId);
|
|
98
|
+
if (!tracker) {
|
|
99
|
+
tracker = {
|
|
100
|
+
id: trackerId,
|
|
101
|
+
status: 'created',
|
|
102
|
+
context: {},
|
|
103
|
+
finished: false,
|
|
104
|
+
flushed: false,
|
|
105
|
+
requestHeaderMatched: false
|
|
106
|
+
};
|
|
107
|
+
trackers.set(trackerId, tracker);
|
|
108
|
+
tracker.orphanTimeoutId = setTimeout(function () {
|
|
109
|
+
tracker.status = 'cleared';
|
|
110
|
+
trackers["delete"](tracker.id);
|
|
111
|
+
}, RESOURCE_TRACKER_ORPHAN_TTL_MS);
|
|
112
|
+
}
|
|
113
|
+
return tracker;
|
|
114
|
+
}
|
|
115
|
+
function flushTracker(tracker, status) {
|
|
116
|
+
if (tracker.flushed || !tracker.rawResourceEvent) {
|
|
117
|
+
tracker.status = status;
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
clearTrackerTimeout(tracker);
|
|
121
|
+
tracker.flushed = true;
|
|
122
|
+
tracker.status = status;
|
|
123
|
+
if (!flushTrackedResource) {
|
|
124
|
+
scheduleTrackerClear(tracker);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
flushTrackedResource({
|
|
129
|
+
startTime: tracker.startTime,
|
|
130
|
+
rawRumEvent: tracker.rawResourceEvent,
|
|
131
|
+
customerContext: (0, _browserCore.assign)({}, tracker.context),
|
|
132
|
+
domainContext: tracker.domainContext
|
|
133
|
+
});
|
|
134
|
+
} catch (error) {
|
|
135
|
+
(0, _browserCore.addTelemetryError)(error);
|
|
136
|
+
} finally {
|
|
137
|
+
scheduleTrackerClear(tracker);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function scheduleTrackerClear(tracker) {
|
|
141
|
+
clearTrackerTimeout(tracker);
|
|
142
|
+
tracker.clearTimeoutId = setTimeout(function () {
|
|
143
|
+
tracker.status = 'cleared';
|
|
144
|
+
trackers["delete"](tracker.id);
|
|
145
|
+
}, RESOURCE_TRACKER_RETENTION_MS);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function clearTrackerTimeout(tracker) {
|
|
149
|
+
if (tracker.timeoutId) {
|
|
150
|
+
clearTimeout(tracker.timeoutId);
|
|
151
|
+
tracker.timeoutId = undefined;
|
|
152
|
+
}
|
|
153
|
+
if (tracker.orphanTimeoutId) {
|
|
154
|
+
clearTimeout(tracker.orphanTimeoutId);
|
|
155
|
+
tracker.orphanTimeoutId = undefined;
|
|
156
|
+
}
|
|
157
|
+
if (tracker.clearTimeoutId) {
|
|
158
|
+
clearTimeout(tracker.clearTimeoutId);
|
|
159
|
+
tracker.clearTimeoutId = undefined;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function isTrackerImmutable(tracker) {
|
|
163
|
+
return tracker.status === 'flushed' || tracker.status === 'timeout_flushed' || tracker.status === 'cleared';
|
|
164
|
+
}
|
|
165
|
+
function extractResourceSummary(rawRumEvent) {
|
|
166
|
+
var resource = rawRumEvent && rawRumEvent.resource;
|
|
167
|
+
if (!resource) {
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
type: resource.type,
|
|
172
|
+
url: resource.url,
|
|
173
|
+
method: resource.method,
|
|
174
|
+
status: resource.status
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function cloneTrackerSnapshot(tracker) {
|
|
178
|
+
return {
|
|
179
|
+
trackerId: tracker.id,
|
|
180
|
+
status: tracker.status,
|
|
181
|
+
context: (0, _browserCore.deepClone)(tracker.context),
|
|
182
|
+
resource: tracker.resource ? (0, _browserCore.assign)({}, tracker.resource) : undefined,
|
|
183
|
+
rawRumEvent: tracker.rawResourceEvent ? cloneDebugRawRumEvent(tracker.rawResourceEvent) : undefined
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function cloneDebugRawRumEvent(rawRumEvent) {
|
|
187
|
+
var clonedEvent = {};
|
|
188
|
+
for (var key in rawRumEvent) {
|
|
189
|
+
if (Object.prototype.hasOwnProperty.call(rawRumEvent, key)) {
|
|
190
|
+
clonedEvent[key] = cloneDebugObject(rawRumEvent[key], DEBUG_CLONE_MAX_DEPTH);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return clonedEvent;
|
|
194
|
+
}
|
|
195
|
+
function cloneDebugObject(value, depth) {
|
|
196
|
+
if (!value || _typeof(value) !== 'object' || depth < 0) {
|
|
197
|
+
return value;
|
|
198
|
+
}
|
|
199
|
+
if (Array.isArray(value)) {
|
|
200
|
+
var clonedArray = [];
|
|
201
|
+
for (var i = 0; i < value.length; i += 1) {
|
|
202
|
+
clonedArray.push(cloneDebugObject(value[i], depth - 1));
|
|
203
|
+
}
|
|
204
|
+
return clonedArray;
|
|
205
|
+
}
|
|
206
|
+
var clonedObject = {};
|
|
207
|
+
for (var key in value) {
|
|
208
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
209
|
+
clonedObject[key] = cloneDebugObject(value[key], depth - 1);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return clonedObject;
|
|
213
|
+
}
|
|
214
|
+
function getHeaderValue(headers, key) {
|
|
215
|
+
if (!headers || !key) {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
var normalizedKey = String(key).toLowerCase();
|
|
219
|
+
if (typeof headers.get === 'function') {
|
|
220
|
+
return headers.get(key) || headers.get(normalizedKey) || undefined;
|
|
221
|
+
}
|
|
222
|
+
if (Array.isArray(headers)) {
|
|
223
|
+
for (var i = 0; i < headers.length; i += 1) {
|
|
224
|
+
var entry = headers[i];
|
|
225
|
+
if (Array.isArray(entry) && String(entry[0]).toLowerCase() === normalizedKey) {
|
|
226
|
+
return entry[1];
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
for (var headerKey in headers) {
|
|
232
|
+
if (String(headerKey).toLowerCase() === normalizedKey) {
|
|
233
|
+
return headers[headerKey];
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=resourceTrackerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceTrackerManager.js","names":["_browserCore","require","_typeof","o","Symbol","iterator","constructor","prototype","RESOURCE_TRACKER_HEADER","RESOURCE_TRACKER_TIMEOUT_MS","RESOURCE_TRACKER_RETENTION_MS","RESOURCE_TRACKER_ORPHAN_TTL_MS","DEBUG_CLONE_MAX_DEPTH","createResourceTrackerManager","trackers","Map","flushTrackedResource","createTrackerId","trackerId","UUID","getOrCreateTracker","setResourceContext","context","tracker","get","isTrackerImmutable","assign","appendResourceContext","finishResource","finished","status","flushTracker","getResource","undefined","cloneTrackerSnapshot","trackRequestResource","rawEvent","requestHeaderMatched","flushed","clearTrackerTimeout","rawResourceEvent","rawRumEvent","startTime","domainContext","resource","extractResourceSummary","timeoutId","setTimeout","setFlushTrackedResource","handler","getTrackerIdFromRequestHeaders","requestHeaders","getHeaderValue","id","set","orphanTimeoutId","scheduleTrackerClear","customerContext","error","addTelemetryError","clearTimeoutId","clearTimeout","type","url","method","deepClone","cloneDebugRawRumEvent","clonedEvent","key","Object","hasOwnProperty","call","cloneDebugObject","value","depth","Array","isArray","clonedArray","i","length","push","clonedObject","headers","normalizedKey","String","toLowerCase","entry","headerKey"],"sources":["../../../../../rum/src/domain/rumEventsCollection/resource/resourceTrackerManager.js"],"sourcesContent":["import { UUID, assign, deepClone, addTelemetryError } from '@cloudcare/browser-core'\n\nvar RESOURCE_TRACKER_HEADER = 'x-rum-resource-id'\nvar RESOURCE_TRACKER_TIMEOUT_MS = 30 * 1000\nvar RESOURCE_TRACKER_RETENTION_MS = 60 * 1000\nvar RESOURCE_TRACKER_ORPHAN_TTL_MS = 5 * 60 * 1000\nvar DEBUG_CLONE_MAX_DEPTH = 8\n\nexport function createResourceTrackerManager() {\n var trackers = new Map()\n var flushTrackedResource\n\n return {\n createTrackerId: function () {\n var trackerId = UUID()\n getOrCreateTracker(trackerId)\n return trackerId\n },\n setResourceContext: function (trackerId, context) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return\n }\n if (isTrackerImmutable(tracker)) {\n return\n }\n tracker.context = assign({}, context || {})\n },\n appendResourceContext: function (trackerId, context) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return\n }\n if (isTrackerImmutable(tracker)) {\n return\n }\n tracker.context = assign(tracker.context, context || {})\n },\n finishResource: function (trackerId) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return\n }\n tracker.finished = true\n if (tracker.status === 'request_collected') {\n flushTracker(tracker, 'flushed')\n } else if (tracker.status === 'created') {\n tracker.status = 'finished'\n }\n },\n getResource: function (trackerId) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return undefined\n }\n return cloneTrackerSnapshot(tracker)\n },\n trackRequestResource: function (trackerId, rawEvent) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n return false\n }\n if (tracker.requestHeaderMatched || tracker.flushed) {\n return false\n }\n\n clearTrackerTimeout(tracker)\n tracker.requestHeaderMatched = true\n tracker.rawResourceEvent = rawEvent.rawRumEvent\n tracker.startTime = rawEvent.startTime\n tracker.domainContext = rawEvent.domainContext\n tracker.resource = extractResourceSummary(rawEvent.rawRumEvent)\n tracker.status = 'request_collected'\n\n if (tracker.finished) {\n flushTracker(tracker, 'flushed')\n } else {\n tracker.timeoutId = setTimeout(function () {\n tracker.timeoutId = undefined\n if (tracker.status === 'request_collected') {\n flushTracker(tracker, 'timeout_flushed')\n }\n }, RESOURCE_TRACKER_TIMEOUT_MS)\n }\n\n return true\n },\n setFlushTrackedResource: function (handler) {\n flushTrackedResource = handler\n },\n getTrackerIdFromRequestHeaders: function (requestHeaders) {\n return getHeaderValue(requestHeaders, RESOURCE_TRACKER_HEADER)\n }\n }\n\n function getOrCreateTracker(trackerId) {\n var tracker = trackers.get(trackerId)\n if (!tracker) {\n tracker = {\n id: trackerId,\n status: 'created',\n context: {},\n finished: false,\n flushed: false,\n requestHeaderMatched: false\n }\n trackers.set(trackerId, tracker)\n tracker.orphanTimeoutId = setTimeout(function () {\n tracker.status = 'cleared'\n trackers.delete(tracker.id)\n }, RESOURCE_TRACKER_ORPHAN_TTL_MS)\n }\n return tracker\n }\n\n function flushTracker(tracker, status) {\n if (tracker.flushed || !tracker.rawResourceEvent) {\n tracker.status = status\n return\n }\n\n clearTrackerTimeout(tracker)\n tracker.flushed = true\n tracker.status = status\n\n if (!flushTrackedResource) {\n scheduleTrackerClear(tracker)\n return\n }\n\n try {\n flushTrackedResource({\n startTime: tracker.startTime,\n rawRumEvent: tracker.rawResourceEvent,\n customerContext: assign({}, tracker.context),\n domainContext: tracker.domainContext\n })\n } catch (error) {\n addTelemetryError(error)\n } finally {\n scheduleTrackerClear(tracker)\n }\n }\n\n function scheduleTrackerClear(tracker) {\n clearTrackerTimeout(tracker)\n tracker.clearTimeoutId = setTimeout(function () {\n tracker.status = 'cleared'\n trackers.delete(tracker.id)\n }, RESOURCE_TRACKER_RETENTION_MS)\n }\n}\n\nfunction clearTrackerTimeout(tracker) {\n if (tracker.timeoutId) {\n clearTimeout(tracker.timeoutId)\n tracker.timeoutId = undefined\n }\n if (tracker.orphanTimeoutId) {\n clearTimeout(tracker.orphanTimeoutId)\n tracker.orphanTimeoutId = undefined\n }\n if (tracker.clearTimeoutId) {\n clearTimeout(tracker.clearTimeoutId)\n tracker.clearTimeoutId = undefined\n }\n}\n\nfunction isTrackerImmutable(tracker) {\n return (\n tracker.status === 'flushed' ||\n tracker.status === 'timeout_flushed' ||\n tracker.status === 'cleared'\n )\n}\n\nfunction extractResourceSummary(rawRumEvent) {\n var resource = rawRumEvent && rawRumEvent.resource\n if (!resource) {\n return undefined\n }\n\n return {\n type: resource.type,\n url: resource.url,\n method: resource.method,\n status: resource.status\n }\n}\n\nfunction cloneTrackerSnapshot(tracker) {\n return {\n trackerId: tracker.id,\n status: tracker.status,\n context: deepClone(tracker.context),\n resource: tracker.resource ? assign({}, tracker.resource) : undefined,\n rawRumEvent: tracker.rawResourceEvent\n ? cloneDebugRawRumEvent(tracker.rawResourceEvent)\n : undefined\n }\n}\n\nfunction cloneDebugRawRumEvent(rawRumEvent) {\n var clonedEvent = {}\n for (var key in rawRumEvent) {\n if (Object.prototype.hasOwnProperty.call(rawRumEvent, key)) {\n clonedEvent[key] = cloneDebugObject(rawRumEvent[key], DEBUG_CLONE_MAX_DEPTH)\n }\n }\n return clonedEvent\n}\n\nfunction cloneDebugObject(value, depth) {\n if (!value || typeof value !== 'object' || depth < 0) {\n return value\n }\n\n if (Array.isArray(value)) {\n var clonedArray = []\n for (var i = 0; i < value.length; i += 1) {\n clonedArray.push(cloneDebugObject(value[i], depth - 1))\n }\n return clonedArray\n }\n\n var clonedObject = {}\n for (var key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n clonedObject[key] = cloneDebugObject(value[key], depth - 1)\n }\n }\n return clonedObject\n}\n\nfunction getHeaderValue(headers, key) {\n if (!headers || !key) {\n return undefined\n }\n\n var normalizedKey = String(key).toLowerCase()\n\n if (typeof headers.get === 'function') {\n return headers.get(key) || headers.get(normalizedKey) || undefined\n }\n\n if (Array.isArray(headers)) {\n for (var i = 0; i < headers.length; i += 1) {\n var entry = headers[i]\n if (\n Array.isArray(entry) &&\n String(entry[0]).toLowerCase() === normalizedKey\n ) {\n return entry[1]\n }\n }\n return undefined\n }\n\n for (var headerKey in headers) {\n if (String(headerKey).toLowerCase() === normalizedKey) {\n return headers[headerKey]\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|