From 3560255e8da5006a4b647980c6c4bce7ee0d7679 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Sun, 12 Oct 2025 20:47:47 +0800 Subject: [PATCH] refactor(sentry): centralize trace header constants for improved maintainability Extract hardcoded trace header strings ('sentry-trace', 'baggage', 'traceparent') into Constants class to improve code maintainability and consistency across the Sentry tracing implementation. --- src/sentry/src/Constants.php | 6 +++++ src/sentry/src/Tracing/Aspect/GrpcAspect.php | 6 ++--- .../Tracing/Aspect/GuzzleHttpClientAspect.php | 6 ++--- src/sentry/src/Tracing/Aspect/RpcAspect.php | 7 ++--- src/sentry/src/Util/Carrier.php | 27 +++++++++---------- src/sentry/src/Util/CarrierPacker.php | 13 ++++----- 6 files changed, 36 insertions(+), 29 deletions(-) diff --git a/src/sentry/src/Constants.php b/src/sentry/src/Constants.php index 2fca23472..0fbd4bf30 100644 --- a/src/sentry/src/Constants.php +++ b/src/sentry/src/Constants.php @@ -18,4 +18,10 @@ class Constants public const CRON_CHECKIN_ID = 'sentry.crons.checkin_id'; public const DISABLE_COROUTINE_TRACING = 'sentry.tracing.disable_coroutine_tracing'; + + public const SENTRY_TRACE = 'sentry-trace'; + + public const BAGGAGE = 'baggage'; + + public const TRACEPARENT = 'traceparent'; } diff --git a/src/sentry/src/Tracing/Aspect/GrpcAspect.php b/src/sentry/src/Tracing/Aspect/GrpcAspect.php index 5693a60fc..16789aa90 100644 --- a/src/sentry/src/Tracing/Aspect/GrpcAspect.php +++ b/src/sentry/src/Tracing/Aspect/GrpcAspect.php @@ -11,6 +11,7 @@ namespace FriendsOfHyperf\Sentry\Tracing\Aspect; +use FriendsOfHyperf\Sentry\Constants; use FriendsOfHyperf\Sentry\Feature; use Hyperf\Di\Aop\AbstractAspect; use Hyperf\Di\Aop\ProceedingJoinPoint; @@ -53,9 +54,8 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint) // Inject sentry-trace header for distributed tracing $options['headers'] = ($options['headers'] ?? []) + [ - 'sentry-trace' => $parent->toTraceparent(), - 'baggage' => $parent->toBaggage(), - 'traceparent' => $parent->toW3CTraceparent(), + Constants::SENTRY_TRACE => $parent->toTraceparent(), + Constants::BAGGAGE => $parent->toBaggage(), ]; // Inject tracing headers diff --git a/src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php b/src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php index cb82f9a47..758bd1cbc 100644 --- a/src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php +++ b/src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php @@ -11,6 +11,7 @@ namespace FriendsOfHyperf\Sentry\Tracing\Aspect; +use FriendsOfHyperf\Sentry\Constants; use FriendsOfHyperf\Sentry\Feature; use GuzzleHttp\Client; use GuzzleHttp\TransferStats; @@ -75,9 +76,8 @@ function (Scope $scope) use ($proceedingJoinPoint, $options, $guzzleConfig) { // Inject trace context $options['headers'] = array_replace($options['headers'] ?? [], [ - 'sentry-trace' => $span->toTraceparent(), - 'baggage' => $span->toBaggage(), - 'traceparent' => $span->toW3CTraceparent(), + Constants::BAGGAGE => $span->toBaggage(), + Constants::SENTRY_TRACE => $span->toTraceparent(), ]); // Override the headers diff --git a/src/sentry/src/Tracing/Aspect/RpcAspect.php b/src/sentry/src/Tracing/Aspect/RpcAspect.php index e9f8e02fe..43387230a 100644 --- a/src/sentry/src/Tracing/Aspect/RpcAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcAspect.php @@ -102,13 +102,14 @@ private function handleSend(ProceedingJoinPoint $proceedingJoinPoint) function (Scope $scope) use ($proceedingJoinPoint) { $span = $scope->getSpan(); if ($span && $this->container->has(Rpc\Context::class)) { + $rpcCtx = $this->container->get(Rpc\Context::class); + $carrier = Carrier::fromSpan($span); // Inject the RPC context data into span. $span->setData([ - 'rpc.context' => $this->container->get(Rpc\Context::class)->getData(), + 'rpc.context' => $rpcCtx->getData(), ]); // Inject the tracing carrier into RPC context. - $this->container->get(Rpc\Context::class) - ->set(Constants::TRACE_CARRIER, Carrier::fromSpan($span)->toJson()); + $rpcCtx->set(Constants::TRACE_CARRIER, $carrier->toJson()); } return tap($proceedingJoinPoint->process(), function ($result) use ($span) { if ($span && $this->feature->isTracingExtraTagEnabled('rpc.result')) { diff --git a/src/sentry/src/Util/Carrier.php b/src/sentry/src/Util/Carrier.php index b812755cc..a67f586fa 100644 --- a/src/sentry/src/Util/Carrier.php +++ b/src/sentry/src/Util/Carrier.php @@ -24,9 +24,8 @@ class Carrier implements JsonSerializable, Arrayable, Stringable, Jsonable { - public function __construct( - protected array $data = [] - ) { + public function __construct(protected array $data = []) + { } public function __toString(): string @@ -56,9 +55,9 @@ public static function fromJson(string $json): static public static function fromSpan(Span $span): static { return new static([ - 'sentry-trace' => $span->toTraceparent(), - 'baggage' => $span->toBaggage(), - 'traceparent' => $span->toW3CTraceparent(), + Constants::SENTRY_TRACE => $span->toTraceparent(), + Constants::BAGGAGE => $span->toBaggage(), + Constants::TRACEPARENT => $span->toW3CTraceparent(), ]); } @@ -66,11 +65,11 @@ public static function fromRequest(ServerRequestInterface $request): static { // Get sentry-trace and baggage $sentryTrace = match (true) { - $request->hasHeader('sentry-trace') => $request->getHeaderLine('sentry-trace'), - $request->hasHeader('traceparent') => $request->getHeaderLine('traceparent'), + $request->hasHeader(Constants::SENTRY_TRACE) => $request->getHeaderLine(Constants::SENTRY_TRACE), + $request->hasHeader(Constants::TRACEPARENT) => $request->getHeaderLine(Constants::TRACEPARENT), default => '', }; - $baggage = $request->getHeaderLine('baggage'); + $baggage = $request->getHeaderLine(Constants::BAGGAGE); $container = ApplicationContext::getContainer(); // Rpc Context @@ -85,8 +84,8 @@ public static function fromRequest(ServerRequestInterface $request): static } return new static([ - 'sentry-trace' => $sentryTrace, - 'baggage' => $baggage, + Constants::SENTRY_TRACE => $sentryTrace, + Constants::BAGGAGE => $baggage, ]); } @@ -99,17 +98,17 @@ public function with(array $data): static public function getSentryTrace(): string { - return $this->data['sentry-trace'] ?? ''; + return $this->data[Constants::SENTRY_TRACE] ?? ''; } public function getBaggage(): string { - return $this->data['baggage'] ?? ''; + return $this->data[Constants::BAGGAGE] ?? ''; } public function getTraceparent(): string { - return $this->data['traceparent'] ?? ''; + return $this->data[Constants::TRACEPARENT] ?? ''; } public function has(string $key): bool diff --git a/src/sentry/src/Util/CarrierPacker.php b/src/sentry/src/Util/CarrierPacker.php index 99e0a3af7..57d9ea3fd 100644 --- a/src/sentry/src/Util/CarrierPacker.php +++ b/src/sentry/src/Util/CarrierPacker.php @@ -11,6 +11,7 @@ namespace FriendsOfHyperf\Sentry\Util; +use FriendsOfHyperf\Sentry\Constants; use Sentry\Tracing\Span; use Throwable; @@ -28,9 +29,9 @@ public function unpack(string $data): array $carrier = json_decode($data, true, flags: JSON_THROW_ON_ERROR); return [ - $carrier['sentry-trace'] ?? $carrier['traceparent'] ?? '', - $carrier['baggage'] ?? '', - $carrier['traceparent'] ?? '', + $carrier[Constants::SENTRY_TRACE] ?? $carrier[Constants::TRACEPARENT] ?? '', + $carrier[Constants::BAGGAGE] ?? '', + $carrier[Constants::TRACEPARENT] ?? '', ]; } catch (Throwable) { return ['', '', '']; @@ -40,9 +41,9 @@ public function unpack(string $data): array public function pack(Span $span, array $extra = []): string { return json_encode([ - 'sentry-trace' => $span->toTraceparent(), - 'baggage' => $span->toBaggage(), - 'traceparent' => $span->toW3CTraceparent(), + Constants::SENTRY_TRACE => $span->toTraceparent(), + Constants::BAGGAGE => $span->toBaggage(), + Constants::TRACEPARENT => $span->toW3CTraceparent(), ...$extra, ]); }