Skip to content

Commit 86ee95c

Browse files
authored
Ktor2 http client uses low level instrumentation (#12530)
1 parent 40640a3 commit 86ee95c

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracing.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import io.opentelemetry.context.Context
1616
import io.opentelemetry.context.propagation.ContextPropagators
1717
import io.opentelemetry.extension.kotlin.asContextElement
1818
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter
19+
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientRequestResendCount
1920
import kotlinx.coroutines.InternalCoroutinesApi
2021
import kotlinx.coroutines.job
2122
import kotlinx.coroutines.launch
@@ -63,6 +64,14 @@ class KtorClientTracing internal constructor(
6364
}
6465

6566
private fun installSpanCreation(plugin: KtorClientTracing, scope: HttpClient) {
67+
val initializeRequestPhase = PipelinePhase("OpenTelemetryInitializeRequest")
68+
scope.requestPipeline.insertPhaseAfter(HttpRequestPipeline.State, initializeRequestPhase)
69+
70+
scope.requestPipeline.intercept(initializeRequestPhase) {
71+
val openTelemetryContext = HttpClientRequestResendCount.initialize(Context.current())
72+
withContext(openTelemetryContext.asContextElement()) { proceed() }
73+
}
74+
6675
val createSpanPhase = PipelinePhase("OpenTelemetryCreateSpan")
6776
scope.sendPipeline.insertPhaseAfter(HttpSendPipeline.State, createSpanPhase)
6877

instrumentation/ktor/ktor-2.0/testing/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/AbstractKtorHttpClientTest.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,8 @@ abstract class AbstractKtorHttpClientTest : AbstractHttpClientTest<HttpRequestBu
6060
override fun configure(optionsBuilder: HttpClientTestOptions.Builder) {
6161
with(optionsBuilder) {
6262
disableTestReadTimeout()
63-
// this instrumentation creates a span per each physical request
64-
// related issue https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/5722
65-
disableTestRedirects()
63+
markAsLowLevelInstrumentation()
64+
setMaxRedirects(20)
6665
spanEndsAfterBody()
6766

6867
setHttpAttributes { DEFAULT_HTTP_ATTRIBUTES - setOf(NetworkAttributes.NETWORK_PROTOCOL_VERSION) }

0 commit comments

Comments
 (0)