From a00d01d9054cb3f82331c4ba9aeaa41fdfc562cc Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Tue, 29 Oct 2024 12:40:55 +0200 Subject: [PATCH] Ktor2 http client uses low level instrumentation --- .../ktor/v2_0/client/KtorClientTracing.kt | 9 +++++++++ .../ktor/v2_0/client/AbstractKtorHttpClientTest.kt | 5 ++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracing.kt b/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracing.kt index 421a642ac87d..25ab52608eea 100644 --- a/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracing.kt +++ b/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracing.kt @@ -16,6 +16,7 @@ import io.opentelemetry.context.Context import io.opentelemetry.context.propagation.ContextPropagators import io.opentelemetry.extension.kotlin.asContextElement import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter +import io.opentelemetry.instrumentation.api.semconv.http.HttpClientRequestResendCount import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.job import kotlinx.coroutines.launch @@ -63,6 +64,14 @@ class KtorClientTracing internal constructor( } private fun installSpanCreation(plugin: KtorClientTracing, scope: HttpClient) { + val initializeRequestPhase = PipelinePhase("OpenTelemetryInitializeRequest") + scope.requestPipeline.insertPhaseAfter(HttpRequestPipeline.State, initializeRequestPhase) + + scope.requestPipeline.intercept(initializeRequestPhase) { + val openTelemetryContext = HttpClientRequestResendCount.initialize(Context.current()) + withContext(openTelemetryContext.asContextElement()) { proceed() } + } + val createSpanPhase = PipelinePhase("OpenTelemetryCreateSpan") scope.sendPipeline.insertPhaseAfter(HttpSendPipeline.State, createSpanPhase) diff --git a/instrumentation/ktor/ktor-2.0/testing/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/AbstractKtorHttpClientTest.kt b/instrumentation/ktor/ktor-2.0/testing/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/AbstractKtorHttpClientTest.kt index 7bc94ae41208..5d7619dcf3a7 100644 --- a/instrumentation/ktor/ktor-2.0/testing/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/AbstractKtorHttpClientTest.kt +++ b/instrumentation/ktor/ktor-2.0/testing/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/AbstractKtorHttpClientTest.kt @@ -60,9 +60,8 @@ abstract class AbstractKtorHttpClientTest : AbstractHttpClientTest