Skip to content

Commit e96f4e2

Browse files
feat: support fullUrl in EndpointConfiguration to bypass default signal path appending
1 parent a18074b commit e96f4e2

8 files changed

Lines changed: 362 additions & 337 deletions

File tree

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
* text=auto eol=lf
2+
*.kt text eol=lf

android-agent/api/android-agent.api

Lines changed: 73 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -2,123 +2,124 @@ public abstract interface annotation class io/opentelemetry/android/Incubating :
22
}
33

44
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer {
5-
public static final field INSTANCE Lio/opentelemetry/android/agent/OpenTelemetryRumInitializer;
6-
public static final fun initialize (Landroid/content/Context;Lkotlin/jvm/functions/Function1;)Lio/opentelemetry/android/OpenTelemetryRum;
7-
public static synthetic fun initialize$default (Landroid/content/Context;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/opentelemetry/android/OpenTelemetryRum;
5+
public static final field INSTANCE Lio/opentelemetry/android/agent/OpenTelemetryRumInitializer;
6+
public static final fun initialize (Landroid/content/Context;Lkotlin/jvm/functions/Function1;)Lio/opentelemetry/android/OpenTelemetryRum;
7+
public static synthetic fun initialize$default (Landroid/content/Context;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/opentelemetry/android/OpenTelemetryRum;
88
}
99

1010
public final class io/opentelemetry/android/agent/connectivity/ClientTlsConnectivity {
11-
public fun <init> ([B[B)V
12-
public final fun getCertificatePem ()[B
13-
public final fun getPrivateKeyPem ()[B
11+
public fun <init> ([B[B)V
12+
public final fun getCertificatePem ()[B
13+
public final fun getPrivateKeyPem ()[B
1414
}
1515

1616
public final class io/opentelemetry/android/agent/connectivity/Compression : java/lang/Enum {
17-
public static final field GZIP Lio/opentelemetry/android/agent/connectivity/Compression;
18-
public static final field NONE Lio/opentelemetry/android/agent/connectivity/Compression;
19-
public static fun getEntries ()Lkotlin/enums/EnumEntries;
20-
public static fun valueOf (Ljava/lang/String;)Lio/opentelemetry/android/agent/connectivity/Compression;
21-
public static fun values ()[Lio/opentelemetry/android/agent/connectivity/Compression;
17+
public static final field GZIP Lio/opentelemetry/android/agent/connectivity/Compression;
18+
public static final field NONE Lio/opentelemetry/android/agent/connectivity/Compression;
19+
public static fun getEntries ()Lkotlin/enums/EnumEntries;
20+
public static fun valueOf (Ljava/lang/String;)Lio/opentelemetry/android/agent/connectivity/Compression;
21+
public static fun values ()[Lio/opentelemetry/android/agent/connectivity/Compression;
2222
}
2323

2424
public final class io/opentelemetry/android/agent/connectivity/SSLContextConnectivity {
25-
public fun <init> (Ljavax/net/ssl/SSLContext;Ljavax/net/ssl/X509TrustManager;)V
26-
public final fun getSslContext ()Ljavax/net/ssl/SSLContext;
27-
public final fun getSslX509TrustManager ()Ljavax/net/ssl/X509TrustManager;
25+
public fun <init> (Ljavax/net/ssl/SSLContext;Ljavax/net/ssl/X509TrustManager;)V
26+
public final fun getSslContext ()Ljavax/net/ssl/SSLContext;
27+
public final fun getSslX509TrustManager ()Ljavax/net/ssl/X509TrustManager;
2828
}
2929

3030
public final class io/opentelemetry/android/agent/dsl/DiskBufferingConfigurationSpec : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled {
31-
public fun enabled (Z)V
31+
public fun enabled (Z)V
3232
}
3333

3434
public final class io/opentelemetry/android/agent/dsl/EndpointConfiguration {
35-
public final fun getCompression ()Lio/opentelemetry/android/agent/connectivity/Compression;
36-
public final fun getHeaders ()Ljava/util/Map;
37-
public final fun getUrl ()Ljava/lang/String;
38-
public final fun setCompression (Lio/opentelemetry/android/agent/connectivity/Compression;)V
39-
public final fun setHeaders (Ljava/util/Map;)V
40-
public final fun setUrl (Ljava/lang/String;)V
35+
public final fun getCompression ()Lio/opentelemetry/android/agent/connectivity/Compression;
36+
public final fun getFullUrl ()Ljava/lang/String;
37+
public final fun getHeaders ()Ljava/util/Map;
38+
public final fun getUrl ()Ljava/lang/String;
39+
public final fun setCompression (Lio/opentelemetry/android/agent/connectivity/Compression;)V
40+
public final fun setFullUrl (Ljava/lang/String;)V
41+
public final fun setHeaders (Ljava/util/Map;)V
42+
public final fun setUrl (Ljava/lang/String;)V
4143
}
4244

4345
public final class io/opentelemetry/android/agent/dsl/HttpExportConfiguration {
44-
public final fun getBaseHeaders ()Ljava/util/Map;
45-
public final fun getBaseUrl ()Ljava/lang/String;
46-
public final fun getClientTls ()Lio/opentelemetry/android/agent/connectivity/ClientTlsConnectivity;
47-
public final fun getCompression ()Lio/opentelemetry/android/agent/connectivity/Compression;
48-
public final fun getSslContext ()Lio/opentelemetry/android/agent/connectivity/SSLContextConnectivity;
49-
public final fun logs (Lkotlin/jvm/functions/Function1;)V
50-
public final fun metrics (Lkotlin/jvm/functions/Function1;)V
51-
public final fun setBaseHeaders (Ljava/util/Map;)V
52-
public final fun setBaseUrl (Ljava/lang/String;)V
53-
public final fun setClientTls (Lio/opentelemetry/android/agent/connectivity/ClientTlsConnectivity;)V
54-
public final fun setCompression (Lio/opentelemetry/android/agent/connectivity/Compression;)V
55-
public final fun setSslContext (Lio/opentelemetry/android/agent/connectivity/SSLContextConnectivity;)V
56-
public final fun spans (Lkotlin/jvm/functions/Function1;)V
46+
public final fun getBaseHeaders ()Ljava/util/Map;
47+
public final fun getBaseUrl ()Ljava/lang/String;
48+
public final fun getClientTls ()Lio/opentelemetry/android/agent/connectivity/ClientTlsConnectivity;
49+
public final fun getCompression ()Lio/opentelemetry/android/agent/connectivity/Compression;
50+
public final fun getSslContext ()Lio/opentelemetry/android/agent/connectivity/SSLContextConnectivity;
51+
public final fun logs (Lkotlin/jvm/functions/Function1;)V
52+
public final fun metrics (Lkotlin/jvm/functions/Function1;)V
53+
public final fun setBaseHeaders (Ljava/util/Map;)V
54+
public final fun setBaseUrl (Ljava/lang/String;)V
55+
public final fun setClientTls (Lio/opentelemetry/android/agent/connectivity/ClientTlsConnectivity;)V
56+
public final fun setCompression (Lio/opentelemetry/android/agent/connectivity/Compression;)V
57+
public final fun setSslContext (Lio/opentelemetry/android/agent/connectivity/SSLContextConnectivity;)V
58+
public final fun spans (Lkotlin/jvm/functions/Function1;)V
5759
}
5860

5961
public final class io/opentelemetry/android/agent/dsl/OpenTelemetryConfiguration {
60-
public final fun diskBuffering (Lkotlin/jvm/functions/Function1;)V
61-
public final fun getClock ()Lio/opentelemetry/sdk/common/Clock;
62-
public final fun globalAttributes (Lkotlin/jvm/functions/Function0;)V
63-
public final fun globalAttributesSupplier (Lkotlin/jvm/functions/Function0;)V
64-
public final fun httpExport (Lkotlin/jvm/functions/Function1;)V
65-
public final fun instrumentations (Lkotlin/jvm/functions/Function1;)V
66-
public final fun resource (Lkotlin/jvm/functions/Function1;)V
67-
public final fun session (Lkotlin/jvm/functions/Function1;)V
68-
public final fun setClock (Lio/opentelemetry/sdk/common/Clock;)V
62+
public final fun diskBuffering (Lkotlin/jvm/functions/Function1;)V
63+
public final fun getClock ()Lio/opentelemetry/sdk/common/Clock;
64+
public final fun globalAttributes (Lkotlin/jvm/functions/Function0;)V
65+
public final fun globalAttributesSupplier (Lkotlin/jvm/functions/Function0;)V
66+
public final fun httpExport (Lkotlin/jvm/functions/Function1;)V
67+
public final fun instrumentations (Lkotlin/jvm/functions/Function1;)V
68+
public final fun resource (Lkotlin/jvm/functions/Function1;)V
69+
public final fun session (Lkotlin/jvm/functions/Function1;)V
70+
public final fun setClock (Lio/opentelemetry/sdk/common/Clock;)V
6971
}
7072

7173
public final class io/opentelemetry/android/agent/dsl/SessionConfiguration {
72-
public final fun getBackgroundInactivityTimeout-UwyO8pc ()J
73-
public final fun getMaxLifetime-UwyO8pc ()J
74-
public final fun setBackgroundInactivityTimeout-LRDsOJo (J)V
75-
public final fun setMaxLifetime-LRDsOJo (J)V
74+
public final fun getBackgroundInactivityTimeout-UwyO8pc ()J
75+
public final fun getMaxLifetime-UwyO8pc ()J
76+
public final fun setBackgroundInactivityTimeout-LRDsOJo (J)V
77+
public final fun setMaxLifetime-LRDsOJo (J)V
7678
}
7779

7880
public final class io/opentelemetry/android/agent/dsl/instrumentation/ActivityLifecycleConfiguration : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled, io/opentelemetry/android/agent/dsl/instrumentation/ScreenLifecycleConfigurable {
79-
public fun enabled (Z)V
80-
public fun screenNameExtractor (Lio/opentelemetry/android/instrumentation/common/ScreenNameExtractor;)V
81-
public fun tracerCustomizer (Lkotlin/jvm/functions/Function1;)V
81+
public fun enabled (Z)V
82+
public fun screenNameExtractor (Lio/opentelemetry/android/instrumentation/common/ScreenNameExtractor;)V
83+
public fun tracerCustomizer (Lkotlin/jvm/functions/Function1;)V
8284
}
8385

8486
public final class io/opentelemetry/android/agent/dsl/instrumentation/AnrReporterConfiguration : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled, io/opentelemetry/android/agent/dsl/instrumentation/WithEventAttributes {
85-
public fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/common/EventAttributesExtractor;)V
86-
public fun enabled (Z)V
87+
public fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/common/EventAttributesExtractor;)V
88+
public fun enabled (Z)V
8789
}
8890

8991
public final class io/opentelemetry/android/agent/dsl/instrumentation/CrashReporterConfiguration : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled, io/opentelemetry/android/agent/dsl/instrumentation/WithEventAttributes {
90-
public fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/common/EventAttributesExtractor;)V
91-
public fun enabled (Z)V
92+
public fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/common/EventAttributesExtractor;)V
93+
public fun enabled (Z)V
9294
}
9395

9496
public final class io/opentelemetry/android/agent/dsl/instrumentation/FragmentLifecycleConfiguration : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled, io/opentelemetry/android/agent/dsl/instrumentation/ScreenLifecycleConfigurable {
95-
public fun enabled (Z)V
96-
public fun screenNameExtractor (Lio/opentelemetry/android/instrumentation/common/ScreenNameExtractor;)V
97-
public fun tracerCustomizer (Lkotlin/jvm/functions/Function1;)V
97+
public fun enabled (Z)V
98+
public fun screenNameExtractor (Lio/opentelemetry/android/instrumentation/common/ScreenNameExtractor;)V
99+
public fun tracerCustomizer (Lkotlin/jvm/functions/Function1;)V
98100
}
99101

100102
public final class io/opentelemetry/android/agent/dsl/instrumentation/InstrumentationConfiguration {
101-
public final fun activity (Lkotlin/jvm/functions/Function1;)V
102-
public final fun anrReporter (Lkotlin/jvm/functions/Function1;)V
103-
public final fun crashReporter (Lkotlin/jvm/functions/Function1;)V
104-
public final fun fragment (Lkotlin/jvm/functions/Function1;)V
105-
public final fun networkMonitoring (Lkotlin/jvm/functions/Function1;)V
106-
public final fun screenOrientation (Lkotlin/jvm/functions/Function1;)V
107-
public final fun slowRenderingReporter (Lkotlin/jvm/functions/Function1;)V
103+
public final fun activity (Lkotlin/jvm/functions/Function1;)V
104+
public final fun anrReporter (Lkotlin/jvm/functions/Function1;)V
105+
public final fun crashReporter (Lkotlin/jvm/functions/Function1;)V
106+
public final fun fragment (Lkotlin/jvm/functions/Function1;)V
107+
public final fun networkMonitoring (Lkotlin/jvm/functions/Function1;)V
108+
public final fun screenOrientation (Lkotlin/jvm/functions/Function1;)V
109+
public final fun slowRenderingReporter (Lkotlin/jvm/functions/Function1;)V
108110
}
109111

110112
public final class io/opentelemetry/android/agent/dsl/instrumentation/NetworkMonitoringConfiguration : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled {
111-
public final fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/network/NetworkAttributesExtractor;)V
112-
public fun enabled (Z)V
113+
public final fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/network/NetworkAttributesExtractor;)V
114+
public fun enabled (Z)V
113115
}
114116

115117
public final class io/opentelemetry/android/agent/dsl/instrumentation/ScreenOrientationConfiguration : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled {
116-
public fun enabled (Z)V
118+
public fun enabled (Z)V
117119
}
118120

119121
public final class io/opentelemetry/android/agent/dsl/instrumentation/SlowRenderingReporterConfiguration : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled {
120-
public final fun detectionPollInterval-LRDsOJo (J)V
121-
public final fun enableVerboseDebugLogging ()V
122-
public fun enabled (Z)V
123-
}
124-
122+
public final fun detectionPollInterval-LRDsOJo (J)V
123+
public final fun enableVerboseDebugLogging ()V
124+
public fun enabled (Z)V
125+
}

android-agent/src/main/kotlin/io/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity.kt

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,67 +2,68 @@
22
* Copyright The OpenTelemetry Authors
33
* SPDX-License-Identifier: Apache-2.0
44
*/
5-
65
package io.opentelemetry.android.agent.connectivity
76

87
internal class HttpEndpointConnectivity private constructor(
98
private val url: String,
109
private val headers: Map<String, String>,
1110
private val compression: Compression,
1211
private val sslContext: SSLContextConnectivity?,
13-
private val clientTls: ClientTlsConnectivity? = null
12+
private val clientTls: ClientTlsConnectivity? = null,
1413
) : EndpointConnectivity {
1514
companion object {
1615
fun forTraces(
1716
baseUrl: String,
17+
fullUrl: Boolean = false,
1818
headers: Map<String, String>,
1919
compression: Compression,
2020
sslContext: SSLContextConnectivity?,
21-
clientTls: ClientTlsConnectivity?
22-
): HttpEndpointConnectivity = HttpEndpointConnectivity(
23-
baseUrl.trimEnd('/') + "/v1/traces",
24-
headers,
25-
compression,
26-
sslContext,
27-
clientTls
28-
)
21+
clientTls: ClientTlsConnectivity?,
22+
): HttpEndpointConnectivity =
23+
HttpEndpointConnectivity(
24+
if (fullUrl) baseUrl else baseUrl.trimEnd('/') + "/v1/traces",
25+
headers,
26+
compression,
27+
sslContext,
28+
clientTls,
29+
)
2930

3031
fun forLogs(
3132
baseUrl: String,
33+
fullUrl: Boolean = false,
3234
headers: Map<String, String>,
3335
compression: Compression,
3436
sslContext: SSLContextConnectivity?,
35-
clientTls: ClientTlsConnectivity?
36-
): HttpEndpointConnectivity = HttpEndpointConnectivity(
37-
baseUrl.trimEnd('/') + "/v1/logs",
38-
headers,
39-
compression,
40-
sslContext,
41-
clientTls
42-
)
37+
clientTls: ClientTlsConnectivity?,
38+
): HttpEndpointConnectivity =
39+
HttpEndpointConnectivity(
40+
if (fullUrl) baseUrl else baseUrl.trimEnd('/') + "/v1/logs",
41+
headers,
42+
compression,
43+
sslContext,
44+
clientTls,
45+
)
4346

4447
fun forMetrics(
4548
baseUrl: String,
49+
fullUrl: Boolean = false,
4650
headers: Map<String, String>,
4751
compression: Compression,
4852
sslContext: SSLContextConnectivity?,
49-
clientTls: ClientTlsConnectivity?
50-
): HttpEndpointConnectivity = HttpEndpointConnectivity(
51-
baseUrl.trimEnd('/') + "/v1/metrics",
52-
headers,
53-
compression,
54-
sslContext,
55-
clientTls
56-
)
53+
clientTls: ClientTlsConnectivity?,
54+
): HttpEndpointConnectivity =
55+
HttpEndpointConnectivity(
56+
if (fullUrl) baseUrl else baseUrl.trimEnd('/') + "/v1/metrics",
57+
headers,
58+
compression,
59+
sslContext,
60+
clientTls,
61+
)
5762
}
5863

5964
override fun getUrl(): String = url
60-
6165
override fun getHeaders(): Map<String, String> = headers
62-
6366
override fun getCompression(): Compression = compression
64-
6567
override fun getSslContext(): SSLContextConnectivity? = sslContext
66-
6768
override fun getClientTls(): ClientTlsConnectivity? = clientTls
6869
}

android-agent/src/main/kotlin/io/opentelemetry/android/agent/dsl/EndpointConfiguration.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
* Copyright The OpenTelemetry Authors
33
* SPDX-License-Identifier: Apache-2.0
44
*/
5-
65
package io.opentelemetry.android.agent.dsl
76

87
import io.opentelemetry.android.agent.connectivity.Compression
@@ -13,9 +12,16 @@ import io.opentelemetry.android.agent.connectivity.Compression
1312
@OpenTelemetryDslMarker
1413
class EndpointConfiguration internal constructor(
1514
/**
16-
* URL for HTTP export requests.
15+
* Base URL for HTTP export requests. The signal-specific path (e.g. /v1/logs) will be
16+
* appended automatically.
1717
*/
1818
var url: String,
19+
/**
20+
* Full URL for HTTP export requests. When set, this URL is used as-is without appending
21+
* any signal-specific path. Use this to specify a completely custom endpoint path,
22+
* for example "https://example.com/v2/logs".
23+
*/
24+
var fullUrl: String? = null,
1925
/**
2026
* Headers that should be attached to HTTP export requests.
2127
*/

android-agent/src/main/kotlin/io/opentelemetry/android/agent/dsl/HttpExportConfiguration.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
* Copyright The OpenTelemetry Authors
33
* SPDX-License-Identifier: Apache-2.0
44
*/
5-
65
package io.opentelemetry.android.agent.dsl
76

87
import io.opentelemetry.android.Incubating
@@ -50,33 +49,40 @@ class HttpExportConfiguration internal constructor() {
5049
internal fun spansEndpoint(): HttpEndpointConnectivity =
5150
HttpEndpointConnectivity.forTraces(
5251
chooseUrlSource(spansConfig),
52+
isFullUrl(spansConfig),
5353
spansConfig.headers + baseHeaders,
5454
chooseCompression(spansConfig.compression),
5555
sslContext,
56-
clientTls
56+
clientTls,
5757
)
5858

5959
internal fun logsEndpoint(): HttpEndpointConnectivity =
6060
HttpEndpointConnectivity.forLogs(
6161
chooseUrlSource(logsConfig),
62+
isFullUrl(logsConfig),
6263
logsConfig.headers + baseHeaders,
6364
chooseCompression(logsConfig.compression),
6465
sslContext,
65-
clientTls
66+
clientTls,
6667
)
6768

6869
internal fun metricsEndpoint(): HttpEndpointConnectivity =
6970
HttpEndpointConnectivity.forMetrics(
7071
chooseUrlSource(metricsConfig),
72+
isFullUrl(metricsConfig),
7173
metricsConfig.headers + baseHeaders,
7274
chooseCompression(metricsConfig.compression),
7375
sslContext,
74-
clientTls
76+
clientTls,
7577
)
7678

77-
private fun chooseUrlSource(cfg: EndpointConfiguration): String = cfg.url.ifBlank { baseUrl }
79+
private fun chooseUrlSource(cfg: EndpointConfiguration): String =
80+
cfg.fullUrl ?: cfg.url.ifBlank { baseUrl }
81+
82+
private fun isFullUrl(cfg: EndpointConfiguration): Boolean = cfg.fullUrl != null
7883

79-
private fun chooseCompression(signalConfigCompression: Compression?): Compression = signalConfigCompression ?: this.compression
84+
private fun chooseCompression(signalConfigCompression: Compression?): Compression =
85+
signalConfigCompression ?: this.compression
8086

8187
/**
8288
* Override the default configuration for the v1/traces endpoint only.

0 commit comments

Comments
 (0)