Skip to content

Commit 65507a8

Browse files
RUM-1351: Fix rum resource id for okhttp instrumentation
1 parent 4f0f65a commit 65507a8

File tree

12 files changed

+239
-87
lines changed

12 files changed

+239
-87
lines changed

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/NoOpInternalSdkCore.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import java.util.concurrent.Future
3737
import java.util.concurrent.ScheduledExecutorService
3838
import java.util.concurrent.ScheduledFuture
3939
import java.util.concurrent.TimeUnit
40+
import kotlin.reflect.KClass
4041

4142
/**
4243
* A no-op implementation of [SdkCore].
@@ -344,5 +345,6 @@ internal object NoOpInternalSdkCore : InternalSdkCore {
344345
override fun timeout(): Timeout {
345346
return Timeout.NONE
346347
}
348+
347349
}
348350
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,11 @@ interface com.datadog.android.rum.internal.monitor.AdvancedNetworkRumMonitor : c
200200
fun addResourceTiming(Any, com.datadog.android.rum.internal.domain.event.ResourceTiming)
201201
fun notifyInterceptorInstantiated()
202202
fun startResource(com.datadog.android.rum.resource.ResourceId, com.datadog.android.rum.RumResourceMethod, String, Map<String, Any?> = emptyMap())
203+
fun startResource(com.datadog.android.rum.resource.CallResourceId, com.datadog.android.rum.RumResourceMethod, String, Map<String, Any?> = emptyMap())
203204
fun stopResource(com.datadog.android.rum.resource.ResourceId, Int?, Long?, com.datadog.android.rum.RumResourceKind, Map<String, Any?> = emptyMap())
205+
fun stopResource(com.datadog.android.rum.resource.CallResourceId, Int?, Long?, com.datadog.android.rum.RumResourceKind, Map<String, Any?> = emptyMap())
204206
fun stopResourceWithError(com.datadog.android.rum.resource.ResourceId, Int?, String, com.datadog.android.rum.RumErrorSource, Throwable, Map<String, Any?> = emptyMap())
207+
fun stopResourceWithError(com.datadog.android.rum.resource.CallResourceId, Int?, String, com.datadog.android.rum.RumErrorSource, Throwable, Map<String, Any?> = emptyMap())
205208
fun stopResourceWithError(com.datadog.android.rum.resource.ResourceId, Int?, String, com.datadog.android.rum.RumErrorSource, String, String?, Map<String, Any?> = emptyMap())
206209
class com.datadog.android.rum.internal.net.RumResourceInstrumentation
207210
constructor(String?, String, com.datadog.android.rum.RumResourceAttributesProvider)
@@ -238,8 +241,11 @@ fun android.content.Context.getRawResAsRumResource(Int, com.datadog.android.api.
238241
fun java.io.InputStream.asRumResource(String, com.datadog.android.api.SdkCore = Datadog.getInstance()): java.io.InputStream
239242
class com.datadog.android.rum.resource.ResourceId
240243
constructor(String, String?)
244+
val someOtherUUID: String
241245
override fun equals(Any?): Boolean
242246
override fun hashCode(): Int
247+
data class com.datadog.android.rum.resource.CallResourceId
248+
constructor(okhttp3.Call)
243249
class com.datadog.android.rum.resource.RumResourceInputStream : java.io.InputStream
244250
constructor(java.io.InputStream, String, com.datadog.android.api.SdkCore = Datadog.getInstance())
245251
override fun read(): Int

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,16 +384,22 @@ public abstract class com/datadog/android/rum/internal/instrumentation/gestures/
384384
public abstract interface class com/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor : com/datadog/android/rum/RumMonitor {
385385
public abstract fun addResourceTiming (Ljava/lang/Object;Lcom/datadog/android/rum/internal/domain/event/ResourceTiming;)V
386386
public abstract fun notifyInterceptorInstantiated ()V
387+
public abstract fun startResource (Lcom/datadog/android/rum/resource/CallResourceId;Lcom/datadog/android/rum/RumResourceMethod;Ljava/lang/String;Ljava/util/Map;)V
387388
public abstract fun startResource (Lcom/datadog/android/rum/resource/ResourceId;Lcom/datadog/android/rum/RumResourceMethod;Ljava/lang/String;Ljava/util/Map;)V
389+
public abstract fun stopResource (Lcom/datadog/android/rum/resource/CallResourceId;Ljava/lang/Integer;Ljava/lang/Long;Lcom/datadog/android/rum/RumResourceKind;Ljava/util/Map;)V
388390
public abstract fun stopResource (Lcom/datadog/android/rum/resource/ResourceId;Ljava/lang/Integer;Ljava/lang/Long;Lcom/datadog/android/rum/RumResourceKind;Ljava/util/Map;)V
391+
public abstract fun stopResourceWithError (Lcom/datadog/android/rum/resource/CallResourceId;Ljava/lang/Integer;Ljava/lang/String;Lcom/datadog/android/rum/RumErrorSource;Ljava/lang/Throwable;Ljava/util/Map;)V
389392
public abstract fun stopResourceWithError (Lcom/datadog/android/rum/resource/ResourceId;Ljava/lang/Integer;Ljava/lang/String;Lcom/datadog/android/rum/RumErrorSource;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V
390393
public abstract fun stopResourceWithError (Lcom/datadog/android/rum/resource/ResourceId;Ljava/lang/Integer;Ljava/lang/String;Lcom/datadog/android/rum/RumErrorSource;Ljava/lang/Throwable;Ljava/util/Map;)V
391394
public abstract fun waitForResourceTiming (Ljava/lang/Object;)V
392395
}
393396

394397
public final class com/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor$DefaultImpls {
398+
public static synthetic fun startResource$default (Lcom/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor;Lcom/datadog/android/rum/resource/CallResourceId;Lcom/datadog/android/rum/RumResourceMethod;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V
395399
public static synthetic fun startResource$default (Lcom/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor;Lcom/datadog/android/rum/resource/ResourceId;Lcom/datadog/android/rum/RumResourceMethod;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V
400+
public static synthetic fun stopResource$default (Lcom/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor;Lcom/datadog/android/rum/resource/CallResourceId;Ljava/lang/Integer;Ljava/lang/Long;Lcom/datadog/android/rum/RumResourceKind;Ljava/util/Map;ILjava/lang/Object;)V
396401
public static synthetic fun stopResource$default (Lcom/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor;Lcom/datadog/android/rum/resource/ResourceId;Ljava/lang/Integer;Ljava/lang/Long;Lcom/datadog/android/rum/RumResourceKind;Ljava/util/Map;ILjava/lang/Object;)V
402+
public static synthetic fun stopResourceWithError$default (Lcom/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor;Lcom/datadog/android/rum/resource/CallResourceId;Ljava/lang/Integer;Ljava/lang/String;Lcom/datadog/android/rum/RumErrorSource;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V
397403
public static synthetic fun stopResourceWithError$default (Lcom/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor;Lcom/datadog/android/rum/resource/ResourceId;Ljava/lang/Integer;Ljava/lang/String;Lcom/datadog/android/rum/RumErrorSource;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)V
398404
public static synthetic fun stopResourceWithError$default (Lcom/datadog/android/rum/internal/monitor/AdvancedNetworkRumMonitor;Lcom/datadog/android/rum/resource/ResourceId;Ljava/lang/Integer;Ljava/lang/String;Lcom/datadog/android/rum/RumErrorSource;Ljava/lang/Throwable;Ljava/util/Map;ILjava/lang/Object;)V
399405
}
@@ -7758,6 +7764,17 @@ public final class com/datadog/android/rum/model/ViewEvent$Viewport$Companion {
77587764
public final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/rum/model/ViewEvent$Viewport;
77597765
}
77607766

7767+
public final class com/datadog/android/rum/resource/CallResourceId {
7768+
public fun <init> (Lokhttp3/Call;)V
7769+
public final fun component1 ()Lokhttp3/Call;
7770+
public final fun copy (Lokhttp3/Call;)Lcom/datadog/android/rum/resource/CallResourceId;
7771+
public static synthetic fun copy$default (Lcom/datadog/android/rum/resource/CallResourceId;Lokhttp3/Call;ILjava/lang/Object;)Lcom/datadog/android/rum/resource/CallResourceId;
7772+
public fun equals (Ljava/lang/Object;)Z
7773+
public final fun getCall ()Lokhttp3/Call;
7774+
public fun hashCode ()I
7775+
public fun toString ()Ljava/lang/String;
7776+
}
7777+
77617778
public final class com/datadog/android/rum/resource/ContextExtKt {
77627779
public static final fun getAssetAsRumResource (Landroid/content/Context;Ljava/lang/String;ILcom/datadog/android/api/SdkCore;)Ljava/io/InputStream;
77637780
public static synthetic fun getAssetAsRumResource$default (Landroid/content/Context;Ljava/lang/String;ILcom/datadog/android/api/SdkCore;ILjava/lang/Object;)Ljava/io/InputStream;
@@ -7774,6 +7791,7 @@ public final class com/datadog/android/rum/resource/ResourceId {
77747791
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
77757792
public fun equals (Ljava/lang/Object;)Z
77767793
public final fun getKey ()Ljava/lang/String;
7794+
public final fun getSomeOtherUUID ()Ljava/lang/String;
77777795
public final fun getUuid ()Ljava/lang/String;
77787796
public fun hashCode ()I
77797797
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package com.datadog.android.rum.internal.domain.scope
88

9+
import android.util.Log
910
import androidx.annotation.WorkerThread
1011
import com.datadog.android.api.InternalLogger
1112
import com.datadog.android.api.context.DatadogContext
@@ -33,6 +34,7 @@ import com.datadog.android.rum.internal.utils.hasUserData
3334
import com.datadog.android.rum.internal.utils.newRumEventWriteOperation
3435
import com.datadog.android.rum.model.ErrorEvent
3536
import com.datadog.android.rum.model.ResourceEvent
37+
import com.datadog.android.rum.resource.ResourceId
3638
import java.net.MalformedURLException
3739
import java.net.URL
3840
import java.nio.ByteBuffer
@@ -135,6 +137,9 @@ internal class RumResourceScope(
135137
writer: DataWriter<Any>
136138
) {
137139
if (key != event.key) return
140+
(event.key as? ResourceId)?.let {
141+
Log.w("WAHAHA", "stopping ${it.someOtherUUID}")
142+
}
138143
stopped = true
139144
resourceAttributes.putAll(event.attributes)
140145
kind = event.kind

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.datadog.android.rum.RumResourceKind
1414
import com.datadog.android.rum.RumResourceMethod
1515
import com.datadog.android.rum.internal.domain.event.ResourceTiming
1616
import com.datadog.android.rum.resource.ResourceId
17+
import com.datadog.android.rum.resource.CallResourceId
1718

1819
/**
1920
* FOR INTERNAL USAGE ONLY.
@@ -50,6 +51,14 @@ interface AdvancedNetworkRumMonitor : RumMonitor {
5051
attributes: Map<String, Any?> = emptyMap()
5152
)
5253

54+
@InternalApi
55+
fun startResource(
56+
key: CallResourceId,
57+
method: RumResourceMethod,
58+
url: String,
59+
attributes: Map<String, Any?> = emptyMap()
60+
)
61+
5362
/**
5463
* Stops a previously started Resource, linked with the [key] instance.
5564
* @param key the instance that represents the active view (usually your
@@ -71,6 +80,15 @@ interface AdvancedNetworkRumMonitor : RumMonitor {
7180
attributes: Map<String, Any?> = emptyMap()
7281
)
7382

83+
@InternalApi
84+
fun stopResource(
85+
key: CallResourceId,
86+
statusCode: Int?,
87+
size: Long?,
88+
kind: RumResourceKind,
89+
attributes: Map<String, Any?> = emptyMap()
90+
)
91+
7492
/**
7593
* Stops a previously started Resource that failed loading, linked with the [key] instance.
7694
* @param key the instance that represents the active view (usually your
@@ -96,6 +114,16 @@ interface AdvancedNetworkRumMonitor : RumMonitor {
96114
attributes: Map<String, Any?> = emptyMap()
97115
)
98116

117+
@InternalApi
118+
fun stopResourceWithError(
119+
key: CallResourceId,
120+
statusCode: Int?,
121+
message: String,
122+
source: RumErrorSource,
123+
throwable: Throwable,
124+
attributes: Map<String, Any?> = emptyMap()
125+
)
126+
99127
/**
100128
* Stops a previously started Resource that failed loading, linked with the [key] instance by
101129
* providing the intercepted stacktrace.

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

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import com.datadog.android.rum.internal.vitals.VitalMonitor
6464
import com.datadog.android.rum.metric.interactiontonextview.LastInteractionIdentifier
6565
import com.datadog.android.rum.metric.networksettled.InitialResourceIdentifier
6666
import com.datadog.android.rum.resource.ResourceId
67+
import com.datadog.android.rum.resource.CallResourceId
6768
import com.datadog.android.telemetry.internal.TelemetryEventHandler
6869
import java.util.Locale
6970
import java.util.concurrent.ConcurrentHashMap
@@ -307,6 +308,18 @@ internal class DatadogRumMonitor(
307308
)
308309
}
309310

311+
override fun startResource(
312+
key: CallResourceId,
313+
method: RumResourceMethod,
314+
url: String,
315+
attributes: Map<String, Any?>
316+
) {
317+
val eventTime = getEventTime(attributes)
318+
handleEvent(
319+
RumRawEvent.StartResource(key, url, method, attributes.toMap(), eventTime)
320+
)
321+
}
322+
310323
override fun stopResource(
311324
key: ResourceId,
312325
statusCode: Int?,
@@ -327,6 +340,26 @@ internal class DatadogRumMonitor(
327340
)
328341
}
329342

343+
override fun stopResource(
344+
key: CallResourceId,
345+
statusCode: Int?,
346+
size: Long?,
347+
kind: RumResourceKind,
348+
attributes: Map<String, Any?>
349+
) {
350+
val eventTime = getEventTime(attributes)
351+
handleEvent(
352+
RumRawEvent.StopResource(
353+
key,
354+
statusCode?.toLong(),
355+
size,
356+
kind,
357+
attributes.toMap(),
358+
eventTime
359+
)
360+
)
361+
}
362+
330363
override fun stopResourceWithError(
331364
key: ResourceId,
332365
statusCode: Int?,
@@ -347,6 +380,26 @@ internal class DatadogRumMonitor(
347380
)
348381
}
349382

383+
override fun stopResourceWithError(
384+
key: CallResourceId,
385+
statusCode: Int?,
386+
message: String,
387+
source: RumErrorSource,
388+
throwable: Throwable,
389+
attributes: Map<String, Any?>
390+
) {
391+
handleEvent(
392+
RumRawEvent.StopResourceWithError(
393+
key,
394+
statusCode?.toLong(),
395+
message,
396+
source,
397+
throwable,
398+
attributes.toMap()
399+
)
400+
)
401+
}
402+
350403
override fun stopResourceWithError(
351404
key: ResourceId,
352405
statusCode: Int?,

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package com.datadog.android.rum.resource
88

9+
import okhttp3.Call
910
import java.util.UUID
1011

1112
/**
@@ -23,6 +24,8 @@ class ResourceId(
2324
val uuid: String?
2425
) {
2526

27+
val someOtherUUID: String = UUID.randomUUID().toString()
28+
2629
override fun equals(other: Any?): Boolean {
2730
return if (other is ResourceId) {
2831
if (uuid.isNullOrBlank() || other.uuid.isNullOrBlank()) {
@@ -39,3 +42,7 @@ class ResourceId(
3942
return key.hashCode()
4043
}
4144
}
45+
46+
data class CallResourceId(
47+
val call: Call
48+
)

integrations/dd-sdk-android-okhttp/api/dd-sdk-android-okhttp.api

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public final class com/datadog/android/okhttp/DatadogEventListener$Factory : okh
2323

2424
public class com/datadog/android/okhttp/DatadogInterceptor : com/datadog/android/okhttp/trace/TracingInterceptor {
2525
public fun intercept (Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;
26-
protected fun onRequestIntercepted (Lcom/datadog/android/api/feature/FeatureSdkCore;Lokhttp3/Request;Lcom/datadog/android/trace/api/span/DatadogSpan;Lokhttp3/Response;Ljava/lang/Throwable;)V
26+
protected fun onRequestIntercepted (Lcom/datadog/android/api/feature/FeatureSdkCore;Lokhttp3/Request;Lcom/datadog/android/trace/api/span/DatadogSpan;Lokhttp3/Response;Ljava/lang/Throwable;Lcom/datadog/android/rum/resource/CallResourceId;)V
2727
}
2828

2929
public final class com/datadog/android/okhttp/DatadogInterceptor$Builder : com/datadog/android/okhttp/trace/TracingInterceptor$BaseBuilder {
@@ -72,8 +72,9 @@ public abstract interface class com/datadog/android/okhttp/trace/TracedRequestLi
7272
}
7373

7474
public class com/datadog/android/okhttp/trace/TracingInterceptor : okhttp3/Interceptor {
75+
protected final fun doIntercept (Lokhttp3/Interceptor$Chain;Lokhttp3/Request;Lcom/datadog/android/rum/resource/CallResourceId;)Lokhttp3/Response;
7576
public fun intercept (Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;
76-
protected fun onRequestIntercepted (Lcom/datadog/android/api/feature/FeatureSdkCore;Lokhttp3/Request;Lcom/datadog/android/trace/api/span/DatadogSpan;Lokhttp3/Response;Ljava/lang/Throwable;)V
77+
protected fun onRequestIntercepted (Lcom/datadog/android/api/feature/FeatureSdkCore;Lokhttp3/Request;Lcom/datadog/android/trace/api/span/DatadogSpan;Lokhttp3/Response;Ljava/lang/Throwable;Lcom/datadog/android/rum/resource/CallResourceId;)V
7778
}
7879

7980
public abstract class com/datadog/android/okhttp/trace/TracingInterceptor$BaseBuilder {

0 commit comments

Comments
 (0)