Skip to content

Commit d52e7e5

Browse files
Add transition event
1 parent b4e24c0 commit d52e7e5

File tree

10 files changed

+88
-30
lines changed

10 files changed

+88
-30
lines changed

packages/rum-core/src/domain/action/trackClickActions.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
PageExitReason,
1212
} from '@datadog/browser-core'
1313
import type { FrustrationType } from '../../rawRumEvent.types'
14-
import { ActionType } from '../../rawRumEvent.types'
14+
import { ActionType, RumEventType } from '../../rawRumEvent.types'
1515
import type { LifeCycle } from '../lifeCycle'
1616
import { LifeCycleEventType } from '../lifeCycle'
1717
import { trackEventCounts } from '../trackEventCounts'
@@ -292,9 +292,13 @@ function newClick(
292292
const historyEntry = history.add(id, startClocks.relative)
293293
const eventCountsSubscription = trackEventCounts({
294294
lifeCycle,
295-
isChildEvent: (event) =>
296-
event.action !== undefined &&
297-
(Array.isArray(event.action.id) ? event.action.id.includes(id) : event.action.id === id),
295+
isChildEvent: (event) => {
296+
if (event.type === RumEventType.ACTION) {
297+
return false
298+
}
299+
const actionId = (event as any).action?.id as string | string[] | undefined
300+
return !!actionId && (Array.isArray(actionId) ? actionId.includes(id) : actionId === id)
301+
},
298302
})
299303
let status = ClickStatus.ONGOING
300304
let activityEndTime: undefined | TimeStamp

packages/rum-core/src/domain/assembly.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,24 @@ describe('rum assembly', () => {
638638
expect(resultEvent.view.resource.count).toBe(0)
639639
})
640640
})
641+
642+
describe('TRANSITION event processing', () => {
643+
it('should forward TRANSITION events', () => {
644+
const { lifeCycle, serverRumEvents } = setupAssemblyTestWithDefaults({})
645+
646+
notifyRawRumEvent(lifeCycle, {
647+
rawRumEvent: createRawRumEvent(RumEventType.TRANSITION, {
648+
transition: { type: 'play', timestamp: 1234 },
649+
}),
650+
})
651+
652+
expect(serverRumEvents.length).toBe(1)
653+
const resultEvent = serverRumEvents[0] as any
654+
expect(resultEvent.type).toBe('transition')
655+
expect(resultEvent.transition).toBeDefined()
656+
expect(resultEvent.transition.type).toBe('play')
657+
})
658+
})
641659
})
642660

