From 880b92411ab31bd493813afb28ad13f02befb69f Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Thu, 4 Sep 2025 19:09:12 +0800 Subject: [PATCH] fix(tracing): standardize HTTP response field names in GuzzleHttpClientAspect - Update response field names to follow HTTP semantic conventions - Change response.status to http.response.status_code - Change response.reason to http.response.reason - Change response.headers to http.response.headers - Change response.body.size to http.response.body.size - Change response.body to http.response.body.contents - Update configuration key from response.body to http.response.body.contents - Add proper HTTP status-based span status setting - Improve error handling with standardized field names --- src/sentry/publish/sentry.php | 2 +- .../Tracing/Aspect/GuzzleHttpClientAspect.php | 32 +++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/sentry/publish/sentry.php b/src/sentry/publish/sentry.php index b24dc0b33..c19debaad 100644 --- a/src/sentry/publish/sentry.php +++ b/src/sentry/publish/sentry.php @@ -115,7 +115,7 @@ 'annotation.result' => false, 'db.result' => false, 'elasticsearch.result' => false, - 'response.body' => false, + 'http.response.body.contents' => false, 'redis.result' => false, 'rpc.result' => false, ], diff --git a/src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php b/src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php index bfe9ffdf0..40371ee38 100644 --- a/src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php +++ b/src/sentry/src/Tracing/Aspect/GuzzleHttpClientAspect.php @@ -81,6 +81,7 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint) 'baggage' => $span->toBaggage(), 'traceparent' => $span->toW3CTraceparent(), ]); + // Override the headers $proceedingJoinPoint->arguments['keys']['options']['headers'] = $options['headers']; if (! $span) { @@ -115,22 +116,25 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint) ]; if ($response = $stats->getResponse()) { - $data['response.status'] = $response->getStatusCode(); - $data['response.reason'] = $response->getReasonPhrase(); - $data['response.headers'] = $response->getHeaders(); - $data['response.body.size'] = $response->getBody()->getSize() ?? 0; + $data = array_merge($data, [ + 'http.response.status_code' => $response->getStatusCode(), + 'http.response.reason' => $response->getReasonPhrase(), + 'http.response.headers' => $response->getHeaders(), + 'http.response.body.size' => $response->getBody()->getSize() ?? 0, + ]); - if ($this->switcher->isTracingExtraTagEnable('response.body')) { - $data['response.body'] = $response->getBody()->getContents(); + if ($this->switcher->isTracingExtraTagEnable('http.response.body.contents')) { + $data['http.response.body.contents'] = $response->getBody()->getContents(); $response->getBody()->isSeekable() && $response->getBody()->rewind(); } + $span->setStatus(SpanStatus::createFromHttpStatusCode($response->getStatusCode())); + if ($response->getStatusCode() >= 400 && $response->getStatusCode() < 600) { - $span->setStatus(SpanStatus::internalError()) - ->setTags([ - 'error' => true, - 'response.reason' => $response->getReasonPhrase(), - ]); + $span->setTags([ + 'error' => true, + 'http.response.reason' => $response->getReasonPhrase(), + ]); } } @@ -143,8 +147,10 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint) 'exception.code' => $exception->getCode(), ]); if ($this->switcher->isTracingExtraTagEnable('exception.stack_trace')) { - $data['exception.message'] = $exception->getMessage(); - $data['exception.stack_trace'] = (string) $exception; + $data = array_merge($data, [ + 'exception.message' => $exception->getMessage(), + 'exception.stack_trace' => (string) $exception, + ]); } }