Skip to content

Commit be3676b

Browse files
committed
Add traceheader to integrattions, address feedback
1 parent 33b23dc commit be3676b

File tree

13 files changed

+106
-42
lines changed

13 files changed

+106
-42
lines changed

sentry-apollo-3/src/main/java/io/sentry/apollo3/SentryApollo3HttpInterceptor.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ constructor(
132132
.toMutableList()
133133
.apply { add(HttpHeader(baggageHeader.name, baggageHeader.value)) }
134134
}
135+
it.w3cTraceparentHeader?.let { w3cHeader ->
136+
cleanedHeaders.add(HttpHeader(w3cHeader.name, w3cHeader.value))
137+
}
135138
}
136139
}
137140

sentry-apollo-4/src/main/java/io/sentry/apollo4/SentryApollo4HttpInterceptor.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ constructor(
132132
.toMutableList()
133133
.apply { add(HttpHeader(baggageHeader.name, baggageHeader.value)) }
134134
}
135+
it.w3cTraceparentHeader?.let { w3cHeader ->
136+
cleanedHeaders.add(HttpHeader(w3cHeader.name, w3cHeader.value))
137+
}
135138
}
136139
}
137140

sentry-ktor-client/src/main/java/io/sentry/ktorClient/SentryKtorClientPlugin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ public val SentryKtorClientPlugin: ClientPlugin<SentryKtorClientPluginConfig> =
137137
request.headers.remove(BaggageHeader.BAGGAGE_HEADER)
138138
request.headers[it.name] = it.value
139139
}
140+
tracingHeaders.w3cTraceparentHeader?.let {
141+
request.headers[it.name] = it.value
142+
}
140143
}
141144
}
142145
}

sentry-okhttp/src/main/java/io/sentry/okhttp/SentryOkHttpInterceptor.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ public open class SentryOkHttpInterceptor(
116116
requestBuilder.removeHeader(BaggageHeader.BAGGAGE_HEADER)
117117
requestBuilder.addHeader(it.name, it.value)
118118
}
119+
tracingHeaders.w3cTraceparentHeader?.let {
120+
requestBuilder.addHeader(it.name, it.value)
121+
}
119122
}
120123
}
121124

sentry-okhttp/src/test/java/io/sentry/okhttp/SentryOkHttpInterceptorTest.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,4 +645,40 @@ class SentryOkHttpInterceptorTest {
645645
val okHttpEvent = SentryOkHttpEventListener.eventMap[call]!!
646646
assertTrue(okHttpEvent.isEventFinished.get())
647647
}
648+
649+
@Test
650+
fun `adds W3C traceparent header when propagateTraceparent is enabled`() {
651+
val client = fixture.getSut(
652+
optionsConfiguration = Sentry.OptionsConfiguration { it.isPropagateTraceparent = true }
653+
)
654+
655+
fixture.server.enqueue(MockResponse().setResponseCode(200))
656+
657+
val request = getRequest("/test")
658+
client.newCall(request).execute()
659+
660+
val recordedRequest = fixture.server.takeRequest()
661+
assertNotNull(recordedRequest.getHeader("sentry-trace"))
662+
assertNotNull(recordedRequest.getHeader("traceparent"))
663+
664+
val traceparent = recordedRequest.getHeader("traceparent")!!
665+
assertTrue(traceparent.startsWith("00-"))
666+
assertEquals(4, traceparent.split("-").size)
667+
}
668+
669+
@Test
670+
fun `does not add W3C traceparent header when propagateTraceparent is disabled`() {
671+
val client = fixture.getSut(
672+
optionsConfiguration = Sentry.OptionsConfiguration { it.isPropagateTraceparent = false }
673+
)
674+
675+
fixture.server.enqueue(MockResponse().setResponseCode(200))
676+
677+
val request = getRequest("/test")
678+
client.newCall(request).execute()
679+
680+
val recordedRequest = fixture.server.takeRequest()
681+
assertNotNull(recordedRequest.getHeader("sentry-trace"))
682+
assertNull(recordedRequest.getHeader("traceparent"))
683+
}
648684
}

