Skip to content

Commit ded9b52

Browse files
authored
Merge pull request #2105 from DataDog/xgouchet/RUM-4822/monitor_connection_pool
RUM-4822 Allow monitoring internal connection pool
2 parents c2572e7 + 341222a commit ded9b52

File tree

6 files changed

+57
-2
lines changed

6 files changed

+57
-2
lines changed

dd-sdk-android-core/api/apiSurface

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ data class com.datadog.android.api.storage.RawBatchEvent
151151
constructor(ByteArray, ByteArray = EMPTY_BYTE_ARRAY)
152152
override fun equals(Any?): Boolean
153153
override fun hashCode(): Int
154+
data class com.datadog.android.core.ConnectionPoolInfo
155+
constructor(Int, Int)
154156
interface com.datadog.android.core.InternalSdkCore : com.datadog.android.api.feature.FeatureSdkCore
155157
val networkInfo: com.datadog.android.api.context.NetworkInfo
156158
val trackingConsent: com.datadog.android.privacy.TrackingConsent

dd-sdk-android-core/api/dd-sdk-android-core.api

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,19 @@ public final class com/datadog/android/api/storage/RawBatchEvent {
462462
public fun toString ()Ljava/lang/String;
463463
}
464464

465+
public final class com/datadog/android/core/ConnectionPoolInfo {
466+
public fun <init> (II)V
467+
public final fun component1 ()I
468+
public final fun component2 ()I
469+
public final fun copy (II)Lcom/datadog/android/core/ConnectionPoolInfo;
470+
public static synthetic fun copy$default (Lcom/datadog/android/core/ConnectionPoolInfo;IIILjava/lang/Object;)Lcom/datadog/android/core/ConnectionPoolInfo;
471+
public fun equals (Ljava/lang/Object;)Z
472+
public final fun getConnectionCount ()I
473+
public final fun getIdleConnectionCount ()I
474+
public fun hashCode ()I
475+
public fun toString ()Ljava/lang/String;
476+
}
477+
465478
public abstract interface class com/datadog/android/core/InternalSdkCore : com/datadog/android/api/feature/FeatureSdkCore {
466479
public abstract fun deleteLastViewEvent ()V
467480
public abstract fun getAllFeatures ()Ljava/util/List;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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.core
8+
9+
/**
10+
* Provide information abouth the internal OkHttp Connection pool.
11+
* @property connectionCount the total number of connections in the pool
12+
* @property idleConnectionCount the number of idle connections in the pool
13+
*/
14+
data class ConnectionPoolInfo(
15+
val connectionCount: Int,
16+
val idleConnectionCount: Int
17+
)

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/data/upload/DataOkHttpUploader.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import com.datadog.android.api.InternalLogger
1111
import com.datadog.android.api.context.DatadogContext
1212
import com.datadog.android.api.net.RequestFactory
1313
import com.datadog.android.api.storage.RawBatchEvent
14+
import com.datadog.android.core.ConnectionPoolInfo
1415
import com.datadog.android.core.internal.system.AndroidInfoProvider
1516
import okhttp3.Call
1617
import okhttp3.MediaType.Companion.toMediaTypeOrNull
18+
import okhttp3.OkHttpClient
1719
import okhttp3.Request
1820
import okhttp3.RequestBody.Companion.toRequestBody
1921
import java.util.Locale
@@ -133,6 +135,15 @@ internal class DataOkHttpUploader(
133135

134136
builder.addHeader(HEADER_USER_AGENT, userAgent)
135137

138+
if (callFactory is OkHttpClient) {
139+
val stats = ConnectionPoolInfo(
140+
callFactory.connectionPool.connectionCount(),
141+
callFactory.connectionPool.idleConnectionCount()
142+
)
143+
144+
builder.tag(ConnectionPoolInfo::class.java, stats)
145+
}
146+
136147
return builder.build()
137148
}
138149

@@ -165,6 +176,7 @@ internal class DataOkHttpUploader(
165176
HTTP_UNAVAILABLE,
166177
HTTP_GATEWAY_TIMEOUT,
167178
HTTP_INSUFFICIENT_STORAGE -> UploadStatus.HttpServerError(code)
179+
168180
else -> {
169181
internalLogger.log(
170182
InternalLogger.Level.WARN,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import okhttp3.Response
1515
* offers a possibility to add custom attributes to the RUM Resource event.
1616
*/
1717
@NoOpImplementation
18-
interface RumResourceAttributesProvider {
18+
fun interface RumResourceAttributesProvider {
1919

2020
/**
2121
* Offers a possibility to create custom attributes collection which later will be attached to

sample/kotlin/src/main/kotlin/com/datadog/android/sample/SampleApplication.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.util.Log
1313
import androidx.lifecycle.ViewModelProvider
1414
import com.datadog.android.Datadog
1515
import com.datadog.android.DatadogSite
16+
import com.datadog.android.core.ConnectionPoolInfo
1617
import com.datadog.android.core.configuration.BackPressureMitigation
1718
import com.datadog.android.core.configuration.BackPressureStrategy
1819
import com.datadog.android.core.configuration.BatchSize
@@ -272,7 +273,17 @@ class SampleApplication : Application() {
272273
)
273274
)
274275

275-
configBuilder.addNetworkInterceptor(DatadogInterceptor())
276+
configBuilder.addNetworkInterceptor(
277+
DatadogInterceptor(
278+
rumResourceAttributesProvider = { request, _, _ ->
279+
val connectionPoolInfo = request.tag(ConnectionPoolInfo::class.java)
280+
mapOf(
281+
"connection_pool.connection_count" to connectionPoolInfo?.connectionCount,
282+
"connection_pool.idle_connection_count" to connectionPoolInfo?.idleConnectionCount
283+
)
284+
}
285+
)
286+
)
276287

277288
return configBuilder.build()
278289
}

0 commit comments

Comments
 (0)