Skip to content

Commit 04acd57

Browse files
Introduce _RumInternalProxy.setRumSessionType
1 parent edd95ec commit 04acd57

30 files changed

+982
-770
lines changed

features/dd-sdk-android-rum/api/apiSurface

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ enum com.datadog.android.rum.RumResourceMethod
159159
- CONNECT
160160
interface com.datadog.android.rum.RumSessionListener
161161
fun onSessionStarted(String, Boolean)
162+
enum com.datadog.android.rum.RumSessionType
163+
- SYNTHETICS
164+
- USER
162165
class com.datadog.android.rum._RumInternalProxy
163166
fun addLongTask(Long, String)
164167
fun updatePerformanceMetric(RumPerformanceMetric, Double)
@@ -169,6 +172,7 @@ class com.datadog.android.rum._RumInternalProxy
169172
fun setTelemetryConfigurationEventMapper(com.datadog.android.rum.RumConfiguration.Builder, com.datadog.android.event.EventMapper<com.datadog.android.telemetry.model.TelemetryConfigurationEvent>): com.datadog.android.rum.RumConfiguration.Builder
170173
fun setAdditionalConfiguration(com.datadog.android.rum.RumConfiguration.Builder, Map<String, Any>): com.datadog.android.rum.RumConfiguration.Builder
171174
fun setComposeActionTrackingStrategy(com.datadog.android.rum.RumConfiguration.Builder, com.datadog.android.rum.tracking.ActionTrackingStrategy): com.datadog.android.rum.RumConfiguration.Builder
175+
fun setRumSessionTypeOverride(com.datadog.android.rum.RumConfiguration.Builder, RumSessionType): com.datadog.android.rum.RumConfiguration.Builder
172176
data class com.datadog.android.rum.configuration.SlowFramesConfiguration
173177
constructor(Int = DEFAULT_SLOW_FRAME_RECORDS_MAX_AMOUNT, Long = DEFAULT_FROZEN_FRAME_THRESHOLD_NS, Long = DEFAULT_CONTINUOUS_SLOW_FRAME_THRESHOLD_NS, Long = DEFAULT_FREEZE_DURATION_NS, Long = DEFAULT_VIEW_LIFETIME_THRESHOLD_NS)
174178
companion object

features/dd-sdk-android-rum/api/dd-sdk-android-rum.api

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,13 @@ public abstract interface class com/datadog/android/rum/RumSessionListener {
235235
public abstract fun onSessionStarted (Ljava/lang/String;Z)V
236236
}
237237

