diff options
author | Chris Danis <cdanis@wikimedia.org> | 2024-12-19 17:24:32 -0500 |
---|---|---|
committer | Chris Danis <cdanis@wikimedia.org> | 2024-12-20 16:59:12 -0500 |
commit | de269fa7218bdcf98e1ab361c37d0fed5e9ae382 (patch) | |
tree | 43156c6d9a1615885f8b9dd01678422d6506fd4b /includes/Setup.php | |
parent | 9795a19589cfbfea0b7e65ca528268aa67d63d21 (diff) | |
download | mediawikicore-de269fa7218bdcf98e1ab361c37d0fed5e9ae382.tar.gz mediawikicore-de269fa7218bdcf98e1ab361c37d0fed5e9ae382.zip |
Setup: parse incoming traceparent header
If present and valid, connect our root span to the
input parent span.
Bug: T340552
Change-Id: I3530c3b6be95c7b4a8960ad25929f795c4514db0
Diffstat (limited to 'includes/Setup.php')
-rw-r--r-- | includes/Setup.php | 11 |
1 files changed, 8 insertions, 3 deletions
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(), |