643661
function notifyRawRumEvent<E extends RawRumEvent>(

packages/rum-core/src/domain/assembly.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ export function startRumAssembly(
9292
...VIEW_MODIFIABLE_FIELD_PATHS,
9393
...ROOT_MODIFIABLE_FIELD_PATHS,
9494
},
95+
[RumEventType.TRANSITION]: {
96+
...USER_CUSTOMIZABLE_FIELD_PATHS,
97+
...VIEW_MODIFIABLE_FIELD_PATHS,
98+
...ROOT_MODIFIABLE_FIELD_PATHS,
99+
},
95100
}
96101
const eventRateLimiters = {
97102
[RumEventType.ERROR]: createEventRateLimiter(

packages/rum-core/src/domain/trackEventCounts.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ describe('trackEventCounts', () => {
2727
notifyCollectedRawRumEvent({ type: RumEventType.LONG_TASK })
2828
expect(eventCounts.longTaskCount).toBe(1)
2929
})
30-
;[RumEventType.VIEW, RumEventType.VITAL].forEach((eventType) => {
30+
;[RumEventType.VIEW, RumEventType.VITAL, RumEventType.TRANSITION].forEach((eventType) => {
3131
it(`doesn't track ${eventType} events`, () => {
3232
const { eventCounts } = trackEventCounts({ lifeCycle, isChildEvent: () => true })
3333
notifyCollectedRawRumEvent({ type: eventType })

packages/rum-core/src/domain/trackEventCounts.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { noop } from '@datadog/browser-core'
22
import { RumEventType } from '../rawRumEvent.types'
3-
import type { RumActionEvent, RumErrorEvent, RumLongTaskEvent, RumResourceEvent } from '../rumEvent.types'
3+
import type { RumEvent } from '../rumEvent.types'
44
import type { LifeCycle } from './lifeCycle'
55
import { LifeCycleEventType } from './lifeCycle'
66

@@ -18,7 +18,7 @@ export function trackEventCounts({
1818
onChange: callback = noop,
1919
}: {
2020
lifeCycle: LifeCycle
21-
isChildEvent: (event: RumActionEvent | RumErrorEvent | RumLongTaskEvent | RumResourceEvent) => boolean
21+
isChildEvent: (event: RumEvent) => boolean
2222
onChange?: () => void
2323
}) {
2424
const eventCounts: EventCounts = {
@@ -30,7 +30,12 @@ export function trackEventCounts({
3030
}
3131

3232
const subscription = lifeCycle.subscribe(LifeCycleEventType.RUM_EVENT_COLLECTED, (event): void => {
33-
if (event.type === RumEventType.VIEW || event.type === RumEventType.VITAL || !isChildEvent(event)) {
33+
if (
34+
event.type === RumEventType.VIEW ||
35+
event.type === RumEventType.VITAL ||
36+
event.type === RumEventType.TRANSITION ||
37+
!isChildEvent(event)
38+
) {
3439
return
3540
}
3641
switch (event.type) {

packages/rum-core/src/rawRumEvent.types.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const RumEventType = {
2020
RESOURCE: 'resource',
2121
VITAL: 'vital',
2222
STREAM: 'stream',
23+
TRANSITION: 'transition',
2324
} as const
2425

2526
export type RumEventType = (typeof RumEventType)[keyof typeof RumEventType]
@@ -374,6 +375,21 @@ export interface RawRumStreamEvent {
374375
}
375376
}
376377

378+
export interface RawRumTransitionEvent {
379+
date: TimeStamp
380+
type: typeof RumEventType.TRANSITION
381+
transition: {
382+
type: string
383+
id?: string
384+
timestamp?: number
385+
buffer_starrvation_duration?: number
386+
media_start_delay?: number
387+
error_code?: number
388+
duration?: number
389+
[k: string]: unknown
390+
}
391+
}
392+
377393
export type RawRumEvent =
378394
| RawRumErrorEvent
379395
| RawRumResourceEvent
@@ -383,3 +399,4 @@ export type RawRumEvent =
383399
| RawRumActionEvent
384400
| RawRumVitalEvent
385401
| RawRumStreamEvent
402+
| RawRumTransitionEvent

packages/rum-core/test/fixtures.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,15 @@ export function createRawRumEvent(type: RumEventType, overrides?: Context): RawR
143143
},
144144
overrides
145145
)
146+
case RumEventType.TRANSITION:
147+
return combine(
148+
{
149+
type,
150+
date: 0 as TimeStamp,
151+
transition: { type: 'play' },
152+
},
153+
overrides
154+
)
146155
}
147156
}
148157

test/apps/base-extension/yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@ __metadata:
77

88
"@datadog/browser-core@file:../../../packages/core/package.tgz::locator=rum-testing-extension%40workspace%3A.":
99
version: 6.19.0
10-
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=c8e335&locator=rum-testing-extension%40workspace%3A."
11-
checksum: 10c0/e98c1c4d1dc900848961a233c9cc28fb442219bd45bae226f9a48f6b7282c6ed743a6be9a14477c12affb948184db28a9f9d5c7cd8ce4cf08f6141cbd8bc4679
10+
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=d1e2e4&locator=rum-testing-extension%40workspace%3A."
11+
checksum: 10c0/892d4bb9a2253ee657d9da7f40f934182b64bf482ee07fd8aa4370f9a1b661dd714b02c958dd051e84132edec1dfb0a82ac9ff67bd371e8f3eb55ddb84509834
1212
languageName: node
1313
linkType: hard
1414

1515
"@datadog/browser-logs@file:../../../packages/logs/package.tgz::locator=rum-testing-extension%40workspace%3A.":
1616
version: 6.19.0
17-
resolution: "@datadog/browser-logs@file:../../../packages/logs/package.tgz#../../../packages/logs/package.tgz::hash=471336&locator=rum-testing-extension%40workspace%3A."
17+
resolution: "@datadog/browser-logs@file:../../../packages/logs/package.tgz#../../../packages/logs/package.tgz::hash=5e7803&locator=rum-testing-extension%40workspace%3A."
1818
dependencies:
1919
"@datadog/browser-core": "npm:6.19.0"
2020
peerDependencies:
2121
"@datadog/browser-rum": 6.19.0
2222
peerDependenciesMeta:
2323
"@datadog/browser-rum":
2424
optional: true
25-
checksum: 10c0/8266d763df3a6fdc22b3dbd2855fea5799d0f27a476ade83850499a8ee2bc890fd09fa1f534c2ad79d8dce75007d908fc4928f77987bb6f74c1c1e4b11115a7e
25+
checksum: 10c0/542438b155eba1f576c00ec24b36f5a191634c2a1912f4723159e934a02f5b485fa549bc8d8b230941ac68b4b3fe07aad38e40a7fc9407c15e2d6d4961a0d2ce
2626
languageName: node
2727
linkType: hard
2828

2929
"@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz::locator=rum-testing-extension%40workspace%3A.":
3030
version: 6.19.0
31-
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=c25ad6&locator=rum-testing-extension%40workspace%3A."
31+
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=f8ec7c&locator=rum-testing-extension%40workspace%3A."
3232
dependencies:
3333
"@datadog/browser-core": "npm:6.19.0"
34-
checksum: 10c0/0b46745d5dd37acb24a715b013622ed35ab01e482a0dfed56aca95cde24cfb907cb1f9deba304f8c7f49885519b2238cdc59bf3a5df0eb90e2d756aea02d346d
34+
checksum: 10c0/ef2709ac044eb75e1324278470c26142403de6afd6ac40c7f86e035cd7ce4d85b232b8ced15d4fa10efd8c52f622b8cefb28f21d00cb26742424f33e763acfc0
3535
languageName: node
3636
linkType: hard
3737

3838
"@datadog/browser-rum@file:../../../packages/rum/package.tgz::locator=rum-testing-extension%40workspace%3A.":
3939
version: 6.19.0
40-
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=603883&locator=rum-testing-extension%40workspace%3A."
40+
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=958dd6&locator=rum-testing-extension%40workspace%3A."
4141
dependencies:
4242
"@datadog/browser-core": "npm:6.19.0"
4343
"@datadog/browser-rum-core": "npm:6.19.0"
@@ -46,7 +46,7 @@ __metadata:
4646
peerDependenciesMeta:
4747
"@datadog/browser-logs":
4848
optional: true
49-
checksum: 10c0/0d05abf96a68f5c709c21e04b6cce6708f1a5e63d146efe4d42276b36d64abdeaccee39858bc0279a5011ab529d4d0d4430b344e34d0a01eed9b913649acb072
49+
checksum: 10c0/75a805a99cc4bf8453fa95ab084c4ea23d545bd410990941cda76efcdbd4d26900f11e166de6b761dcf657977d2dd179091c1b2e57247f0d2e4ff9198cbc9f54
5050
languageName: node
5151
linkType: hard
5252

test/apps/react-router-v6-app/yarn.lock

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ __metadata:
77

88
"@datadog/browser-core@file:../../../packages/core/package.tgz::locator=react-router-v6-app%40workspace%3A.":
99
version: 6.19.0
10-
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=c8e335&locator=react-router-v6-app%40workspace%3A."
11-
checksum: 10c0/e98c1c4d1dc900848961a233c9cc28fb442219bd45bae226f9a48f6b7282c6ed743a6be9a14477c12affb948184db28a9f9d5c7cd8ce4cf08f6141cbd8bc4679
10+
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=d1e2e4&locator=react-router-v6-app%40workspace%3A."
11+
checksum: 10c0/892d4bb9a2253ee657d9da7f40f934182b64bf482ee07fd8aa4370f9a1b661dd714b02c958dd051e84132edec1dfb0a82ac9ff67bd371e8f3eb55ddb84509834
1212
languageName: node
1313
linkType: hard
1414

1515
"@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz::locator=react-router-v6-app%40workspace%3A.":
1616
version: 6.19.0
17-
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=c25ad6&locator=react-router-v6-app%40workspace%3A."
17+
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=f8ec7c&locator=react-router-v6-app%40workspace%3A."
1818
dependencies:
1919
"@datadog/browser-core": "npm:6.19.0"
20-
checksum: 10c0/0b46745d5dd37acb24a715b013622ed35ab01e482a0dfed56aca95cde24cfb907cb1f9deba304f8c7f49885519b2238cdc59bf3a5df0eb90e2d756aea02d346d
20+
checksum: 10c0/ef2709ac044eb75e1324278470c26142403de6afd6ac40c7f86e035cd7ce4d85b232b8ced15d4fa10efd8c52f622b8cefb28f21d00cb26742424f33e763acfc0
2121
languageName: node
2222
linkType: hard
2323

@@ -48,7 +48,7 @@ __metadata:
4848

4949
"@datadog/browser-rum@file:../../../packages/rum/package.tgz::locator=react-router-v6-app%40workspace%3A.":
5050
version: 6.19.0
51-
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=603883&locator=react-router-v6-app%40workspace%3A."
51+
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=958dd6&locator=react-router-v6-app%40workspace%3A."
5252
dependencies:
5353
"@datadog/browser-core": "npm:6.19.0"
5454
"@datadog/browser-rum-core": "npm:6.19.0"
@@ -57,7 +57,7 @@ __metadata:
5757
peerDependenciesMeta:
5858
"@datadog/browser-logs":
5959
optional: true
60-
checksum: 10c0/0d05abf96a68f5c709c21e04b6cce6708f1a5e63d146efe4d42276b36d64abdeaccee39858bc0279a5011ab529d4d0d4430b344e34d0a01eed9b913649acb072
60+
checksum: 10c0/75a805a99cc4bf8453fa95ab084c4ea23d545bd410990941cda76efcdbd4d26900f11e166de6b761dcf657977d2dd179091c1b2e57247f0d2e4ff9198cbc9f54
6161
languageName: node
6262
linkType: hard
6363

test/apps/vanilla/yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@ __metadata:
77

88
"@datadog/browser-core@file:../../../packages/core/package.tgz::locator=app%40workspace%3A.":
99
version: 6.19.0
10-
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=c8e335&locator=app%40workspace%3A."
11-
checksum: 10c0/e98c1c4d1dc900848961a233c9cc28fb442219bd45bae226f9a48f6b7282c6ed743a6be9a14477c12affb948184db28a9f9d5c7cd8ce4cf08f6141cbd8bc4679
10+
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=d1e2e4&locator=app%40workspace%3A."
11+
checksum: 10c0/892d4bb9a2253ee657d9da7f40f934182b64bf482ee07fd8aa4370f9a1b661dd714b02c958dd051e84132edec1dfb0a82ac9ff67bd371e8f3eb55ddb84509834
1212
languageName: node
1313
linkType: hard
1414

1515
"@datadog/browser-logs@file:../../../packages/logs/package.tgz::locator=app%40workspace%3A.":
1616
version: 6.19.0
17-
resolution: "@datadog/browser-logs@file:../../../packages/logs/package.tgz#../../../packages/logs/package.tgz::hash=471336&locator=app%40workspace%3A."
17+
resolution: "@datadog/browser-logs@file:../../../packages/logs/package.tgz#../../../packages/logs/package.tgz::hash=5e7803&locator=app%40workspace%3A."
1818
dependencies:
1919
"@datadog/browser-core": "npm:6.19.0"
2020
peerDependencies:
2121
"@datadog/browser-rum": 6.19.0
2222
peerDependenciesMeta:
2323
"@datadog/browser-rum":
2424
optional: true
25-
checksum: 10c0/8266d763df3a6fdc22b3dbd2855fea5799d0f27a476ade83850499a8ee2bc890fd09fa1f534c2ad79d8dce75007d908fc4928f77987bb6f74c1c1e4b11115a7e
25+
checksum: 10c0/542438b155eba1f576c00ec24b36f5a191634c2a1912f4723159e934a02f5b485fa549bc8d8b230941ac68b4b3fe07aad38e40a7fc9407c15e2d6d4961a0d2ce
2626
languageName: node
2727
linkType: hard
2828

2929
"@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz::locator=app%40workspace%3A.":
3030
version: 6.19.0
31-
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=c25ad6&locator=app%40workspace%3A."
31+
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=f8ec7c&locator=app%40workspace%3A."
3232
dependencies:
3333
"@datadog/browser-core": "npm:6.19.0"
34-
checksum: 10c0/0b46745d5dd37acb24a715b013622ed35ab01e482a0dfed56aca95cde24cfb907cb1f9deba304f8c7f49885519b2238cdc59bf3a5df0eb90e2d756aea02d346d
34+
checksum: 10c0/ef2709ac044eb75e1324278470c26142403de6afd6ac40c7f86e035cd7ce4d85b232b8ced15d4fa10efd8c52f622b8cefb28f21d00cb26742424f33e763acfc0
3535
languageName: node
3636
linkType: hard
3737

3838
"@datadog/browser-rum@file:../../../packages/rum/package.tgz::locator=app%40workspace%3A.":
3939
version: 6.19.0
40-
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=603883&locator=app%40workspace%3A."
40+
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=958dd6&locator=app%40workspace%3A."
4141
dependencies:
4242
"@datadog/browser-core": "npm:6.19.0"
4343
"@datadog/browser-rum-core": "npm:6.19.0"
@@ -46,7 +46,7 @@ __metadata:
4646
peerDependenciesMeta:
4747
"@datadog/browser-logs":
4848
optional: true
49-
checksum: 10c0/0d05abf96a68f5c709c21e04b6cce6708f1a5e63d146efe4d42276b36d64abdeaccee39858bc0279a5011ab529d4d0d4430b344e34d0a01eed9b913649acb072
49+
checksum: 10c0/75a805a99cc4bf8453fa95ab084c4ea23d545bd410990941cda76efcdbd4d26900f11e166de6b761dcf657977d2dd179091c1b2e57247f0d2e4ff9198cbc9f54
5050
languageName: node
5151
linkType: hard
5252

0 commit comments

Comments
 (0)