@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,69 @@
|
|
|
1
|
+
import { hasValidResourceEntryDuration, hasValidResourceEntryTimings } from './resourceUtils';
|
|
2
|
+
import { filter, addDuration, WeakSet } from '@cloudcare/browser-core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Look for corresponding timing in resource timing buffer
|
|
6
|
+
*
|
|
7
|
+
* Observations:
|
|
8
|
+
* - Timing (start, end) are nested inside the request (start, end)
|
|
9
|
+
* - Browsers generate a timing entry for OPTIONS request
|
|
10
|
+
*
|
|
11
|
+
* Strategy:
|
|
12
|
+
* - from valid nested entries
|
|
13
|
+
* - if a single timing match, return the timing
|
|
14
|
+
* - if two following timings match (OPTIONS request), return the timing for the actual request
|
|
15
|
+
* - otherwise we can't decide, return undefined
|
|
16
|
+
*/
|
|
17
|
+
export function createRequestResourceEntryMatcher() {
|
|
18
|
+
var alreadyMatchedEntries = new WeakSet();
|
|
19
|
+
return {
|
|
20
|
+
matchRequestResourceEntry: function matchRequestResourceEntry(request) {
|
|
21
|
+
if (!performance || !('getEntriesByName' in performance)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
var sameNameEntries = performance.getEntriesByName(request.url, 'resource');
|
|
25
|
+
if (!sameNameEntries.length || !('toJSON' in sameNameEntries[0])) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
var candidates = filter(sameNameEntries, function (entry) {
|
|
29
|
+
return !alreadyMatchedEntries.has(entry);
|
|
30
|
+
});
|
|
31
|
+
candidates = filter(candidates, function (entry) {
|
|
32
|
+
return hasValidResourceEntryDuration(entry) && hasValidResourceEntryTimings(entry);
|
|
33
|
+
});
|
|
34
|
+
candidates = filter(candidates, function (entry) {
|
|
35
|
+
return isBetween(entry, request.startClocks.relative, endTime({
|
|
36
|
+
startTime: request.startClocks.relative,
|
|
37
|
+
duration: request.duration
|
|
38
|
+
}));
|
|
39
|
+
});
|
|
40
|
+
var lastEntry = undefined;
|
|
41
|
+
if (candidates.length > 1) {
|
|
42
|
+
var startTimeDuration = Number.MAX_SAFE_INTEGER;
|
|
43
|
+
candidates.forEach(function (entry) {
|
|
44
|
+
var _startTimeDuration = Math.abs(entry.startTime - request.startClocks.relative);
|
|
45
|
+
if (_startTimeDuration < startTimeDuration) {
|
|
46
|
+
startTimeDuration = _startTimeDuration;
|
|
47
|
+
lastEntry = entry;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
} else if (candidates.length === 1) {
|
|
51
|
+
lastEntry = candidates[0];
|
|
52
|
+
}
|
|
53
|
+
if (lastEntry) {
|
|
54
|
+
alreadyMatchedEntries.add(lastEntry);
|
|
55
|
+
return lastEntry.toJSON();
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function endTime(timing) {
|
|
62
|
+
return addDuration(timing.startTime, timing.duration);
|
|
63
|
+
}
|
|
64
|
+
function isBetween(timing, start, end) {
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
66
|
+
var errorMargin = 1;
|
|
67
|
+
return timing.startTime >= start - errorMargin && endTime(timing) <= addDuration(end, errorMargin);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=matchRequestResourceEntry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchRequestResourceEntry.js","names":["hasValidResourceEntryDuration","hasValidResourceEntryTimings","filter","addDuration","WeakSet","createRequestResourceEntryMatcher","alreadyMatchedEntries","matchRequestResourceEntry","request","performance","sameNameEntries","getEntriesByName","url","length","candidates","entry","has","isBetween","startClocks","relative","endTime","startTime","duration","lastEntry","undefined","startTimeDuration","Number","MAX_SAFE_INTEGER","forEach","_startTimeDuration","Math","abs","add","toJSON","timing","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,SACEA,6BAA6B,EAC7BC,4BAA4B,QACvB,iBAAiB;AACxB,SAASC,MAAM,EAAEC,WAAW,EAAEC,OAAO,QAAQ,yBAAyB;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iCAAiCA,CAAA,EAAG;EAClD,IAAIC,qBAAqB,GAAG,IAAIF,OAAO,CAAC,CAAC;EAEzC,OAAO;IACLG,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,GAAGZ,MAAM,CAACQ,eAAe,EAAE,UAAUK,KAAK,EAAE;QACxD,OAAO,CAACT,qBAAqB,CAACU,GAAG,CAACD,KAAK,CAAC;MAC1C,CAAC,CAAC;MACFD,UAAU,GAAGZ,MAAM,CAACY,UAAU,EAAE,UAAUC,KAAK,EAAE;QAC/C,OACEf,6BAA6B,CAACe,KAAK,CAAC,IACpCd,4BAA4B,CAACc,KAAK,CAAC;MAEvC,CAAC,CAAC;MACFD,UAAU,GAAGZ,MAAM,CAACY,UAAU,EAAE,UAAUC,KAAK,EAAE;QAC/C,OAAOE,SAAS,CACdF,KAAK,EACLP,OAAO,CAACU,WAAW,CAACC,QAAQ,EAC5BC,OAAO,CAAC;UACNC,SAAS,EAAEb,OAAO,CAACU,WAAW,CAACC,QAAQ;UACvCG,QAAQ,EAAEd,OAAO,CAACc;QACpB,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MACF,IAAIC,SAAS,GAAGC,SAAS;MACzB,IAAIV,UAAU,CAACD,MAAM,GAAG,CAAC,EAAE;QACzB,IAAIY,iBAAiB,GAAGC,MAAM,CAACC,gBAAgB;QAC/Cb,UAAU,CAACc,OAAO,CAAC,UAACb,KAAK,EAAK;UAC5B,IAAMc,kBAAkB,GAAGC,IAAI,CAACC,GAAG,CACjChB,KAAK,CAACM,SAAS,GAAGb,OAAO,CAACU,WAAW,CAACC,QACxC,CAAC;UACD,IAAIU,kBAAkB,GAAGJ,iBAAiB,EAAE;YAC1CA,iBAAiB,GAAGI,kBAAkB;YACtCN,SAAS,GAAGR,KAAK;UACnB;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAID,UAAU,CAACD,MAAM,KAAK,CAAC,EAAE;QAClCU,SAAS,GAAGT,UAAU,CAAC,CAAC,CAAC;MAC3B;MAEA,IAAIS,SAAS,EAAE;QACbjB,qBAAqB,CAAC0B,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/B,WAAW,CAAC+B,MAAM,CAACb,SAAS,EAAEa,MAAM,CAACZ,QAAQ,CAAC;AACvD;AAEA,SAASL,SAASA,CAACiB,MAAM,EAAEC,KAAK,EAAEC,GAAG,EAAE;EACrC;EACA,IAAIC,WAAW,GAAG,CAAC;EACnB,OACEH,MAAM,CAACb,SAAS,IAAIc,KAAK,GAAGE,WAAW,IACvCjB,OAAO,CAACc,MAAM,CAAC,IAAI/B,WAAW,CAACiC,GAAG,EAAEC,WAAW,CAAC;AAEpD","ignoreList":[]}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { getStatusGroup, UUID, extend, extend2Lev, relativeToClocks, urlParse, getQueryParamsFromUrl, replaceNumberCharByPath, RequestType, ResourceType, RumEventType, LifeCycleEventType, toServerDuration, createTaskQueue, addTelemetryError } from '@cloudcare/browser-core';
|
|
2
|
+
import { createRequestResourceEntryMatcher } from './matchRequestResourceEntry';
|
|
3
|
+
import { computePerformanceResourceDetails, computeResourceEntryDuration, computeResourceEntryType, computeResourceEntrySize, isResourceEntryRequestType, isResourceUrlLimit, isLongDataUrl, sanitizeDataUrl, computeResourceEntryDeliveryType, computeResourceEntryProtocol } from './resourceUtils';
|
|
4
|
+
import { PageState } from '../../contexts/pageStateHistory';
|
|
5
|
+
import { createPerformanceObservable, RumPerformanceEntryType } from '../../performanceObservable';
|
|
6
|
+
import { retrieveInitialDocumentResourceTiming } from './retrieveInitialDocumentResourceTiming';
|
|
7
|
+
export function startResourceCollection(lifeCycle, configuration, pageStateHistory, taskQueue, retrieveInitialDocumentResourceTimingImpl, resourceTrackerManager) {
|
|
8
|
+
if (taskQueue === undefined) {
|
|
9
|
+
taskQueue = createTaskQueue();
|
|
10
|
+
}
|
|
11
|
+
if (typeof retrieveInitialDocumentResourceTimingImpl === 'undefined') {
|
|
12
|
+
retrieveInitialDocumentResourceTimingImpl = retrieveInitialDocumentResourceTiming;
|
|
13
|
+
}
|
|
14
|
+
if (resourceTrackerManager) {
|
|
15
|
+
resourceTrackerManager.setFlushTrackedResource(function (rawEvent) {
|
|
16
|
+
lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
var requestResourceEntryMatcher = createRequestResourceEntryMatcher();
|
|
20
|
+
lifeCycle.subscribe(LifeCycleEventType.REQUEST_COMPLETED, function (request) {
|
|
21
|
+
handleResource(function () {
|
|
22
|
+
return processRequest(request, pageStateHistory, requestResourceEntryMatcher);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
var performanceResourceSubscription = createPerformanceObservable(configuration, {
|
|
26
|
+
type: RumPerformanceEntryType.RESOURCE,
|
|
27
|
+
buffered: true
|
|
28
|
+
}).subscribe(function (entries) {
|
|
29
|
+
var loop = function loop(entry) {
|
|
30
|
+
if (!isResourceEntryRequestType(entry) && !isResourceUrlLimit(entry.name, configuration.resourceUrlLimit)) {
|
|
31
|
+
handleResource(function () {
|
|
32
|
+
return processResourceEntry(entry, configuration);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
|
|
37
|
+
var entry = entries_1[_i];
|
|
38
|
+
loop(entry);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
retrieveInitialDocumentResourceTimingImpl(configuration, function (timing) {
|
|
42
|
+
handleResource(function () {
|
|
43
|
+
return processResourceEntry(timing, configuration);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
function handleResource(computeRawEvent) {
|
|
47
|
+
taskQueue.push(function () {
|
|
48
|
+
try {
|
|
49
|
+
var rawEvent = computeRawEvent();
|
|
50
|
+
if (rawEvent) {
|
|
51
|
+
if (resourceTrackerManager && rawEvent.domainContext && rawEvent.domainContext.resourceTrackerId && resourceTrackerManager.trackRequestResource(rawEvent.domainContext.resourceTrackerId, rawEvent)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, rawEvent);
|
|
55
|
+
}
|
|
56
|
+
} catch (error) {
|
|
57
|
+
addTelemetryError(error);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
stop: function stop() {
|
|
63
|
+
performanceResourceSubscription.unsubscribe();
|
|
64
|
+
},
|
|
65
|
+
addResource: function addResource(resource, savedCommonContext) {
|
|
66
|
+
handleResource(function () {
|
|
67
|
+
return extend({
|
|
68
|
+
savedCommonContext: savedCommonContext
|
|
69
|
+
}, processCustomResource(resource));
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function processRequest(request, pageStateHistory, requestResourceEntryMatcher) {
|
|
75
|
+
var matchingTiming = requestResourceEntryMatcher.matchRequestResourceEntry(request);
|
|
76
|
+
var startClocks = matchingTiming ? relativeToClocks(matchingTiming.startTime) : request.startClocks;
|
|
77
|
+
var tracingInfo = computeRequestTracingInfo(request);
|
|
78
|
+
var type = request.type === RequestType.XHR ? ResourceType.XHR : ResourceType.FETCH;
|
|
79
|
+
var correspondingTimingOverrides = matchingTiming ? computeResourceEntryMetrics(matchingTiming) : undefined;
|
|
80
|
+
var duration = computeRequestDuration(pageStateHistory, startClocks, request.duration);
|
|
81
|
+
var urlObj = urlParse(request.url).getParse();
|
|
82
|
+
var resourceEvent = extend2Lev({
|
|
83
|
+
date: startClocks.timeStamp,
|
|
84
|
+
resource: {
|
|
85
|
+
id: UUID(),
|
|
86
|
+
type: type,
|
|
87
|
+
duration: duration,
|
|
88
|
+
method: request.method,
|
|
89
|
+
status: request.status,
|
|
90
|
+
statusGroup: getStatusGroup(request.status),
|
|
91
|
+
url: isLongDataUrl(request.url) ? sanitizeDataUrl(request.url) : request.url,
|
|
92
|
+
urlHost: urlObj.Host,
|
|
93
|
+
urlPath: urlObj.Path,
|
|
94
|
+
urlPathGroup: replaceNumberCharByPath(urlObj.Path),
|
|
95
|
+
urlQuery: getQueryParamsFromUrl(request.url),
|
|
96
|
+
deliveryType: matchingTiming && computeResourceEntryDeliveryType(matchingTiming),
|
|
97
|
+
protocol: matchingTiming && computeResourceEntryProtocol(matchingTiming)
|
|
98
|
+
},
|
|
99
|
+
type: RumEventType.RESOURCE
|
|
100
|
+
}, tracingInfo, correspondingTimingOverrides);
|
|
101
|
+
return {
|
|
102
|
+
startTime: startClocks.relative,
|
|
103
|
+
rawRumEvent: resourceEvent,
|
|
104
|
+
domainContext: {
|
|
105
|
+
performanceEntry: matchingTiming,
|
|
106
|
+
xhr: request.xhr,
|
|
107
|
+
requestHeaderContexts: request.requestHeaderContexts,
|
|
108
|
+
response: request.response,
|
|
109
|
+
requestInput: request.input,
|
|
110
|
+
requestInit: request.init,
|
|
111
|
+
error: request.error,
|
|
112
|
+
isAborted: request.isAborted,
|
|
113
|
+
handlingStack: request.handlingStack,
|
|
114
|
+
resourceTrackerId: getResourceTrackerIdFromRequest(request)
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function processResourceEntry(entry, configuration) {
|
|
119
|
+
var startClocks = relativeToClocks(entry.startTime);
|
|
120
|
+
var tracingInfo = computeResourceEntryTracingInfo(entry);
|
|
121
|
+
var type = computeResourceEntryType(entry);
|
|
122
|
+
var entryMetrics = computeResourceEntryMetrics(entry);
|
|
123
|
+
var urlObj = urlParse(entry.name).getParse();
|
|
124
|
+
var resourceEvent = extend2Lev({
|
|
125
|
+
date: startClocks.timeStamp,
|
|
126
|
+
resource: {
|
|
127
|
+
id: UUID(),
|
|
128
|
+
type: type,
|
|
129
|
+
url: entry.name,
|
|
130
|
+
urlHost: urlObj.Host,
|
|
131
|
+
urlPath: urlObj.Path,
|
|
132
|
+
urlPathGroup: replaceNumberCharByPath(urlObj.Path),
|
|
133
|
+
urlQuery: getQueryParamsFromUrl(entry.name),
|
|
134
|
+
method: 'GET',
|
|
135
|
+
status: discardZeroStatus(entry.responseStatus),
|
|
136
|
+
statusGroup: getStatusGroup(entry.responseStatus),
|
|
137
|
+
deliveryType: computeResourceEntryDeliveryType(entry),
|
|
138
|
+
protocol: computeResourceEntryProtocol(entry)
|
|
139
|
+
},
|
|
140
|
+
type: RumEventType.RESOURCE
|
|
141
|
+
}, tracingInfo, entryMetrics);
|
|
142
|
+
return {
|
|
143
|
+
startTime: startClocks.relative,
|
|
144
|
+
rawRumEvent: resourceEvent,
|
|
145
|
+
domainContext: {
|
|
146
|
+
performanceEntry: entry
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function processCustomResource(resource) {
|
|
151
|
+
var resourceEvent = {
|
|
152
|
+
date: resource.startClocks.timeStamp,
|
|
153
|
+
resource: {
|
|
154
|
+
id: UUID(),
|
|
155
|
+
type: resource.type
|
|
156
|
+
},
|
|
157
|
+
type: RumEventType.RESOURCE
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
customerContext: resource.context,
|
|
161
|
+
startTime: resource.startClocks.relative,
|
|
162
|
+
rawRumEvent: resourceEvent,
|
|
163
|
+
domainContext: {
|
|
164
|
+
resource: resource
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function computeResourceEntryMetrics(entry) {
|
|
169
|
+
return {
|
|
170
|
+
resource: extend2Lev({}, {
|
|
171
|
+
duration: computeResourceEntryDuration(entry)
|
|
172
|
+
}, computeResourceEntrySize(entry), computePerformanceResourceDetails(entry))
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function computeRequestTracingInfo(request) {
|
|
176
|
+
var hasBeenTraced = request.traceSampled && request.traceId && request.spanId;
|
|
177
|
+
if (!hasBeenTraced) {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
_gc: {
|
|
182
|
+
spanId: request.spanId,
|
|
183
|
+
traceId: request.traceId
|
|
184
|
+
},
|
|
185
|
+
resource: {
|
|
186
|
+
id: UUID()
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function computeRequestDuration(pageStateHistory, startClocks, duration) {
|
|
191
|
+
return !pageStateHistory.wasInPageStateDuringPeriod(PageState.FROZEN, startClocks.relative, duration) ? toServerDuration(duration) : undefined;
|
|
192
|
+
}
|
|
193
|
+
function computeResourceEntryTracingInfo(entry) {
|
|
194
|
+
return entry.traceId ? {
|
|
195
|
+
_gc: {
|
|
196
|
+
traceId: entry.traceId
|
|
197
|
+
}
|
|
198
|
+
} : undefined;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* The status is 0 for cross-origin resources without CORS headers, so the status is meaningless, and we shouldn't report it
|
|
202
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus#cross-origin_response_status_codes
|
|
203
|
+
*/
|
|
204
|
+
function discardZeroStatus(statusCode) {
|
|
205
|
+
return statusCode === 0 ? undefined : statusCode;
|
|
206
|
+
}
|
|
207
|
+
function getResourceTrackerIdFromRequest(request) {
|
|
208
|
+
return getHeaderValue(request.requestHeaderContexts, 'x-rum-resource-id');
|
|
209
|
+
}
|
|
210
|
+
function getHeaderValue(headers, key) {
|
|
211
|
+
if (!headers || !key) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
var normalizedKey = String(key).toLowerCase();
|
|
215
|
+
if (typeof headers.get === 'function') {
|
|
216
|
+
return headers.get(key) || headers.get(normalizedKey) || undefined;
|
|
217
|
+
}
|
|
218
|
+
if (Array.isArray(headers)) {
|
|
219
|
+
for (var i = 0; i < headers.length; i += 1) {
|
|
220
|
+
var headerEntry = headers[i];
|
|
221
|
+
if (Array.isArray(headerEntry) && String(headerEntry[0]).toLowerCase() === normalizedKey) {
|
|
222
|
+
return headerEntry[1];
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
for (var headerKey in headers) {
|
|
228
|
+
if (String(headerKey).toLowerCase() === normalizedKey) {
|
|
229
|
+
return headers[headerKey];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=resourceCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceCollection.js","names":["getStatusGroup","UUID","extend","extend2Lev","relativeToClocks","urlParse","getQueryParamsFromUrl","replaceNumberCharByPath","RequestType","ResourceType","RumEventType","LifeCycleEventType","toServerDuration","createTaskQueue","addTelemetryError","createRequestResourceEntryMatcher","computePerformanceResourceDetails","computeResourceEntryDuration","computeResourceEntryType","computeResourceEntrySize","isResourceEntryRequestType","isResourceUrlLimit","isLongDataUrl","sanitizeDataUrl","computeResourceEntryDeliveryType","computeResourceEntryProtocol","PageState","createPerformanceObservable","RumPerformanceEntryType","retrieveInitialDocumentResourceTiming","startResourceCollection","lifeCycle","configuration","pageStateHistory","taskQueue","retrieveInitialDocumentResourceTimingImpl","resourceTrackerManager","undefined","setFlushTrackedResource","rawEvent","notify","RAW_RUM_EVENT_COLLECTED","requestResourceEntryMatcher","subscribe","REQUEST_COMPLETED","request","handleResource","processRequest","performanceResourceSubscription","type","RESOURCE","buffered","entries","loop","entry","name","resourceUrlLimit","processResourceEntry","_i","entries_1","length","timing","computeRawEvent","push","domainContext","resourceTrackerId","trackRequestResource","error","stop","unsubscribe","addResource","resource","savedCommonContext","processCustomResource","matchingTiming","matchRequestResourceEntry","startClocks","startTime","tracingInfo","computeRequestTracingInfo","XHR","FETCH","correspondingTimingOverrides","computeResourceEntryMetrics","duration","computeRequestDuration","urlObj","url","getParse","resourceEvent","date","timeStamp","id","method","status","statusGroup","urlHost","Host","urlPath","Path","urlPathGroup","urlQuery","deliveryType","protocol","relative","rawRumEvent","performanceEntry","xhr","requestHeaderContexts","response","requestInput","input","requestInit","init","isAborted","handlingStack","getResourceTrackerIdFromRequest","computeResourceEntryTracingInfo","entryMetrics","discardZeroStatus","responseStatus","customerContext","context","hasBeenTraced","traceSampled","traceId","spanId","_gc","wasInPageStateDuringPeriod","FROZEN","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,231 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
import { UUID, assign, deepClone, addTelemetryError } from '@cloudcare/browser-core';
|
|
3
|
+
var RESOURCE_TRACKER_HEADER = 'x-rum-resource-id';
|
|
4
|
+
var RESOURCE_TRACKER_TIMEOUT_MS = 30 * 1000;
|
|
5
|
+
var RESOURCE_TRACKER_RETENTION_MS = 60 * 1000;
|
|
6
|
+
var RESOURCE_TRACKER_ORPHAN_TTL_MS = 5 * 60 * 1000;
|
|
7
|
+
var DEBUG_CLONE_MAX_DEPTH = 8;
|
|
8
|
+
export function createResourceTrackerManager() {
|
|
9
|
+
var trackers = new Map();
|
|
10
|
+
var flushTrackedResource;
|
|
11
|
+
return {
|
|
12
|
+
createTrackerId: function createTrackerId() {
|
|
13
|
+
var trackerId = UUID();
|
|
14
|
+
getOrCreateTracker(trackerId);
|
|
15
|
+
return trackerId;
|
|
16
|
+
},
|
|
17
|
+
setResourceContext: function setResourceContext(trackerId, context) {
|
|
18
|
+
var tracker = trackers.get(trackerId);
|
|
19
|
+
if (!tracker) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (isTrackerImmutable(tracker)) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
tracker.context = assign({}, context || {});
|
|
26
|
+
},
|
|
27
|
+
appendResourceContext: function appendResourceContext(trackerId, context) {
|
|
28
|
+
var tracker = trackers.get(trackerId);
|
|
29
|
+
if (!tracker) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (isTrackerImmutable(tracker)) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
tracker.context = assign(tracker.context, context || {});
|
|
36
|
+
},
|
|
37
|
+
finishResource: function finishResource(trackerId) {
|
|
38
|
+
var tracker = trackers.get(trackerId);
|
|
39
|
+
if (!tracker) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
tracker.finished = true;
|
|
43
|
+
if (tracker.status === 'request_collected') {
|
|
44
|
+
flushTracker(tracker, 'flushed');
|
|
45
|
+
} else if (tracker.status === 'created') {
|
|
46
|
+
tracker.status = 'finished';
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
getResource: function getResource(trackerId) {
|
|
50
|
+
var tracker = trackers.get(trackerId);
|
|
51
|
+
if (!tracker) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return cloneTrackerSnapshot(tracker);
|
|
55
|
+
},
|
|
56
|
+
trackRequestResource: function trackRequestResource(trackerId, rawEvent) {
|
|
57
|
+
var tracker = trackers.get(trackerId);
|
|
58
|
+
if (!tracker) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
if (tracker.requestHeaderMatched || tracker.flushed) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
clearTrackerTimeout(tracker);
|
|
65
|
+
tracker.requestHeaderMatched = true;
|
|
66
|
+
tracker.rawResourceEvent = rawEvent.rawRumEvent;
|
|
67
|
+
tracker.startTime = rawEvent.startTime;
|
|
68
|
+
tracker.domainContext = rawEvent.domainContext;
|
|
69
|
+
tracker.resource = extractResourceSummary(rawEvent.rawRumEvent);
|
|
70
|
+
tracker.status = 'request_collected';
|
|
71
|
+
if (tracker.finished) {
|
|
72
|
+
flushTracker(tracker, 'flushed');
|
|
73
|
+
} else {
|
|
74
|
+
tracker.timeoutId = setTimeout(function () {
|
|
75
|
+
tracker.timeoutId = undefined;
|
|
76
|
+
if (tracker.status === 'request_collected') {
|
|
77
|
+
flushTracker(tracker, 'timeout_flushed');
|
|
78
|
+
}
|
|
79
|
+
}, RESOURCE_TRACKER_TIMEOUT_MS);
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
},
|
|
83
|
+
setFlushTrackedResource: function setFlushTrackedResource(handler) {
|
|
84
|
+
flushTrackedResource = handler;
|
|
85
|
+
},
|
|
86
|
+
getTrackerIdFromRequestHeaders: function getTrackerIdFromRequestHeaders(requestHeaders) {
|
|
87
|
+
return getHeaderValue(requestHeaders, RESOURCE_TRACKER_HEADER);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
function getOrCreateTracker(trackerId) {
|
|
91
|
+
var tracker = trackers.get(trackerId);
|
|
92
|
+
if (!tracker) {
|
|
93
|
+
tracker = {
|
|
94
|
+
id: trackerId,
|
|
95
|
+
status: 'created',
|
|
96
|
+
context: {},
|
|
97
|
+
finished: false,
|
|
98
|
+
flushed: false,
|
|
99
|
+
requestHeaderMatched: false
|
|
100
|
+
};
|
|
101
|
+
trackers.set(trackerId, tracker);
|
|
102
|
+
tracker.orphanTimeoutId = setTimeout(function () {
|
|
103
|
+
tracker.status = 'cleared';
|
|
104
|
+
trackers["delete"](tracker.id);
|
|
105
|
+
}, RESOURCE_TRACKER_ORPHAN_TTL_MS);
|
|
106
|
+
}
|
|
107
|
+
return tracker;
|
|
108
|
+
}
|
|
109
|
+
function flushTracker(tracker, status) {
|
|
110
|
+
if (tracker.flushed || !tracker.rawResourceEvent) {
|
|
111
|
+
tracker.status = status;
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
clearTrackerTimeout(tracker);
|
|
115
|
+
tracker.flushed = true;
|
|
116
|
+
tracker.status = status;
|
|
117
|
+
if (!flushTrackedResource) {
|
|
118
|
+
scheduleTrackerClear(tracker);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
flushTrackedResource({
|
|
123
|
+
startTime: tracker.startTime,
|
|
124
|
+
rawRumEvent: tracker.rawResourceEvent,
|
|
125
|
+
customerContext: assign({}, tracker.context),
|
|
126
|
+
domainContext: tracker.domainContext
|
|
127
|
+
});
|
|
128
|
+
} catch (error) {
|
|
129
|
+
addTelemetryError(error);
|
|
130
|
+
} finally {
|
|
131
|
+
scheduleTrackerClear(tracker);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function scheduleTrackerClear(tracker) {
|
|
135
|
+
clearTrackerTimeout(tracker);
|
|
136
|
+
tracker.clearTimeoutId = setTimeout(function () {
|
|
137
|
+
tracker.status = 'cleared';
|
|
138
|
+
trackers["delete"](tracker.id);
|
|
139
|
+
}, RESOURCE_TRACKER_RETENTION_MS);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function clearTrackerTimeout(tracker) {
|
|
143
|
+
if (tracker.timeoutId) {
|
|
144
|
+
clearTimeout(tracker.timeoutId);
|
|
145
|
+
tracker.timeoutId = undefined;
|
|
146
|
+
}
|
|
147
|
+
if (tracker.orphanTimeoutId) {
|
|
148
|
+
clearTimeout(tracker.orphanTimeoutId);
|
|
149
|
+
tracker.orphanTimeoutId = undefined;
|
|
150
|
+
}
|
|
151
|
+
if (tracker.clearTimeoutId) {
|
|
152
|
+
clearTimeout(tracker.clearTimeoutId);
|
|
153
|
+
tracker.clearTimeoutId = undefined;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function isTrackerImmutable(tracker) {
|
|
157
|
+
return tracker.status === 'flushed' || tracker.status === 'timeout_flushed' || tracker.status === 'cleared';
|
|
158
|
+
}
|
|
159
|
+
function extractResourceSummary(rawRumEvent) {
|
|
160
|
+
var resource = rawRumEvent && rawRumEvent.resource;
|
|
161
|
+
if (!resource) {
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
type: resource.type,
|
|
166
|
+
url: resource.url,
|
|
167
|
+
method: resource.method,
|
|
168
|
+
status: resource.status
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function cloneTrackerSnapshot(tracker) {
|
|
172
|
+
return {
|
|
173
|
+
trackerId: tracker.id,
|
|
174
|
+
status: tracker.status,
|
|
175
|
+
context: deepClone(tracker.context),
|
|
176
|
+
resource: tracker.resource ? assign({}, tracker.resource) : undefined,
|
|
177
|
+
rawRumEvent: tracker.rawResourceEvent ? cloneDebugRawRumEvent(tracker.rawResourceEvent) : undefined
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function cloneDebugRawRumEvent(rawRumEvent) {
|
|
181
|
+
var clonedEvent = {};
|
|
182
|
+
for (var key in rawRumEvent) {
|
|
183
|
+
if (Object.prototype.hasOwnProperty.call(rawRumEvent, key)) {
|
|
184
|
+
clonedEvent[key] = cloneDebugObject(rawRumEvent[key], DEBUG_CLONE_MAX_DEPTH);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return clonedEvent;
|
|
188
|
+
}
|
|
189
|
+
function cloneDebugObject(value, depth) {
|
|
190
|
+
if (!value || _typeof(value) !== 'object' || depth < 0) {
|
|
191
|
+
return value;
|
|
192
|
+
}
|
|
193
|
+
if (Array.isArray(value)) {
|
|
194
|
+
var clonedArray = [];
|
|
195
|
+
for (var i = 0; i < value.length; i += 1) {
|
|
196
|
+
clonedArray.push(cloneDebugObject(value[i], depth - 1));
|
|
197
|
+
}
|
|
198
|
+
return clonedArray;
|
|
199
|
+
}
|
|
200
|
+
var clonedObject = {};
|
|
201
|
+
for (var key in value) {
|
|
202
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
203
|
+
clonedObject[key] = cloneDebugObject(value[key], depth - 1);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return clonedObject;
|
|
207
|
+
}
|
|
208
|
+
function getHeaderValue(headers, key) {
|
|
209
|
+
if (!headers || !key) {
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
212
|
+
var normalizedKey = String(key).toLowerCase();
|
|
213
|
+
if (typeof headers.get === 'function') {
|
|
214
|
+
return headers.get(key) || headers.get(normalizedKey) || undefined;
|
|
215
|
+
}
|
|
216
|
+
if (Array.isArray(headers)) {
|
|
217
|
+
for (var i = 0; i < headers.length; i += 1) {
|
|
218
|
+
var entry = headers[i];
|
|
219
|
+
if (Array.isArray(entry) && String(entry[0]).toLowerCase() === normalizedKey) {
|
|
220
|
+
return entry[1];
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
for (var headerKey in headers) {
|
|
226
|
+
if (String(headerKey).toLowerCase() === normalizedKey) {
|
|
227
|
+
return headers[headerKey];
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=resourceTrackerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceTrackerManager.js","names":["UUID","assign","deepClone","addTelemetryError","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","getOrCreateTracker","setResourceContext","context","tracker","get","isTrackerImmutable","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","clearTimeoutId","clearTimeout","type","url","method","cloneDebugRawRumEvent","clonedEvent","key","Object","prototype","hasOwnProperty","call","cloneDebugObject","value","depth","_typeof","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":[]}
|