sentry-openfeign/src/main/java/io/sentry/openfeign/SentryFeignClient.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.sentry.SpanDataConvention;
1818
import io.sentry.SpanOptions;
1919
import io.sentry.SpanStatus;
20+
import io.sentry.W3CTraceparentHeader;
2021
import io.sentry.util.Objects;
2122
import io.sentry.util.SpanUtils;
2223
import io.sentry.util.TracingUtils;
@@ -137,6 +138,11 @@ public Response execute(final @NotNull Request request, final @NotNull Request.O
137138
requestWrapper.removeHeader(BaggageHeader.BAGGAGE_HEADER);
138139
requestWrapper.header(baggageHeader.getName(), baggageHeader.getValue());
139140
}
141+
142+
final @Nullable W3CTraceparentHeader w3cTraceparentHeader = tracingHeaders.getW3cTraceparentHeader();
143+
if (w3cTraceparentHeader != null) {
144+
requestWrapper.header(w3cTraceparentHeader.getName(), w3cTraceparentHeader.getValue());
145+
}
140146
}
141147

142148
return requestWrapper.build();

sentry-spring-7/src/main/java/io/sentry/spring7/tracing/SentrySpanClientHttpRequestInterceptor.java

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

77
import com.jakewharton.nopen.annotation.Open;
88
import io.sentry.BaggageHeader;
9+
import io.sentry.W3CTraceparentHeader;
910
import io.sentry.Breadcrumb;
1011
import io.sentry.Hint;
1112
import io.sentry.IScopes;
@@ -113,6 +114,11 @@ private void maybeAddTracingHeaders(
113114
if (baggageHeader != null) {
114115
request.getHeaders().set(baggageHeader.getName(), baggageHeader.getValue());
115116
}
117+
118+
final @Nullable W3CTraceparentHeader w3cTraceparentHeader = tracingHeaders.getW3cTraceparentHeader();
119+
if (w3cTraceparentHeader != null) {
120+
request.getHeaders().add(w3cTraceparentHeader.getName(), w3cTraceparentHeader.getValue());
121+
}
116122
}
117123
}
118124

sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/tracing/SentrySpanClientHttpRequestInterceptor.java

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

77
import com.jakewharton.nopen.annotation.Open;
88
import io.sentry.BaggageHeader;
9+
import io.sentry.W3CTraceparentHeader;
910
import io.sentry.Breadcrumb;
1011
import io.sentry.Hint;
1112
import io.sentry.IScopes;
@@ -113,6 +114,11 @@ private void maybeAddTracingHeaders(
113114
if (baggageHeader != null) {
114115
request.getHeaders().set(baggageHeader.getName(), baggageHeader.getValue());
115116
}
117+
118+
final @Nullable W3CTraceparentHeader w3cTraceparentHeader = tracingHeaders.getW3cTraceparentHeader();
119+
if (w3cTraceparentHeader != null) {
120+
request.getHeaders().add(w3cTraceparentHeader.getName(), w3cTraceparentHeader.getValue());
121+
}
116122
}
117123
}
118124

sentry-spring/src/main/java/io/sentry/spring/tracing/SentrySpanClientHttpRequestInterceptor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.sentry.SpanDataConvention;
1414
import io.sentry.SpanOptions;
1515
import io.sentry.SpanStatus;
16+
import io.sentry.W3CTraceparentHeader;
1617
import io.sentry.util.Objects;
1718
import io.sentry.util.SpanUtils;
1819
import io.sentry.util.TracingUtils;
@@ -105,6 +106,11 @@ private void maybeAddTracingHeaders(
105106
if (baggageHeader != null) {
106107
request.getHeaders().set(baggageHeader.getName(), baggageHeader.getValue());
107108
}
109+
110+
final @Nullable W3CTraceparentHeader w3cTraceparentHeader = tracingHeaders.getW3cTraceparentHeader();
111+
if (w3cTraceparentHeader != null) {
112+
request.getHeaders().add(w3cTraceparentHeader.getName(), w3cTraceparentHeader.getValue());
113+
}
108114
}
109115
}
110116

sentry/api/sentry.api

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4328,10 +4328,7 @@ public final class io/sentry/W3CTraceparentHeader {
43284328
public static final field TRACEPARENT_HEADER Ljava/lang/String;
43294329
public fun <init> (Lio/sentry/protocol/SentryId;Lio/sentry/SpanId;Ljava/lang/Boolean;)V
43304330
public fun getName ()Ljava/lang/String;
4331-
public fun getSpanId ()Lio/sentry/SpanId;
4332-
public fun getTraceId ()Lio/sentry/protocol/SentryId;
43334331
public fun getValue ()Ljava/lang/String;
4334-
public fun isSampled ()Ljava/lang/Boolean;
43354332
}
43364333

43374334
public final class io/sentry/backpressure/BackpressureMonitor : io/sentry/backpressure/IBackpressureMonitor, java/lang/Runnable {

0 commit comments

Comments
 (0)