Skip to content

Commit d230ca7

Browse files
authored
Merge pull request #2503 from DataDog/tvaleev/rum-8449/fix-sampling-rate
[RUM 8449] Fixing sampling rate
2 parents 9f85267 + c96402f commit d230ca7

File tree

7 files changed

+43
-22
lines changed

7 files changed

+43
-22
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1391,8 +1391,9 @@ internal open class RumViewScope(
13911391
sdkCore.internalLogger
13921392
)
13931393

1394+
val viewType = RumViewType.FOREGROUND
13941395
val viewEndedMetricDispatcher = ViewEndedMetricDispatcher(
1395-
viewType = RumViewType.FOREGROUND,
1396+
viewType = viewType,
13961397
internalLogger = sdkCore.internalLogger
13971398
)
13981399

@@ -1408,6 +1409,7 @@ internal open class RumViewScope(
14081409
cpuVitalMonitor,
14091410
memoryVitalMonitor,
14101411
frameRateVitalMonitor,
1412+
type = viewType,
14111413
trackFrustrations = trackFrustrations,
14121414
sampleRate = sampleRate,
14131415
interactionToNextViewMetricResolver = interactionToNextViewMetricResolver,

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ internal class ViewEndedMetricDispatcher(
5252
tnsState: ViewInitializationMetricsState
5353
): Map<String, Any?> = buildMap {
5454
put(KEY_METRIC_TYPE, VALUE_METRIC_TYPE)
55-
put(KEY_RVE, buildAttributesMap(invState, tnsState))
55+
put(KEY_RUM_VIEW_ENDED, buildAttributesMap(invState, tnsState))
5656
}
5757

5858
private fun buildAttributesMap(
@@ -87,15 +87,15 @@ internal class ViewEndedMetricDispatcher(
8787
}
8888

8989
companion object {
90-
const val DEFAULT_SAMPLE_RATE: Float = 75f
90+
const val DEFAULT_SAMPLE_RATE: Float = 0.75f
9191

9292
internal const val VIEW_ENDED_MESSAGE = "[Mobile Metric] RUM View Ended"
9393

9494
internal const val KEY_METRIC_TYPE = "metric_type"
9595

9696
private const val VALUE_METRIC_TYPE = "rum view ended"
9797

98-
internal const val KEY_RVE = "rve"
98+
internal const val KEY_RUM_VIEW_ENDED = "rve"
9999
internal const val KEY_DURATION = "duration"
100100
internal const val KEY_LOADING_TIME = "loading_time"
101101

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ internal class RumViewScopeTest {
205205
private lateinit var mockNetworkSettledMetricResolver: NetworkSettledMetricResolver
206206

207207
@Mock
208-
private lateinit var mockInteractionNextViewMetricResolver: InteractionToNextViewMetricResolver
208+
private lateinit var mockInteractionToNextViewMetricResolver: InteractionToNextViewMetricResolver
209209

210210
@Mock
211211
private lateinit var mockViewEndedMetricDispatcher: ViewEndedMetricDispatcher
@@ -232,8 +232,8 @@ internal class RumViewScopeTest {
232232
fakeInteractionToNextViewMetricValue = forge.aNullable { aPositiveLong() }
233233
whenever(mockNetworkSettledMetricResolver.resolveMetric()) doReturn fakeNetworkSettledMetricValue
234234
whenever(mockNetworkSettledMetricResolver.getState()) doReturn fakeTnsState
235-
whenever(mockInteractionNextViewMetricResolver.getState(any())) doReturn fakeInvState
236-
whenever(mockInteractionNextViewMetricResolver.resolveMetric(any())) doReturn
235+
whenever(mockInteractionToNextViewMetricResolver.getState(any())) doReturn fakeInvState
236+
whenever(mockInteractionToNextViewMetricResolver.resolveMetric(any())) doReturn
237237
fakeInteractionToNextViewMetricValue
238238
val isValidSource = forge.aBool()
239239

@@ -7396,7 +7396,7 @@ internal class RumViewScopeTest {
73967396
@Test
73977397
fun `M notify the interactionToNextViewMetricResolver W view was created`() {
73987398
// Then
7399-
verify(mockInteractionNextViewMetricResolver).onViewCreated(
7399+
verify(mockInteractionToNextViewMetricResolver).onViewCreated(
74007400
testedScope.viewId,
74017401
fakeEventTime.nanoTime
74027402
)
@@ -7416,7 +7416,7 @@ internal class RumViewScopeTest {
74167416
)
74177417

74187418
// Then
7419-
verify(mockInteractionNextViewMetricResolver).onActionSent(
7419+
verify(mockInteractionToNextViewMetricResolver).onActionSent(
74207420
InternalInteractionContext(
74217421
validActionSent.viewId,
74227422
validActionSent.type,
@@ -7436,7 +7436,7 @@ internal class RumViewScopeTest {
74367436
)
74377437

74387438
// Then
7439-
verify(mockInteractionNextViewMetricResolver, never()).onActionSent(any())
7439+
verify(mockInteractionToNextViewMetricResolver, never()).onActionSent(any())
74407440
}
74417441

74427442
// endregion
@@ -9574,7 +9574,8 @@ internal class RumViewScopeTest {
95749574
type: RumViewType = RumViewType.FOREGROUND,
95759575
trackFrustrations: Boolean = fakeTrackFrustrations,
95769576
sampleRate: Float = fakeSampleRate,
9577-
interactionNextViewMetricResolver: InteractionToNextViewMetricResolver = mockInteractionNextViewMetricResolver,
9577+
interactionNextViewMetricResolver: InteractionToNextViewMetricResolver =
9578+
mockInteractionToNextViewMetricResolver,
95789579
networkSettledMetricResolver: NetworkSettledMetricResolver = mockNetworkSettledMetricResolver,
95799580
viewEndedMetricDispatcher: ViewMetricDispatcher = mockViewEndedMetricDispatcher
95809581
) = RumViewScope(

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/metric/ViewEndedMetricDispatcherTest.kt

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Compani
1616
import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Companion.KEY_LOADING_TIME
1717
import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Companion.KEY_METRIC_TYPE
1818
import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Companion.KEY_NO_VALUE_REASON
19-
import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Companion.KEY_RVE
19+
import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Companion.KEY_RUM_VIEW_ENDED
2020
import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Companion.KEY_TIME_TO_NETWORK_SETTLED
2121
import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Companion.KEY_VALUE
2222
import com.datadog.android.rum.internal.metric.ViewEndedMetricDispatcher.Companion.KEY_VIEW_TYPE
@@ -88,6 +88,8 @@ internal class ViewEndedMetricDispatcherTest {
8888
fun `M sendMetric only once W sendViewEnded`() {
8989
// When
9090
dispatcherUnderTest.sendViewEnded(fakeInvState, fakeTnsState)
91+
dispatcherUnderTest.sendViewEnded(fakeInvState, fakeTnsState)
92+
9193
// Then
9294
verify(mockInternalLogger).logMetric(
9395
messageBuilder = any(),
@@ -96,10 +98,6 @@ internal class ViewEndedMetricDispatcherTest {
9698
creationSampleRate = eq(null)
9799
)
98100

99-
// When
100-
dispatcherUnderTest.sendViewEnded(fakeInvState, fakeTnsState)
101-
102-
// Then
103101
verify(mockInternalLogger).log(
104102
eq(InternalLogger.Level.WARN),
105103
target = eq(Target.TELEMETRY),
@@ -111,6 +109,22 @@ internal class ViewEndedMetricDispatcherTest {
111109
verifyNoMoreInteractions(mockInternalLogger)
112110
}
113111

112+
@Test
113+
fun `M samplingRate = 0,75 W sendViewEnded { default sampling rate }`() {
114+
// Given
115+
val dispatcherUnderTest = ViewEndedMetricDispatcher(fakeViewType, mockInternalLogger)
116+
// When
117+
dispatcherUnderTest.sendViewEnded(fakeInvState, fakeTnsState)
118+
119+
// Then
120+
verify(mockInternalLogger).logMetric(
121+
messageBuilder = any(),
122+
additionalProperties = any(),
123+
samplingRate = eq(0.75f),
124+
creationSampleRate = eq(null)
125+
)
126+
}
127+
114128
@Test
115129
fun `M logMetric with expected arguments W sendViewEnded`() {
116130
// Given
@@ -188,6 +202,7 @@ internal class ViewEndedMetricDispatcherTest {
188202
when (it) {
189203
RumViewType.NONE,
190204
RumViewType.FOREGROUND -> "custom"
205+
191206
RumViewType.BACKGROUND -> "background"
192207
RumViewType.APPLICATION_LAUNCH -> "application_launch"
193208
}
@@ -233,7 +248,7 @@ internal class ViewEndedMetricDispatcherTest {
233248
tnsNoValueReason: String?
234249
): Map<String, Any?> = mapOf(
235250
KEY_METRIC_TYPE to "rum view ended",
236-
KEY_RVE to mapOf(
251+
KEY_RUM_VIEW_ENDED to mapOf(
237252
KEY_DURATION to duration,
238253
KEY_LOADING_TIME to buildMap { put(KEY_VALUE, loadingTime) },
239254
KEY_VIEW_TYPE to viewType,

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/metric/interactiontonextview/TimeBasedInteractionIdentifierTest.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package com.datadog.android.rum.metric.interactiontonextview
99
import com.datadog.android.rum.utils.forge.Configurator
1010
import com.datadog.tools.unit.ObjectTest
1111
import fr.xgouchet.elmyr.Forge
12+
import fr.xgouchet.elmyr.annotation.LongForgery
1213
import fr.xgouchet.elmyr.junit5.ForgeConfiguration
1314
import fr.xgouchet.elmyr.junit5.ForgeExtension
1415
import org.assertj.core.api.Assertions.assertThat
@@ -130,10 +131,12 @@ internal class TimeBasedInteractionIdentifierTest : ObjectTest<TimeBasedInteract
130131
}
131132

132133
@Test
133-
fun `M return false W defaultThresholdUsed{custom delay used}`(forge: Forge) {
134+
fun `M return false W defaultThresholdUsed{custom delay used}`(
135+
@LongForgery(min = 0, max = 100) timeThresholdMs: Long
136+
) {
134137
// Given
135138
val testedValidator = TimeBasedInteractionIdentifier(
136-
TimeBasedInteractionIdentifier.DEFAULT_TIME_THRESHOLD_MS + forge.aLong(min = 0, max = 100)
139+
TimeBasedInteractionIdentifier.DEFAULT_TIME_THRESHOLD_MS + timeThresholdMs
137140
)
138141
// When
139142
val result = testedValidator.defaultThresholdUsed()

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/metric/networksettled/TimeBasedInitialResourceIdentifierTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ internal class TimeBasedInitialResourceIdentifierTest : ObjectTest<TimeBasedInit
7979
}
8080

8181
@Test
82-
fun `M return true W defaultThresholdUsed{default delay used}`() {
82+
fun `M return true W defaultThresholdUsed {default delay used}`() {
8383
// Given
8484
val testedValidator = TimeBasedInitialResourceIdentifier()
8585

@@ -91,7 +91,7 @@ internal class TimeBasedInitialResourceIdentifierTest : ObjectTest<TimeBasedInit
9191
}
9292

9393
@Test
94-
fun `M return false W defaultThresholdUsed{custom delay used}`(forge: Forge) {
94+
fun `M return false W defaultThresholdUsed {custom delay used}`(forge: Forge) {
9595
// Given
9696
val testedValidator = TimeBasedInitialResourceIdentifier(
9797
TimeBasedInitialResourceIdentifier.DEFAULT_TIME_THRESHOLD_MS + forge.aTinyPositiveLong()

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/utils/forge/TelemetryViewInitializationMetricsStateForgeryFactory.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import fr.xgouchet.elmyr.ForgeryFactory
1414

1515
internal class TelemetryViewInitializationMetricsStateForgeryFactory : ForgeryFactory<ViewInitializationMetricsState> {
1616
override fun getForgery(forge: Forge): ViewInitializationMetricsState {
17-
val initializationTime = forge.aNullable { forge.aLong(min = 0L) }
17+
val initializationTime = forge.aNullable { aLong(min = 0L) }
1818
return ViewInitializationMetricsState(
1919
initializationTime = initializationTime,
2020
config = forge.aValueFrom(ViewInitializationMetricsConfig::class.java),

0 commit comments

Comments
 (0)