Skip to content

Commit 0d54656

Browse files
committed
RUM-9908 create addViewAttributes and removeViewAttributes API
1 parent 71b124b commit 0d54656

File tree

6 files changed

+77
-0
lines changed

6 files changed

+77
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ interface com.datadog.android.rum.RumMonitor
120120
fun clearAttributes()
121121
fun stopSession()
122122
fun addViewLoadingTime(Boolean)
123+
fun addViewAttributes(Map<String, Any?>)
124+
fun removeViewAttributes(Collection<String>)
123125
var debug: Boolean
124126
fun _getInternal(): _RumInternalProxy?
125127
enum com.datadog.android.rum.RumPerformanceMetric

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,14 @@ public abstract interface class com/datadog/android/rum/RumMonitor {
152152
public abstract fun addFeatureFlagEvaluation (Ljava/lang/String;Ljava/lang/Object;)V
153153
public abstract fun addFeatureFlagEvaluations (Ljava/util/Map;)V
154154
public abstract fun addTiming (Ljava/lang/String;)V
155+
public abstract fun addViewAttributes (Ljava/util/Map;)V
155156
public abstract fun addViewLoadingTime (Z)V
156157
public abstract fun clearAttributes ()V
157158
public abstract fun getAttributes ()Ljava/util/Map;
158159
public abstract fun getCurrentSessionId (Lkotlin/jvm/functions/Function1;)V
159160
public abstract fun getDebug ()Z
160161
public abstract fun removeAttribute (Ljava/lang/String;)V
162+
public abstract fun removeViewAttributes (Ljava/util/Collection;)V
161163
public abstract fun setDebug (Z)V
162164
public abstract fun startAction (Lcom/datadog/android/rum/RumActionType;Ljava/lang/String;Ljava/util/Map;)V
163165
public abstract fun startResource (Ljava/lang/String;Lcom/datadog/android/rum/RumResourceMethod;Ljava/lang/String;Ljava/util/Map;)V

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,20 @@ interface RumMonitor {
334334
@ExperimentalRumApi
335335
fun addViewLoadingTime(overwrite: Boolean)
336336

337+
/**
338+
* Adds attributes to the current active View. They will be propagated to all future RUM events within this View
339+
* until it stops being active.
340+
* @param attributes the attributes to add to the view
341+
*/
342+
fun addViewAttributes(attributes: Map<String, Any?>)
343+
344+
/**
345+
* Removes attributes from the current active View. Future RUM events within this view won't be having these
346+
* attributes anymore.
347+
* @param attributes the attribute keys to remove from the view
348+
*/
349+
fun removeViewAttributes(attributes: Collection<String>)
350+
337351
/**
338352
* Utility setting to inspect the active RUM View.
339353
* If set, a debugging outline will be displayed on top of the application, describing the name

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,16 @@ internal sealed class RumRawEvent {
186186
override val eventTime: Time = Time()
187187
) : RumRawEvent()
188188

189+
internal data class AddViewAttributes(
190+
val attributes: Map<String, Any?>,
191+
override val eventTime: Time = Time()
192+
) : RumRawEvent()
193+
194+
internal data class RemoveViewAttributes(
195+
val attributes: Collection<String>,
196+
override val eventTime: Time = Time()
197+
) : RumRawEvent()
198+
189199
internal data class AddLongTask(
190200
val durationNs: Long,
191201
val target: String,

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,18 @@ internal class DatadogRumMonitor(
553553
handleEvent(RumRawEvent.AddViewLoadingTime(overwrite = overwrite))
554554
}
555555

556+
override fun addViewAttributes(attributes: Map<String, Any?>) {
557+
handleEvent(
558+
RumRawEvent.AddViewAttributes(attributes)
559+
)
560+
}
561+
562+
override fun removeViewAttributes(attributes: Collection<String>) {
563+
handleEvent(
564+
RumRawEvent.RemoveViewAttributes(attributes)
565+
)
566+
}
567+
556568
override fun addLongTask(durationNs: Long, target: String) {
557569
handleEvent(
558570
RumRawEvent.AddLongTask(durationNs, target)

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/monitor/DatadogRumMonitorTest.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,14 @@ import com.datadog.android.telemetry.internal.TelemetryEventHandler
5555
import com.datadog.tools.unit.forge.aThrowable
5656
import com.datadog.tools.unit.forge.exhaustiveAttributes
5757
import fr.xgouchet.elmyr.Forge
58+
import fr.xgouchet.elmyr.annotation.AdvancedForgery
5859
import fr.xgouchet.elmyr.annotation.BoolForgery
5960
import fr.xgouchet.elmyr.annotation.DoubleForgery
6061
import fr.xgouchet.elmyr.annotation.FloatForgery
6162
import fr.xgouchet.elmyr.annotation.Forgery
6263
import fr.xgouchet.elmyr.annotation.IntForgery
6364
import fr.xgouchet.elmyr.annotation.LongForgery
65+
import fr.xgouchet.elmyr.annotation.MapForgery
6466
import fr.xgouchet.elmyr.annotation.StringForgery
6567
import fr.xgouchet.elmyr.annotation.StringForgeryType
6668
import fr.xgouchet.elmyr.junit5.ForgeConfiguration
@@ -919,6 +921,41 @@ internal class DatadogRumMonitorTest {
919921
verifyNoMoreInteractions(mockScope, mockWriter)
920922
}
921923

924+
@Test
925+
fun `M delegate event to rootScope W addViewAttributes()`(
926+
@MapForgery(
927+
key = AdvancedForgery(string = [StringForgery(StringForgeryType.ALPHABETICAL)]),
928+
value = AdvancedForgery(string = [StringForgery()])
929+
) fakeAttributes: Map<String, String>
930+
) {
931+
testedMonitor.addViewAttributes(fakeAttributes)
932+
Thread.sleep(PROCESSING_DELAY)
933+
934+
argumentCaptor<RumRawEvent> {
935+
verify(mockScope).handleEvent(capture(), same(mockWriter))
936+
val event = firstValue
937+
check(event is RumRawEvent.AddViewAttributes)
938+
assertThat(event.attributes).isSameAs(fakeAttributes)
939+
}
940+
verifyNoMoreInteractions(mockScope, mockWriter)
941+
}
942+
943+
@Test
944+
fun `M delegate event to rootScope W removeViewAttributes()`(
945+
@StringForgery fakeAttributes: List<String>
946+
) {
947+
testedMonitor.removeViewAttributes(fakeAttributes)
948+
Thread.sleep(PROCESSING_DELAY)
949+
950+
argumentCaptor<RumRawEvent> {
951+
verify(mockScope).handleEvent(capture(), same(mockWriter))
952+
val event = firstValue
953+
check(event is RumRawEvent.RemoveViewAttributes)
954+
assertThat(event.attributes).isSameAs(fakeAttributes)
955+
}
956+
verifyNoMoreInteractions(mockScope, mockWriter)
957+
}
958+
922959
@Test
923960
fun `M delegate event to rootScope on current thread W addCrash()`(
924961
@StringForgery message: String,

0 commit comments

Comments
 (0)