@datadog/browser-rum-core
Advanced tools
Comparing version 4.17.2 to 4.18.1
@@ -54,3 +54,3 @@ "use strict"; | ||
(0, longTaskCollection_1.startLongTaskCollection)(lifeCycle, session); | ||
(0, resourceCollection_1.startResourceCollection)(lifeCycle); | ||
(0, resourceCollection_1.startResourceCollection)(lifeCycle, configuration); | ||
var _b = (0, viewCollection_1.startViewCollection)(lifeCycle, configuration, location, domMutationObservable, locationChangeObservable, foregroundContexts, recorderApi, initialViewOptions), addTiming = _b.addTiming, startView = _b.startView; | ||
@@ -57,0 +57,0 @@ var addError = (0, errorCollection_1.startErrorCollection)(lifeCycle, foregroundContexts).addError; |
@@ -51,3 +51,3 @@ "use strict"; | ||
}, | ||
browser_sdk_version: (0, browser_core_1.canUseEventBridge)() ? "4.17.2" : undefined, | ||
browser_sdk_version: (0, browser_core_1.canUseEventBridge)() ? "4.18.1" : undefined, | ||
}, | ||
@@ -54,0 +54,0 @@ application: { |
@@ -26,3 +26,3 @@ import type { Configuration, InitConfiguration } from '@datadog/browser-core'; | ||
allowedTracingOrigins: Array<string | RegExp>; | ||
tracingSampleRate: number; | ||
tracingSampleRate: number | undefined; | ||
excludedActivityUrls: Array<string | RegExp>; | ||
@@ -29,0 +29,0 @@ applicationId: string; |
@@ -6,3 +6,3 @@ "use strict"; | ||
function validateAndBuildRumConfiguration(initConfiguration) { | ||
var _a, _b, _c, _d; | ||
var _a, _b, _c; | ||
if (!initConfiguration.applicationId) { | ||
@@ -47,4 +47,4 @@ browser_core_1.display.error('Application ID is not configured, no RUM data will be collected.'); | ||
allowedTracingOrigins: (_b = initConfiguration.allowedTracingOrigins) !== null && _b !== void 0 ? _b : [], | ||
tracingSampleRate: (_c = initConfiguration.tracingSampleRate) !== null && _c !== void 0 ? _c : 100, | ||
excludedActivityUrls: (_d = initConfiguration.excludedActivityUrls) !== null && _d !== void 0 ? _d : [], | ||
tracingSampleRate: initConfiguration.tracingSampleRate, | ||
excludedActivityUrls: (_c = initConfiguration.excludedActivityUrls) !== null && _c !== void 0 ? _c : [], | ||
trackInteractions: !!initConfiguration.trackInteractions || trackFrustrations, | ||
@@ -51,0 +51,0 @@ trackFrustrations: trackFrustrations, |
@@ -0,2 +1,3 @@ | ||
import type { RumConfiguration } from '../../configuration'; | ||
import type { LifeCycle } from '../../lifeCycle'; | ||
export declare function startResourceCollection(lifeCycle: LifeCycle): void; | ||
export declare function startResourceCollection(lifeCycle: LifeCycle, configuration: RumConfiguration): void; |
@@ -8,5 +8,5 @@ "use strict"; | ||
var resourceUtils_1 = require("./resourceUtils"); | ||
function startResourceCollection(lifeCycle) { | ||
function startResourceCollection(lifeCycle, configuration) { | ||
lifeCycle.subscribe(6 /* REQUEST_COMPLETED */, function (request) { | ||
lifeCycle.notify(10 /* RAW_RUM_EVENT_COLLECTED */, processRequest(request)); | ||
lifeCycle.notify(10 /* RAW_RUM_EVENT_COLLECTED */, processRequest(request, configuration)); | ||
}); | ||
@@ -17,3 +17,3 @@ lifeCycle.subscribe(0 /* PERFORMANCE_ENTRIES_COLLECTED */, function (entries) { | ||
if (entry.entryType === 'resource' && !(0, resourceUtils_1.isRequestKind)(entry)) { | ||
lifeCycle.notify(10 /* RAW_RUM_EVENT_COLLECTED */, processResourceEntry(entry)); | ||
lifeCycle.notify(10 /* RAW_RUM_EVENT_COLLECTED */, processResourceEntry(entry, configuration)); | ||
} | ||
@@ -24,3 +24,3 @@ } | ||
exports.startResourceCollection = startResourceCollection; | ||
function processRequest(request) { | ||
function processRequest(request, configuration) { | ||
var type = request.type === "xhr" /* XHR */ ? "xhr" /* XHR */ : "fetch" /* FETCH */; | ||
@@ -30,3 +30,3 @@ var matchingTiming = (0, matchRequestTiming_1.matchRequestTiming)(request); | ||
var correspondingTimingOverrides = matchingTiming ? computePerformanceEntryMetrics(matchingTiming) : undefined; | ||
var tracingInfo = computeRequestTracingInfo(request); | ||
var tracingInfo = computeRequestTracingInfo(request, configuration); | ||
var resourceEvent = (0, browser_core_1.combine)({ | ||
@@ -57,6 +57,6 @@ date: startClocks.timeStamp, | ||
} | ||
function processResourceEntry(entry) { | ||
function processResourceEntry(entry, configuration) { | ||
var type = (0, resourceUtils_1.computeResourceKind)(entry); | ||
var entryMetrics = computePerformanceEntryMetrics(entry); | ||
var tracingInfo = computeEntryTracingInfo(entry); | ||
var tracingInfo = computeEntryTracingInfo(entry, configuration); | ||
var startClocks = (0, browser_core_1.relativeToClocks)(entry.startTime); | ||
@@ -88,3 +88,3 @@ var resourceEvent = (0, browser_core_1.combine)({ | ||
} | ||
function computeRequestTracingInfo(request) { | ||
function computeRequestTracingInfo(request, configuration) { | ||
var hasBeenTraced = request.traceSampled && request.traceId && request.spanId; | ||
@@ -98,7 +98,17 @@ if (!hasBeenTraced) { | ||
trace_id: request.traceId.toDecimalString(), | ||
rule_psr: getRulePsr(configuration), | ||
}, | ||
}; | ||
} | ||
function computeEntryTracingInfo(entry) { | ||
return entry.traceId ? { _dd: { trace_id: entry.traceId } } : undefined; | ||
function computeEntryTracingInfo(entry, configuration) { | ||
var hasBeenTraced = entry.traceId; | ||
if (!hasBeenTraced) { | ||
return undefined; | ||
} | ||
return { | ||
_dd: { | ||
trace_id: entry.traceId, | ||
rule_psr: getRulePsr(configuration), | ||
}, | ||
}; | ||
} | ||
@@ -111,2 +121,8 @@ function toPerformanceEntryRepresentation(entry) { | ||
} | ||
/** | ||
* @returns number between 0 and 1 which represents tracing sample rate | ||
*/ | ||
function getRulePsr(configuration) { | ||
return (0, browser_core_1.isNumber)(configuration.tracingSampleRate) ? configuration.tracingSampleRate / 100 : undefined; | ||
} | ||
//# sourceMappingURL=resourceCollection.js.map |
@@ -81,3 +81,3 @@ "use strict"; | ||
context.spanId = new TraceIdentifier(); | ||
context.traceSampled = (0, browser_core_1.performDraw)(configuration.tracingSampleRate); | ||
context.traceSampled = !(0, browser_core_1.isNumber)(configuration.tracingSampleRate) || (0, browser_core_1.performDraw)(configuration.tracingSampleRate); | ||
inject(makeTracingHeaders(context.traceId, context.spanId, context.traceSampled)); | ||
@@ -84,0 +84,0 @@ } |
@@ -31,2 +31,3 @@ import type { Context, Duration, ErrorSource, ErrorHandling, ResourceType, ServerDuration, TimeStamp } from '@datadog/browser-core'; | ||
span_id?: string; | ||
rule_psr?: number; | ||
}; | ||
@@ -33,0 +34,0 @@ } |
@@ -49,3 +49,3 @@ /** | ||
*/ | ||
readonly type: ('rage_click' | 'dead_click' | 'error_click')[]; | ||
readonly type: ('rage_click' | 'dead_click' | 'error_click' | 'rage_tap' | 'error_tap')[]; | ||
[k: string]: unknown; | ||
@@ -433,2 +433,6 @@ }; | ||
readonly trace_id?: string; | ||
/** | ||
* tracing sample rate in decimal format | ||
*/ | ||
readonly rule_psr?: number; | ||
[k: string]: unknown; | ||
@@ -681,3 +685,3 @@ }; | ||
*/ | ||
readonly source?: 'android' | 'ios' | 'browser' | 'flutter' | 'react-native'; | ||
readonly source?: 'android' | 'ios' | 'browser' | 'flutter' | 'react-native' | 'roku'; | ||
/** | ||
@@ -684,0 +688,0 @@ * View properties |
@@ -28,3 +28,3 @@ "use strict"; | ||
function createRumBatch(endpointBuilder, unloadCallback) { | ||
return new browser_core_1.Batch(new browser_core_1.HttpRequest(endpointBuilder, configuration.batchBytesLimit), configuration.batchMessagesLimit, configuration.batchBytesLimit, configuration.messageBytesLimit, configuration.flushTimeout, unloadCallback); | ||
return new browser_core_1.Batch((0, browser_core_1.createHttpRequest)(endpointBuilder, configuration.batchBytesLimit), configuration.batchMessagesLimit, configuration.batchBytesLimit, configuration.messageBytesLimit, configuration.flushTimeout, unloadCallback); | ||
} | ||
@@ -31,0 +31,0 @@ function withReplicaApplicationId(message) { |
@@ -51,3 +51,3 @@ import { startTelemetry, canUseEventBridge, getEventBridge } from '@datadog/browser-core'; | ||
startLongTaskCollection(lifeCycle, session); | ||
startResourceCollection(lifeCycle); | ||
startResourceCollection(lifeCycle, configuration); | ||
var _b = startViewCollection(lifeCycle, configuration, location, domMutationObservable, locationChangeObservable, foregroundContexts, recorderApi, initialViewOptions), addTiming = _b.addTiming, startView = _b.startView; | ||
@@ -54,0 +54,0 @@ var addError = startErrorCollection(lifeCycle, foregroundContexts).addError; |
@@ -48,3 +48,3 @@ import { combine, isEmptyObject, limitModification, timeStampNow, currentDrift, display, createEventRateLimiter, canUseEventBridge, } from '@datadog/browser-core'; | ||
}, | ||
browser_sdk_version: canUseEventBridge() ? "4.17.2" : undefined, | ||
browser_sdk_version: canUseEventBridge() ? "4.18.1" : undefined, | ||
}, | ||
@@ -51,0 +51,0 @@ application: { |
@@ -26,3 +26,3 @@ import type { Configuration, InitConfiguration } from '@datadog/browser-core'; | ||
allowedTracingOrigins: Array<string | RegExp>; | ||
tracingSampleRate: number; | ||
tracingSampleRate: number | undefined; | ||
excludedActivityUrls: Array<string | RegExp>; | ||
@@ -29,0 +29,0 @@ applicationId: string; |
import { assign, DefaultPrivacyLevel, display, isPercentage, objectHasValue, validateAndBuildConfiguration, } from '@datadog/browser-core'; | ||
export function validateAndBuildRumConfiguration(initConfiguration) { | ||
var _a, _b, _c, _d; | ||
var _a, _b, _c; | ||
if (!initConfiguration.applicationId) { | ||
@@ -43,4 +43,4 @@ display.error('Application ID is not configured, no RUM data will be collected.'); | ||
allowedTracingOrigins: (_b = initConfiguration.allowedTracingOrigins) !== null && _b !== void 0 ? _b : [], | ||
tracingSampleRate: (_c = initConfiguration.tracingSampleRate) !== null && _c !== void 0 ? _c : 100, | ||
excludedActivityUrls: (_d = initConfiguration.excludedActivityUrls) !== null && _d !== void 0 ? _d : [], | ||
tracingSampleRate: initConfiguration.tracingSampleRate, | ||
excludedActivityUrls: (_c = initConfiguration.excludedActivityUrls) !== null && _c !== void 0 ? _c : [], | ||
trackInteractions: !!initConfiguration.trackInteractions || trackFrustrations, | ||
@@ -47,0 +47,0 @@ trackFrustrations: trackFrustrations, |
@@ -0,2 +1,3 @@ | ||
import type { RumConfiguration } from '../../configuration'; | ||
import type { LifeCycle } from '../../lifeCycle'; | ||
export declare function startResourceCollection(lifeCycle: LifeCycle): void; | ||
export declare function startResourceCollection(lifeCycle: LifeCycle, configuration: RumConfiguration): void; |
@@ -1,8 +0,8 @@ | ||
import { combine, generateUUID, toServerDuration, relativeToClocks, assign, } from '@datadog/browser-core'; | ||
import { combine, generateUUID, toServerDuration, relativeToClocks, assign, isNumber, } from '@datadog/browser-core'; | ||
import { supportPerformanceEntry } from '../../../browser/performanceCollection'; | ||
import { matchRequestTiming } from './matchRequestTiming'; | ||
import { computePerformanceResourceDetails, computePerformanceResourceDuration, computeResourceKind, computeSize, isRequestKind, } from './resourceUtils'; | ||
export function startResourceCollection(lifeCycle) { | ||
export function startResourceCollection(lifeCycle, configuration) { | ||
lifeCycle.subscribe(6 /* REQUEST_COMPLETED */, function (request) { | ||
lifeCycle.notify(10 /* RAW_RUM_EVENT_COLLECTED */, processRequest(request)); | ||
lifeCycle.notify(10 /* RAW_RUM_EVENT_COLLECTED */, processRequest(request, configuration)); | ||
}); | ||
@@ -13,3 +13,3 @@ lifeCycle.subscribe(0 /* PERFORMANCE_ENTRIES_COLLECTED */, function (entries) { | ||
if (entry.entryType === 'resource' && !isRequestKind(entry)) { | ||
lifeCycle.notify(10 /* RAW_RUM_EVENT_COLLECTED */, processResourceEntry(entry)); | ||
lifeCycle.notify(10 /* RAW_RUM_EVENT_COLLECTED */, processResourceEntry(entry, configuration)); | ||
} | ||
@@ -19,3 +19,3 @@ } | ||
} | ||
function processRequest(request) { | ||
function processRequest(request, configuration) { | ||
var type = request.type === "xhr" /* XHR */ ? "xhr" /* XHR */ : "fetch" /* FETCH */; | ||
@@ -25,3 +25,3 @@ var matchingTiming = matchRequestTiming(request); | ||
var correspondingTimingOverrides = matchingTiming ? computePerformanceEntryMetrics(matchingTiming) : undefined; | ||
var tracingInfo = computeRequestTracingInfo(request); | ||
var tracingInfo = computeRequestTracingInfo(request, configuration); | ||
var resourceEvent = combine({ | ||
@@ -52,6 +52,6 @@ date: startClocks.timeStamp, | ||
} | ||
function processResourceEntry(entry) { | ||
function processResourceEntry(entry, configuration) { | ||
var type = computeResourceKind(entry); | ||
var entryMetrics = computePerformanceEntryMetrics(entry); | ||
var tracingInfo = computeEntryTracingInfo(entry); | ||
var tracingInfo = computeEntryTracingInfo(entry, configuration); | ||
var startClocks = relativeToClocks(entry.startTime); | ||
@@ -83,3 +83,3 @@ var resourceEvent = combine({ | ||
} | ||
function computeRequestTracingInfo(request) { | ||
function computeRequestTracingInfo(request, configuration) { | ||
var hasBeenTraced = request.traceSampled && request.traceId && request.spanId; | ||
@@ -93,7 +93,17 @@ if (!hasBeenTraced) { | ||
trace_id: request.traceId.toDecimalString(), | ||
rule_psr: getRulePsr(configuration), | ||
}, | ||
}; | ||
} | ||
function computeEntryTracingInfo(entry) { | ||
return entry.traceId ? { _dd: { trace_id: entry.traceId } } : undefined; | ||
function computeEntryTracingInfo(entry, configuration) { | ||
var hasBeenTraced = entry.traceId; | ||
if (!hasBeenTraced) { | ||
return undefined; | ||
} | ||
return { | ||
_dd: { | ||
trace_id: entry.traceId, | ||
rule_psr: getRulePsr(configuration), | ||
}, | ||
}; | ||
} | ||
@@ -106,2 +116,8 @@ function toPerformanceEntryRepresentation(entry) { | ||
} | ||
/** | ||
* @returns number between 0 and 1 which represents tracing sample rate | ||
*/ | ||
function getRulePsr(configuration) { | ||
return isNumber(configuration.tracingSampleRate) ? configuration.tracingSampleRate / 100 : undefined; | ||
} | ||
//# sourceMappingURL=resourceCollection.js.map |
@@ -1,2 +0,2 @@ | ||
import { getOrigin, matchList, objectEntries, shallowClone, performDraw } from '@datadog/browser-core'; | ||
import { getOrigin, matchList, objectEntries, shallowClone, performDraw, isNumber } from '@datadog/browser-core'; | ||
/** | ||
@@ -76,3 +76,3 @@ * Clear tracing information to avoid incomplete traces. Ideally, we should do it when the | ||
context.spanId = new TraceIdentifier(); | ||
context.traceSampled = performDraw(configuration.tracingSampleRate); | ||
context.traceSampled = !isNumber(configuration.tracingSampleRate) || performDraw(configuration.tracingSampleRate); | ||
inject(makeTracingHeaders(context.traceId, context.spanId, context.traceSampled)); | ||
@@ -79,0 +79,0 @@ } |
@@ -31,2 +31,3 @@ import type { Context, Duration, ErrorSource, ErrorHandling, ResourceType, ServerDuration, TimeStamp } from '@datadog/browser-core'; | ||
span_id?: string; | ||
rule_psr?: number; | ||
}; | ||
@@ -33,0 +34,0 @@ } |
@@ -49,3 +49,3 @@ /** | ||
*/ | ||
readonly type: ('rage_click' | 'dead_click' | 'error_click')[]; | ||
readonly type: ('rage_click' | 'dead_click' | 'error_click' | 'rage_tap' | 'error_tap')[]; | ||
[k: string]: unknown; | ||
@@ -433,2 +433,6 @@ }; | ||
readonly trace_id?: string; | ||
/** | ||
* tracing sample rate in decimal format | ||
*/ | ||
readonly rule_psr?: number; | ||
[k: string]: unknown; | ||
@@ -681,3 +685,3 @@ }; | ||
*/ | ||
readonly source?: 'android' | 'ios' | 'browser' | 'flutter' | 'react-native'; | ||
readonly source?: 'android' | 'ios' | 'browser' | 'flutter' | 'react-native' | 'roku'; | ||
/** | ||
@@ -684,0 +688,0 @@ * View properties |
@@ -1,2 +0,2 @@ | ||
import { Batch, combine, HttpRequest, isTelemetryReplicationAllowed } from '@datadog/browser-core'; | ||
import { Batch, combine, createHttpRequest, isTelemetryReplicationAllowed } from '@datadog/browser-core'; | ||
export function startRumBatch(configuration, lifeCycle, telemetryEventObservable) { | ||
@@ -24,3 +24,3 @@ var batch = makeRumBatch(configuration, lifeCycle); | ||
function createRumBatch(endpointBuilder, unloadCallback) { | ||
return new Batch(new HttpRequest(endpointBuilder, configuration.batchBytesLimit), configuration.batchMessagesLimit, configuration.batchBytesLimit, configuration.messageBytesLimit, configuration.flushTimeout, unloadCallback); | ||
return new Batch(createHttpRequest(endpointBuilder, configuration.batchBytesLimit), configuration.batchMessagesLimit, configuration.batchBytesLimit, configuration.messageBytesLimit, configuration.flushTimeout, unloadCallback); | ||
} | ||
@@ -27,0 +27,0 @@ function withReplicaApplicationId(message) { |
{ | ||
"name": "@datadog/browser-rum-core", | ||
"version": "4.17.2", | ||
"version": "4.18.1", | ||
"license": "Apache-2.0", | ||
@@ -15,3 +15,3 @@ "main": "cjs/index.js", | ||
"dependencies": { | ||
"@datadog/browser-core": "4.17.2" | ||
"@datadog/browser-core": "4.18.1" | ||
}, | ||
@@ -26,3 +26,3 @@ "devDependencies": { | ||
}, | ||
"gitHead": "b4a39bcc003ad5f38044dfedbe3bd3b118281183" | ||
"gitHead": "bd833602495172229db1e133b89a9f2b0b8eea9e" | ||
} |
@@ -73,3 +73,3 @@ import type { Observable, TelemetryEvent } from '@datadog/browser-core' | ||
startLongTaskCollection(lifeCycle, session) | ||
startResourceCollection(lifeCycle) | ||
startResourceCollection(lifeCycle, configuration) | ||
const { addTiming, startView } = startViewCollection( | ||
@@ -76,0 +76,0 @@ lifeCycle, |
@@ -61,4 +61,4 @@ import { DefaultPrivacyLevel, display } from '@datadog/browser-core' | ||
describe('tracingSampleRate', () => { | ||
it('defaults to 100 if the option is not provided', () => { | ||
expect(validateAndBuildRumConfiguration(DEFAULT_INIT_CONFIGURATION)!.tracingSampleRate).toBe(100) | ||
it('defaults to undefined if the option is not provided', () => { | ||
expect(validateAndBuildRumConfiguration(DEFAULT_INIT_CONFIGURATION)!.tracingSampleRate).toBeUndefined() | ||
}) | ||
@@ -65,0 +65,0 @@ |
@@ -46,3 +46,3 @@ import type { Configuration, InitConfiguration } from '@datadog/browser-core' | ||
allowedTracingOrigins: Array<string | RegExp> | ||
tracingSampleRate: number | ||
tracingSampleRate: number | undefined | ||
excludedActivityUrls: Array<string | RegExp> | ||
@@ -108,3 +108,3 @@ applicationId: string | ||
allowedTracingOrigins: initConfiguration.allowedTracingOrigins ?? [], | ||
tracingSampleRate: initConfiguration.tracingSampleRate ?? 100, | ||
tracingSampleRate: initConfiguration.tracingSampleRate, | ||
excludedActivityUrls: initConfiguration.excludedActivityUrls ?? [], | ||
@@ -111,0 +111,0 @@ trackInteractions: !!initConfiguration.trackInteractions || trackFrustrations, |
@@ -11,2 +11,3 @@ import type { Duration, RelativeTime, ServerDuration, TimeStamp } from '@datadog/browser-core' | ||
import { TraceIdentifier } from '../../tracing/tracer' | ||
import { validateAndBuildRumConfiguration } from '../../configuration' | ||
import { startResourceCollection } from './resourceCollection' | ||
@@ -19,3 +20,6 @@ | ||
setupBuilder = setup().beforeBuild(({ lifeCycle }) => { | ||
startResourceCollection(lifeCycle) | ||
startResourceCollection( | ||
lifeCycle, | ||
validateAndBuildRumConfiguration({ clientToken: 'xxx', applicationId: 'xxx' })! | ||
) | ||
}) | ||
@@ -191,2 +195,76 @@ }) | ||
}) | ||
it('should pull tracingSampleRate from config if present', () => { | ||
setupBuilder = setup().beforeBuild(({ lifeCycle }) => { | ||
startResourceCollection( | ||
lifeCycle, | ||
validateAndBuildRumConfiguration({ | ||
clientToken: 'xxx', | ||
applicationId: 'xxx', | ||
tracingSampleRate: 60, | ||
})! | ||
) | ||
}) | ||
const { lifeCycle, rawRumEvents } = setupBuilder.build() | ||
lifeCycle.notify( | ||
LifeCycleEventType.REQUEST_COMPLETED, | ||
createCompletedRequest({ | ||
traceSampled: true, | ||
spanId: new TraceIdentifier(), | ||
traceId: new TraceIdentifier(), | ||
}) | ||
) | ||
const traceInfo = (rawRumEvents[0].rawRumEvent as RawRumResourceEvent)._dd! | ||
expect(traceInfo.rule_psr).toEqual(0.6) | ||
}) | ||
it('should not define rule_psr if tracingSampleRate is undefined', () => { | ||
setupBuilder = setup().beforeBuild(({ lifeCycle }) => { | ||
startResourceCollection( | ||
lifeCycle, | ||
validateAndBuildRumConfiguration({ | ||
clientToken: 'xxx', | ||
applicationId: 'xxx', | ||
})! | ||
) | ||
}) | ||
const { lifeCycle, rawRumEvents } = setupBuilder.build() | ||
lifeCycle.notify( | ||
LifeCycleEventType.REQUEST_COMPLETED, | ||
createCompletedRequest({ | ||
traceSampled: true, | ||
spanId: new TraceIdentifier(), | ||
traceId: new TraceIdentifier(), | ||
}) | ||
) | ||
const traceInfo = (rawRumEvents[0].rawRumEvent as RawRumResourceEvent)._dd! | ||
expect(traceInfo.rule_psr).toBeUndefined() | ||
}) | ||
it('should define rule_psr to 0 if tracingSampleRate is set to 0', () => { | ||
setupBuilder = setup().beforeBuild(({ lifeCycle }) => { | ||
startResourceCollection( | ||
lifeCycle, | ||
validateAndBuildRumConfiguration({ | ||
clientToken: 'xxx', | ||
applicationId: 'xxx', | ||
tracingSampleRate: 0, | ||
})! | ||
) | ||
}) | ||
const { lifeCycle, rawRumEvents } = setupBuilder.build() | ||
lifeCycle.notify( | ||
LifeCycleEventType.REQUEST_COMPLETED, | ||
createCompletedRequest({ | ||
traceSampled: true, | ||
spanId: new TraceIdentifier(), | ||
traceId: new TraceIdentifier(), | ||
}) | ||
) | ||
const traceInfo = (rawRumEvents[0].rawRumEvent as RawRumResourceEvent)._dd! | ||
expect(traceInfo.rule_psr).toEqual(0) | ||
}) | ||
}) | ||
@@ -193,0 +271,0 @@ }) |
@@ -9,3 +9,5 @@ import { | ||
assign, | ||
isNumber, | ||
} from '@datadog/browser-core' | ||
import type { RumConfiguration } from '../../configuration' | ||
import type { RumPerformanceEntry, RumPerformanceResourceTiming } from '../../../browser/performanceCollection' | ||
@@ -32,5 +34,5 @@ import { supportPerformanceEntry } from '../../../browser/performanceCollection' | ||
export function startResourceCollection(lifeCycle: LifeCycle) { | ||
export function startResourceCollection(lifeCycle: LifeCycle, configuration: RumConfiguration) { | ||
lifeCycle.subscribe(LifeCycleEventType.REQUEST_COMPLETED, (request: RequestCompleteEvent) => { | ||
lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processRequest(request)) | ||
lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processRequest(request, configuration)) | ||
}) | ||
@@ -41,3 +43,3 @@ | ||
if (entry.entryType === 'resource' && !isRequestKind(entry)) { | ||
lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processResourceEntry(entry)) | ||
lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processResourceEntry(entry, configuration)) | ||
} | ||
@@ -48,3 +50,6 @@ } | ||
function processRequest(request: RequestCompleteEvent): RawRumEventCollectedData<RawRumResourceEvent> { | ||
function processRequest( | ||
request: RequestCompleteEvent, | ||
configuration: RumConfiguration | ||
): RawRumEventCollectedData<RawRumResourceEvent> { | ||
const type = request.type === RequestType.XHR ? ResourceType.XHR : ResourceType.FETCH | ||
@@ -56,3 +61,3 @@ | ||
const tracingInfo = computeRequestTracingInfo(request) | ||
const tracingInfo = computeRequestTracingInfo(request, configuration) | ||
@@ -89,7 +94,11 @@ const resourceEvent = combine( | ||
function processResourceEntry(entry: RumPerformanceResourceTiming): RawRumEventCollectedData<RawRumResourceEvent> { | ||
function processResourceEntry( | ||
entry: RumPerformanceResourceTiming, | ||
configuration: RumConfiguration | ||
): RawRumEventCollectedData<RawRumResourceEvent> { | ||
const type = computeResourceKind(entry) | ||
const entryMetrics = computePerformanceEntryMetrics(entry) | ||
const tracingInfo = computeEntryTracingInfo(entry) | ||
const tracingInfo = computeEntryTracingInfo(entry, configuration) | ||
const startClocks = relativeToClocks(entry.startTime) | ||
@@ -130,3 +139,3 @@ const resourceEvent = combine( | ||
function computeRequestTracingInfo(request: RequestCompleteEvent) { | ||
function computeRequestTracingInfo(request: RequestCompleteEvent, configuration: RumConfiguration) { | ||
const hasBeenTraced = request.traceSampled && request.traceId && request.spanId | ||
@@ -140,2 +149,3 @@ if (!hasBeenTraced) { | ||
trace_id: request.traceId!.toDecimalString(), | ||
rule_psr: getRulePsr(configuration), | ||
}, | ||
@@ -145,4 +155,13 @@ } | ||
function computeEntryTracingInfo(entry: RumPerformanceResourceTiming) { | ||
return entry.traceId ? { _dd: { trace_id: entry.traceId } } : undefined | ||
function computeEntryTracingInfo(entry: RumPerformanceResourceTiming, configuration: RumConfiguration) { | ||
const hasBeenTraced = entry.traceId | ||
if (!hasBeenTraced) { | ||
return undefined | ||
} | ||
return { | ||
_dd: { | ||
trace_id: entry.traceId, | ||
rule_psr: getRulePsr(configuration), | ||
}, | ||
} | ||
} | ||
@@ -156,1 +175,8 @@ | ||
} | ||
/** | ||
* @returns number between 0 and 1 which represents tracing sample rate | ||
*/ | ||
function getRulePsr(configuration: RumConfiguration) { | ||
return isNumber(configuration.tracingSampleRate) ? configuration.tracingSampleRate / 100 : undefined | ||
} |
@@ -1,2 +0,2 @@ | ||
import { getOrigin, matchList, objectEntries, shallowClone, performDraw } from '@datadog/browser-core' | ||
import { getOrigin, matchList, objectEntries, shallowClone, performDraw, isNumber } from '@datadog/browser-core' | ||
import type { RumConfiguration } from '../configuration' | ||
@@ -96,3 +96,3 @@ import type { | ||
context.spanId = new TraceIdentifier() | ||
context.traceSampled = performDraw(configuration.tracingSampleRate) | ||
context.traceSampled = !isNumber(configuration.tracingSampleRate) || performDraw(configuration.tracingSampleRate) | ||
inject(makeTracingHeaders(context.traceId, context.spanId, context.traceSampled)) | ||
@@ -99,0 +99,0 @@ } |
@@ -41,2 +41,3 @@ import type { | ||
span_id?: string // not available for initial document tracing | ||
rule_psr?: number | ||
} | ||
@@ -43,0 +44,0 @@ } |
@@ -51,3 +51,3 @@ /* eslint-disable */ | ||
*/ | ||
readonly type: ('rage_click' | 'dead_click' | 'error_click')[] | ||
readonly type: ('rage_click' | 'dead_click' | 'error_click' | 'rage_tap' | 'error_tap')[] | ||
[k: string]: unknown | ||
@@ -477,2 +477,6 @@ } | ||
readonly trace_id?: string | ||
/** | ||
* tracing sample rate in decimal format | ||
*/ | ||
readonly rule_psr?: number | ||
[k: string]: unknown | ||
@@ -734,3 +738,3 @@ } | ||
*/ | ||
readonly source?: 'android' | 'ios' | 'browser' | 'flutter' | 'react-native' | ||
readonly source?: 'android' | 'ios' | 'browser' | 'flutter' | 'react-native' | 'roku' | ||
/** | ||
@@ -737,0 +741,0 @@ * View properties |
import type { Context, EndpointBuilder, TelemetryEvent, Observable } from '@datadog/browser-core' | ||
import { Batch, combine, HttpRequest, isTelemetryReplicationAllowed } from '@datadog/browser-core' | ||
import { Batch, combine, createHttpRequest, isTelemetryReplicationAllowed } from '@datadog/browser-core' | ||
import type { RumConfiguration } from '../domain/configuration' | ||
@@ -45,3 +45,3 @@ import type { LifeCycle } from '../domain/lifeCycle' | ||
return new Batch( | ||
new HttpRequest(endpointBuilder, configuration.batchBytesLimit), | ||
createHttpRequest(endpointBuilder, configuration.batchBytesLimit), | ||
configuration.batchMessagesLimit, | ||
@@ -48,0 +48,0 @@ configuration.batchBytesLimit, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1187500
24276
+ Added@datadog/browser-core@4.18.1(transitive)
- Removed@datadog/browser-core@4.17.2(transitive)
Updated@datadog/browser-core@4.18.1