Skip to content

Commit b105196

Browse files
authored
Merge pull request #2685 from DataDog/xgouchet/RUM-9923/custom_endpoint
RUM-9923 Custom endpoint URL are taken as is
2 parents 41537e0 + 0910168 commit b105196

File tree

23 files changed

+42
-72
lines changed

23 files changed

+42
-72
lines changed

features/dd-sdk-android-logs/src/main/kotlin/com/datadog/android/log/LogsConfiguration.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ data class LogsConfiguration internal constructor(
2727

2828
/**
2929
* Let the Logs feature target a custom server.
30+
* The provided url should be the full endpoint url, e.g.: https://example.com/logs/upload
3031
*/
3132
fun useCustomEndpoint(endpoint: String): Builder {
3233
customEndpointUrl = endpoint

features/dd-sdk-android-logs/src/main/kotlin/com/datadog/android/log/internal/net/LogsRequestFactory.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@ internal class LogsRequestFactory(
5757
}
5858

5959
private fun buildUrl(source: String, context: DatadogContext): String {
60-
return "%s/api/v2/logs?%s=%s"
60+
val baseUrl = customEndpointUrl ?: (context.site.intakeEndpoint + "/api/v2/logs")
61+
return "%s?%s=%s"
6162
.format(
6263
Locale.US,
63-
customEndpointUrl ?: context.site.intakeEndpoint,
64+
baseUrl,
6465
RequestFactory.QUERY_PARAM_SOURCE,
6566
source
6667
)

features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/LogsConfigurationBuilderTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal class LogsConfigurationBuilderTest {
4444

4545
@Test
4646
fun `M build configuration with custom site W useCustomEndpoint() and build()`(
47-
@StringForgery(regex = "https://[a-z]+\\.com") logsEndpointUrl: String
47+
@StringForgery(regex = "https://[a-z]+\\.com(/[a-z]+)+") logsEndpointUrl: String
4848
) {
4949
// When
5050
val logsConfiguration = testedBuilder.useCustomEndpoint(logsEndpointUrl).build()

features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/net/LogsRequestFactoryTest.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ internal class LogsRequestFactoryTest {
9393
@Suppress("NAME_SHADOWING")
9494
@Test
9595
fun `M create a proper request W create() { custom endpoint }`(
96-
@StringForgery(regex = "https://[a-z]+\\.com") fakeEndpoint: String,
96+
@StringForgery(regex = "https://[a-z]+\\.com(/[a-z]+)+") fakeEndpoint: String,
9797
@Forgery batchData: List<RawBatchEvent>,
9898
@StringForgery batchMetadata: String,
9999
@Forgery executionContext: RequestExecutionContext,
@@ -111,10 +111,7 @@ internal class LogsRequestFactoryTest {
111111

112112
// Then
113113
requireNotNull(request)
114-
assertThat(request.url).isEqualTo(
115-
"$fakeEndpoint/api/v2/logs?" +
116-
"ddsource=${fakeDatadogContext.source}"
117-
)
114+
assertThat(request.url).isEqualTo("$fakeEndpoint?ddsource=${fakeDatadogContext.source}")
118115
assertThat(request.contentType).isEqualTo(RequestFactory.CONTENT_TYPE_JSON)
119116
assertThat(request.headers.minus(RequestFactory.HEADER_REQUEST_ID)).isEqualTo(
120117
mapOf(

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ data class RumConfiguration internal constructor(
247247

248248
/**
249249
* Let the RUM feature target a custom server.
250+
* The provided url should be the full endpoint url, e.g.: https://example.com/rum/upload
250251
*/
251252
fun useCustomEndpoint(endpoint: String): Builder {
252253
rumConfig = rumConfig.copy(customEndpointUrl = endpoint)

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import com.datadog.android.rum.internal.domain.event.RumViewEventFilter
1919
import java.security.DigestException
2020
import java.security.MessageDigest
2121
import java.security.NoSuchAlgorithmException
22-
import java.util.Locale
2322
import java.util.UUID
2423

2524
internal class RumRequestFactory(
@@ -70,13 +69,9 @@ internal class RumRequestFactory(
7069

7170
)
7271

73-
val intakeUrl = "%s/api/v2/rum".format(
74-
Locale.US,
75-
customEndpointUrl ?: context.site.intakeEndpoint
76-
)
77-
78-
return intakeUrl + queryParams.map { "${it.key}=${it.value}" }
79-
.joinToString("&", prefix = "?")
72+
val intakeUrl = customEndpointUrl ?: (context.site.intakeEndpoint + "/api/v2/rum")
73+
val queryParameters = queryParams.map { "${it.key}=${it.value}" }.joinToString("&", prefix = "?")
74+
return intakeUrl + queryParameters
8075
}
8176

8277
private fun buildHeaders(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ internal class RumConfigurationBuilderTest {
131131

132132
@Test
133133
fun `M build config with custom endpoint W useCustomEndpoint() and build()`(
134-
@StringForgery(regex = "https://[a-z]+\\.com") rumUrl: String
134+
@StringForgery(regex = "https://[a-z]+\\.com(/[a-z]+)+") rumUrl: String
135135
) {
136136
// When
137137
val rumConfiguration = testedBuilder

features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/net/RumRequestFactoryTest.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ internal class RumRequestFactoryTest {
8080

8181
// Then
8282
requireNotNull(request)
83-
assertThat(request.url).isEqualTo(expectedUrl(fakeDatadogContext.site.intakeEndpoint))
83+
val expectedUrl = expectedUrl(fakeDatadogContext.site.intakeEndpoint + "/api/v2/rum")
84+
assertThat(request.url).isEqualTo(expectedUrl)
8485
assertThat(request.contentType).isEqualTo(RequestFactory.CONTENT_TYPE_TEXT_UTF8)
8586
assertThat(
8687
request.headers.minus(
@@ -111,7 +112,7 @@ internal class RumRequestFactoryTest {
111112
@Suppress("NAME_SHADOWING")
112113
@Test
113114
fun `M create a proper request W create() { custom endpoint }`(
114-
@StringForgery(regex = "https://[a-z]+\\.com") fakeEndpoint: String,
115+
@StringForgery(regex = "https://[a-z]+\\.com(/[a-z]+)+") fakeEndpoint: String,
115116
@Forgery batchData: List<RawBatchEvent>,
116117
@StringForgery batchMetadata: String,
117118
forge: Forge
@@ -173,7 +174,7 @@ internal class RumRequestFactoryTest {
173174
queryTags.add("${RumRequestFactory.LAST_FAILURE_STATUS_KEY}:${fakeExecutionContext.previousResponseCode}")
174175
}
175176

176-
return "$endpointUrl/api/v2/rum?ddsource=${fakeDatadogContext.source}" +
177+
return "$endpointUrl?ddsource=${fakeDatadogContext.source}" +
177178
"&ddtags=${queryTags.joinToString(",")}"
178179
}
179180
}

features/dd-sdk-android-session-replay/src/main/kotlin/com/datadog/android/sessionreplay/SessionReplayConfiguration.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ data class SessionReplayConfiguration internal constructor(
9999

100100
/**
101101
* Let the Session Replay target a custom server.
102+
* The provided url should be the full endpoint url, e.g.: https://example.com/replay/upload
102103
*/
103104
fun useCustomEndpoint(endpoint: String): Builder {
104105
customEndpointUrl = endpoint

features/dd-sdk-android-session-replay/src/main/kotlin/com/datadog/android/sessionreplay/internal/net/ResourcesRequestFactory.kt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import okhttp3.RequestBody
1616
import okio.Buffer
1717
import java.io.EOFException
1818
import java.io.IOException
19-
import java.util.Locale
2019
import java.util.UUID
2120

2221
internal class ResourcesRequestFactory(
@@ -94,16 +93,10 @@ internal class ResourcesRequestFactory(
9493
}
9594

9695
private fun buildUrl(datadogContext: DatadogContext): String {
97-
return String.format(
98-
Locale.US,
99-
UPLOAD_URL,
100-
customEndpointUrl ?: datadogContext.site.intakeEndpoint,
101-
"replay"
102-
)
96+
return customEndpointUrl ?: (datadogContext.site.intakeEndpoint + "/api/v2/replay")
10397
}
10498

10599
companion object {
106-
private const val UPLOAD_URL = "%s/api/v2/%s"
107100
internal const val APPLICATION_ID = "application_id"
108101
internal const val UPLOAD_DESCRIPTION = "Session Replay Resource Upload Request"
109102
internal const val ERROR_CONVERTING_BODY_TO_BYTEARRAY = "Error converting request body to bytearray"

0 commit comments

Comments
 (0)