aboutsummaryrefslogtreecommitdiffstats
path: root/includes/Setup.php
diff options
context:
space:
mode:
authorChris Danis <cdanis@wikimedia.org>2024-12-19 17:24:32 -0500
committerChris Danis <cdanis@wikimedia.org>2024-12-20 16:59:12 -0500
commitde269fa7218bdcf98e1ab361c37d0fed5e9ae382 (patch)
tree43156c6d9a1615885f8b9dd01678422d6506fd4b /includes/Setup.php
parent9795a19589cfbfea0b7e65ca528268aa67d63d21 (diff)
downloadmediawikicore-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.php11
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(),