From de269fa7218bdcf98e1ab361c37d0fed5e9ae382 Mon Sep 17 00:00:00 2001 From: Chris Danis Date: Thu, 19 Dec 2024 17:24:32 -0500 Subject: Setup: parse incoming traceparent header If present and valid, connect our root span to the input parent span. Bug: T340552 Change-Id: I3530c3b6be95c7b4a8960ad25929f795c4514db0 --- includes/Setup.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'includes/Setup.php') diff --git a/includes/Setup.php b/includes/Setup.php index ec6ba6e9c1f3..e40056e9aca2 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -78,6 +78,7 @@ use MediaWiki\Title\Title; use MediaWiki\User\User; use Psr\Log\LoggerInterface; use Wikimedia\RequestTimeout\RequestTimeout; +use Wikimedia\Telemetry\SpanContext; use Wikimedia\Telemetry\SpanInterface; use Wikimedia\Telemetry\TracerState; @@ -346,9 +347,13 @@ call_user_func( static function (): void { // Avoid high cardinality URL path as root span name, instead safely use the HTTP method. // Per OTEL Semantic Conventions, https://opentelemetry.io/docs/specs/semconv/http/http-spans/ $spanName = $request->getMethod(); - $rootSpan = - $tracer->createRootSpan( $spanName ) - ->setSpanKind( SpanInterface::SPAN_KIND_SERVER ) + $incomingSpanContext = SpanContext::newFromTraceparentHeader( $request->getHeader( 'traceparent' ) ); + if ( $incomingSpanContext ) { + $rootSpan = $tracer->createSpanWithParent( $spanName, $incomingSpanContext ); + } else { + $rootSpan = $tracer->createRootSpan( $spanName ); + } + $rootSpan->setSpanKind( SpanInterface::SPAN_KIND_SERVER ) ->setAttributes( array_filter( [ 'http.request.method' => $request->getMethod(), 'url.path' => $request->getRequestURL(), -- cgit v1.2.3