238+
public final class com/datadog/android/rum/RumSessionType : java/lang/Enum {
239+
public static final field SYNTHETICS Lcom/datadog/android/rum/RumSessionType;
240+
public static final field USER Lcom/datadog/android/rum/RumSessionType;
241+
public static fun valueOf (Ljava/lang/String;)Lcom/datadog/android/rum/RumSessionType;
242+
public static fun values ()[Lcom/datadog/android/rum/RumSessionType;
243+
}
244+
238245
public final class com/datadog/android/rum/_RumInternalProxy {
239246
public static final field Companion Lcom/datadog/android/rum/_RumInternalProxy$Companion;
240247
public final fun addLongTask (JLjava/lang/String;)V
@@ -247,6 +254,7 @@ public final class com/datadog/android/rum/_RumInternalProxy {
247254
public final class com/datadog/android/rum/_RumInternalProxy$Companion {
248255
public final fun setAdditionalConfiguration (Lcom/datadog/android/rum/RumConfiguration$Builder;Ljava/util/Map;)Lcom/datadog/android/rum/RumConfiguration$Builder;
249256
public final fun setComposeActionTrackingStrategy (Lcom/datadog/android/rum/RumConfiguration$Builder;Lcom/datadog/android/rum/tracking/ActionTrackingStrategy;)Lcom/datadog/android/rum/RumConfiguration$Builder;
257+
public final fun setRumSessionTypeOverride (Lcom/datadog/android/rum/RumConfiguration$Builder;Lcom/datadog/android/rum/RumSessionType;)Lcom/datadog/android/rum/RumConfiguration$Builder;
250258
public final fun setTelemetryConfigurationEventMapper (Lcom/datadog/android/rum/RumConfiguration$Builder;Lcom/datadog/android/event/EventMapper;)Lcom/datadog/android/rum/RumConfiguration$Builder;
251259
}
252260

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/Rum.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ object Rum {
139139
executorService = sdkCore.createSingleThreadExecutorService("rum-pipeline"),
140140
initialResourceIdentifier = rumFeature.initialResourceIdentifier,
141141
lastInteractionIdentifier = rumFeature.lastInteractionIdentifier,
142-
slowFramesListener = rumFeature.slowFramesListener
142+
slowFramesListener = rumFeature.slowFramesListener,
143+
rumSessionTypeOverride = rumFeature.configuration.rumSessionTypeOverride
143144
)
144145
}
145146

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/RumConfiguration.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,15 @@ data class RumConfiguration internal constructor(
378378
rumConfig.copy(composeActionTrackingStrategy = composeActionTrackingStrategy)
379379
return this
380380
}
381+
382+
/**
383+
* Set RUM session type that will be propagated to all RUM events and used regardless of
384+
* whether the session is happening inside a synthetic test or not.
385+
*/
386+
internal fun setRumSessionTypeOverride(rumSessionTypeOverride: RumSessionType): Builder {
387+
rumConfig = rumConfig.copy(rumSessionTypeOverride = rumSessionTypeOverride)
388+
return this
389+
}
381390
// endregion
382391
}
383392
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.rum
8+
9+
import com.datadog.android.lint.InternalApi
10+
11+
/**
12+
* Enum representing the RUM session type.
13+
*/
14+
@InternalApi
15+
enum class RumSessionType {
16+
SYNTHETICS,
17+
USER
18+
}

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/_RumInternalProxy.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,12 @@ class _RumInternalProxy internal constructor(private val rumMonitor: AdvancedRum
104104
): Builder {
105105
return builder.setComposeActionTrackingStrategy(composeActionTrackingStrategy)
106106
}
107+
108+
fun setRumSessionTypeOverride(
109+
builder: Builder,
110+
rumSessionTypeOverride: RumSessionType
111+
): Builder {
112+
return builder.setRumSessionTypeOverride(rumSessionTypeOverride)
113+
}
107114
}
108115
}

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/RumFeature.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import com.datadog.android.internal.telemetry.InternalTelemetryEvent
3737
import com.datadog.android.rum.GlobalRumMonitor
3838
import com.datadog.android.rum.RumErrorSource
3939
import com.datadog.android.rum.RumSessionListener
40+
import com.datadog.android.rum.RumSessionType
4041
import com.datadog.android.rum.configuration.SlowFramesConfiguration
4142
import com.datadog.android.rum.configuration.VitalsUpdateFrequency
4243
import com.datadog.android.rum.internal.anr.ANRDetectorRunnable
@@ -628,7 +629,8 @@ internal class RumFeature(
628629
val slowFramesConfiguration: SlowFramesConfiguration?,
629630
val composeActionTrackingStrategy: ActionTrackingStrategy,
630631
val additionalConfig: Map<String, Any>,
631-
val trackAnonymousUser: Boolean
632+
val trackAnonymousUser: Boolean,
633+
val rumSessionTypeOverride: RumSessionType?
632634
)
633635

634636
internal companion object {
@@ -677,7 +679,8 @@ internal class RumFeature(
677679
composeActionTrackingStrategy = NoOpActionTrackingStrategy(),
678680
additionalConfig = emptyMap(),
679681
trackAnonymousUser = true,
680-
slowFramesConfiguration = null
682+
slowFramesConfiguration = null,
683+
rumSessionTypeOverride = null
681684
)
682685

683686
internal const val EVENT_MESSAGE_PROPERTY = "message"
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.rum.internal
8+
9+
import com.datadog.android.rum.RumSessionType
10+
import com.datadog.android.rum.model.ActionEvent
11+
import com.datadog.android.rum.model.ErrorEvent
12+
import com.datadog.android.rum.model.LongTaskEvent
13+
import com.datadog.android.rum.model.ResourceEvent
14+
import com.datadog.android.rum.model.ViewEvent
15+
16+
internal fun RumSessionType.toAction(): ActionEvent.ActionEventSessionType {
17+
return when (this) {
18+
RumSessionType.SYNTHETICS -> ActionEvent.ActionEventSessionType.SYNTHETICS
19+
RumSessionType.USER -> ActionEvent.ActionEventSessionType.USER
20+
}
21+
}
22+
23+
internal fun RumSessionType.toResource(): ResourceEvent.ResourceEventSessionType {
24+
return when (this) {
25+
RumSessionType.SYNTHETICS -> ResourceEvent.ResourceEventSessionType.SYNTHETICS
26+
RumSessionType.USER -> ResourceEvent.ResourceEventSessionType.USER
27+
}
28+
}
29+
30+
internal fun RumSessionType.toError(): ErrorEvent.ErrorEventSessionType {
31+
return when (this) {
32+
RumSessionType.SYNTHETICS -> ErrorEvent.ErrorEventSessionType.SYNTHETICS
33+
RumSessionType.USER -> ErrorEvent.ErrorEventSessionType.USER
34+
}
35+
}
36+
37+
internal fun RumSessionType.toView(): ViewEvent.ViewEventSessionType {
38+
return when (this) {
39+
RumSessionType.SYNTHETICS -> ViewEvent.ViewEventSessionType.SYNTHETICS
40+
RumSessionType.USER -> ViewEvent.ViewEventSessionType.USER
41+
}
42+
}
43+
44+
internal fun RumSessionType.toLongTask(): LongTaskEvent.LongTaskEventSessionType {
45+
return when (this) {
46+
RumSessionType.SYNTHETICS -> LongTaskEvent.LongTaskEventSessionType.SYNTHETICS
47+
RumSessionType.USER -> LongTaskEvent.LongTaskEventSessionType.USER
48+
}
49+
}

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumActionScope.kt

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ import com.datadog.android.api.storage.DataWriter
1111
import com.datadog.android.core.InternalSdkCore
1212
import com.datadog.android.rum.GlobalRumMonitor
1313
import com.datadog.android.rum.RumActionType
14+
import com.datadog.android.rum.RumSessionType
1415
import com.datadog.android.rum.internal.FeaturesContextResolver
1516
import com.datadog.android.rum.internal.domain.RumContext
1617
import com.datadog.android.rum.internal.domain.Time
1718
import com.datadog.android.rum.internal.monitor.StorageEvent
19+
import com.datadog.android.rum.internal.toAction
1820
import com.datadog.android.rum.internal.utils.hasUserData
1921
import com.datadog.android.rum.internal.utils.newRumEventWriteOperation
2022
import com.datadog.android.rum.model.ActionEvent
@@ -36,7 +38,8 @@ internal class RumActionScope(
3638
maxDurationMs: Long = ACTION_MAX_DURATION_MS,
3739
private val featuresContextResolver: FeaturesContextResolver = FeaturesContextResolver(),
3840
private val trackFrustrations: Boolean,
39-
internal val sampleRate: Float
41+
internal val sampleRate: Float,
42+
private val rumSessionTypeOverride: RumSessionType?
4043
) : RumScope {
4144

4245
private val inactivityThresholdNs = TimeUnit.MILLISECONDS.toNanos(inactivityThresholdMs)
@@ -230,11 +233,13 @@ internal class RumActionScope(
230233
resultId = rumContext.syntheticsResultId
231234
)
232235
}
233-
val sessionType = if (syntheticsAttribute == null) {
234-
ActionEvent.ActionEventSessionType.USER
235-
} else {
236-
ActionEvent.ActionEventSessionType.SYNTHETICS
236+
237+
val sessionType = when {
238+
rumSessionTypeOverride != null -> rumSessionTypeOverride.toAction()
239+
syntheticsAttribute == null -> ActionEvent.ActionEventSessionType.USER
240+
else -> ActionEvent.ActionEventSessionType.SYNTHETICS
237241
}
242+
238243
val frustrations = mutableListOf<ActionEvent.Type>()
239244
if (trackFrustrations && eventErrorCount > 0 && actualType == RumActionType.TAP) {
240245
frustrations.add(ActionEvent.Type.ERROR_TAP)
@@ -351,20 +356,22 @@ internal class RumActionScope(
351356
timestampOffset: Long,
352357
featuresContextResolver: FeaturesContextResolver,
353358
trackFrustrations: Boolean,
354-
sampleRate: Float
359+
sampleRate: Float,
360+
rumSessionTypeOverride: RumSessionType?
355361
): RumScope {
356362
return RumActionScope(
357-
parentScope,
358-
sdkCore,
359-
event.waitForStop,
360-
event.eventTime,
361-
event.type,
362-
event.name,
363-
event.attributes,
364-
timestampOffset,
363+
parentScope = parentScope,
364+
sdkCore = sdkCore,
365+
waitForStop = event.waitForStop,
366+
eventTime = event.eventTime,
367+
initialType = event.type,
368+
initialName = event.name,
369+
initialAttributes = event.attributes,
370+
serverTimeOffsetInMs = timestampOffset,
365371
featuresContextResolver = featuresContextResolver,
366372
trackFrustrations = trackFrustrations,
367-
sampleRate = sampleRate
373+
sampleRate = sampleRate,
374+
rumSessionTypeOverride = rumSessionTypeOverride
368375
)
369376
}
370377
}

features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumApplicationScope.kt

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.datadog.android.core.InternalSdkCore
1515
import com.datadog.android.core.internal.net.FirstPartyHostHeaderTypeResolver
1616
import com.datadog.android.rum.DdRumContentProvider
1717
import com.datadog.android.rum.RumSessionListener
18+
import com.datadog.android.rum.RumSessionType
1819
import com.datadog.android.rum.internal.domain.RumContext
1920
import com.datadog.android.rum.internal.domain.Time
2021
import com.datadog.android.rum.internal.metric.SessionMetricDispatcher
@@ -39,29 +40,31 @@ internal class RumApplicationScope(
3940
private val sessionListener: RumSessionListener?,
4041
internal val initialResourceIdentifier: InitialResourceIdentifier,
4142
internal val lastInteractionIdentifier: LastInteractionIdentifier?,
42-
private val slowFramesListener: SlowFramesListener?
43+
private val slowFramesListener: SlowFramesListener?,
44+
private val rumSessionTypeOverride: RumSessionType?
4345
) : RumScope, RumViewChangedListener {
4446

4547
private var rumContext = RumContext(applicationId = applicationId)
4648

4749
internal val childScopes: MutableList<RumScope> = mutableListOf(
4850
RumSessionScope(
49-
this,
50-
sdkCore,
51-
sessionEndedMetricDispatcher,
52-
sampleRate,
53-
backgroundTrackingEnabled,
54-
trackFrustrations,
55-
this,
56-
firstPartyHostHeaderTypeResolver,
57-
cpuVitalMonitor,
58-
memoryVitalMonitor,
59-
frameRateVitalMonitor,
60-
sessionListener,
61-
false,
62-
initialResourceIdentifier,
63-
lastInteractionIdentifier,
64-
slowFramesListener
51+
parentScope = this,
52+
sdkCore = sdkCore,
53+
sessionEndedMetricDispatcher = sessionEndedMetricDispatcher,
54+
sampleRate = sampleRate,
55+
backgroundTrackingEnabled = backgroundTrackingEnabled,
56+
trackFrustrations = trackFrustrations,
57+
viewChangedListener = this,
58+
firstPartyHostHeaderTypeResolver = firstPartyHostHeaderTypeResolver,
59+
cpuVitalMonitor = cpuVitalMonitor,
60+
memoryVitalMonitor = memoryVitalMonitor,
61+
frameRateVitalMonitor = frameRateVitalMonitor,
62+
sessionListener = sessionListener,
63+
applicationDisplayed = false,
64+
networkSettledResourceIdentifier = initialResourceIdentifier,
65+
lastInteractionIdentifier = lastInteractionIdentifier,
66+
slowFramesListener = slowFramesListener,
67+
rumSessionTypeOverride = rumSessionTypeOverride
6568
)
6669
)
6770

@@ -141,22 +144,23 @@ internal class RumApplicationScope(
141144
@WorkerThread
142145
private fun startNewSession(event: RumRawEvent, writer: DataWriter<Any>) {
143146
val newSession = RumSessionScope(
144-
this,
145-
sdkCore,
146-
sessionEndedMetricDispatcher,
147-
sampleRate,
148-
backgroundTrackingEnabled,
149-
trackFrustrations,
150-
this,
151-
firstPartyHostHeaderTypeResolver,
152-
cpuVitalMonitor,
153-
memoryVitalMonitor,
154-
frameRateVitalMonitor,
155-
sessionListener,
156-
true,
157-
initialResourceIdentifier,
158-
lastInteractionIdentifier,
159-
slowFramesListener
147+
parentScope = this,
148+
sdkCore = sdkCore,
149+
sessionEndedMetricDispatcher = sessionEndedMetricDispatcher,
150+
sampleRate = sampleRate,
151+
backgroundTrackingEnabled = backgroundTrackingEnabled,
152+
trackFrustrations = trackFrustrations,
153+
viewChangedListener = this,
154+
firstPartyHostHeaderTypeResolver = firstPartyHostHeaderTypeResolver,
155+
cpuVitalMonitor = cpuVitalMonitor,
156+
memoryVitalMonitor = memoryVitalMonitor,
157+
frameRateVitalMonitor = frameRateVitalMonitor,
158+
sessionListener = sessionListener,
159+
applicationDisplayed = true,
160+
networkSettledResourceIdentifier = initialResourceIdentifier,
161+
lastInteractionIdentifier = lastInteractionIdentifier,
162+
slowFramesListener = slowFramesListener,
163+
rumSessionTypeOverride = rumSessionTypeOverride
160164
)
161165
childScopes.add(newSession)
162166
if (event !is RumRawEvent.StartView) {

0 commit comments

Comments
 (0)