From e217702264cce463132f3409fb44cc57322a2e65 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Tue, 18 Nov 2025 18:56:10 +0800 Subject: [PATCH 1/9] fix: allow null socket parameter in SocketOptionContainer get method --- src/sentry/src/ConfigProvider.php | 1 + src/sentry/src/Tracing/Aspect/RpcAspect.php | 26 +++++++++++- .../Tracing/Aspect/SocketFactoryAspect.php | 39 ++++++++++++++++++ src/sentry/src/Util/SocketOptionContainer.php | 41 +++++++++++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/sentry/src/Tracing/Aspect/SocketFactoryAspect.php create mode 100644 src/sentry/src/Util/SocketOptionContainer.php diff --git a/src/sentry/src/ConfigProvider.php b/src/sentry/src/ConfigProvider.php index 82407ec37..df51c4c01 100644 --- a/src/sentry/src/ConfigProvider.php +++ b/src/sentry/src/ConfigProvider.php @@ -39,6 +39,7 @@ public function __invoke(): array Tracing\Aspect\GuzzleHttpClientAspect::class, Tracing\Aspect\KafkaProducerAspect::class, Tracing\Aspect\RpcAspect::class, + Tracing\Aspect\SocketFactoryAspect::class, Tracing\Aspect\RedisAspect::class, Tracing\Aspect\TraceAnnotationAspect::class, Tracing\Aspect\ViewRenderAspect::class, diff --git a/src/sentry/src/Tracing/Aspect/RpcAspect.php b/src/sentry/src/Tracing/Aspect/RpcAspect.php index c3c3077b4..9f2dad1b5 100644 --- a/src/sentry/src/Tracing/Aspect/RpcAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcAspect.php @@ -14,11 +14,17 @@ use FriendsOfHyperf\Sentry\Constants; use FriendsOfHyperf\Sentry\Feature; use FriendsOfHyperf\Sentry\Util\Carrier; +use FriendsOfHyperf\Sentry\Util\SocketOptionContainer; use Hyperf\Context\Context; use Hyperf\Contract\ConfigInterface; use Hyperf\Di\Aop\AbstractAspect; use Hyperf\Di\Aop\ProceedingJoinPoint; +use Hyperf\Engine\Contract\Socket\SocketOptionInterface; +use Hyperf\Engine\Contract\SocketInterface; +use Hyperf\JsonRpc\JsonRpcPoolTransporter; +use Hyperf\JsonRpc\Pool\RpcConnection; use Hyperf\Rpc; +use Hyperf\Rpc\Contract\TransporterInterface; use Hyperf\RpcClient; use Hyperf\Stringable\Str; use Psr\Container\ContainerInterface; @@ -97,9 +103,25 @@ private function handleSend(ProceedingJoinPoint $proceedingJoinPoint) return $proceedingJoinPoint->process(); } + /** @var null|TransporterInterface $transporter */ + $transporter = $proceedingJoinPoint->getInstance()->getTransporter(); + /** @var null|SocketOptionInterface $socketOptions */ + $socketOptions = null; + + if ($transporter instanceof JsonRpcPoolTransporter) { + $contextId = spl_object_hash($transporter) . '.Connection'; + /** @var null|RpcConnection $connection */ + $connection = Context::get($contextId); + if ($connection instanceof RpcConnection) { + /** @var null|SocketInterface $socket */ + $socket = (fn () => $this->connection ?? null)->call($connection); + $socketOptions = SocketOptionContainer::get($socket); + } + } + try { return trace( - function (Scope $scope) use ($proceedingJoinPoint) { + function (Scope $scope) use ($proceedingJoinPoint, $socketOptions) { $span = $scope->getSpan(); if ($span && $this->container->has(Rpc\Context::class)) { $rpcCtx = $this->container->get(Rpc\Context::class); @@ -107,6 +129,8 @@ function (Scope $scope) use ($proceedingJoinPoint) { // Inject the RPC context data into span. $span->setData([ 'rpc.context' => $rpcCtx->getData(), + 'server.address' => $socketOptions?->getHost(), + 'server.port' => $socketOptions?->getPort(), ]); // Inject the tracing carrier into RPC context. $rpcCtx->set(Constants::TRACE_CARRIER, $carrier->toJson()); diff --git a/src/sentry/src/Tracing/Aspect/SocketFactoryAspect.php b/src/sentry/src/Tracing/Aspect/SocketFactoryAspect.php new file mode 100644 index 000000000..22ba5705a --- /dev/null +++ b/src/sentry/src/Tracing/Aspect/SocketFactoryAspect.php @@ -0,0 +1,39 @@ +process(), function ($socket) use ($proceedingJoinPoint) { + $arguments = $proceedingJoinPoint->arguments['keys'] ?? []; + /** @var null|SocketOptionInterface $options */ + $options = $arguments['option'] ?? null; + if ($options instanceof SocketOptionInterface && $socket instanceof SocketInterface) { + SocketOptionContainer::set($socket, $options); + } + }); + } +} diff --git a/src/sentry/src/Util/SocketOptionContainer.php b/src/sentry/src/Util/SocketOptionContainer.php new file mode 100644 index 000000000..3ad3cb780 --- /dev/null +++ b/src/sentry/src/Util/SocketOptionContainer.php @@ -0,0 +1,41 @@ + + */ + private static ?WeakMap $map = null; + + public static function set(SocketInterface $socket, SocketOptionInterface $option): void + { + self::$map ??= new WeakMap(); + self::$map[$socket] = $option; + } + + public static function get(?SocketInterface $socket): ?SocketOptionInterface + { + if ($socket === null) { + return null; + } + + self::$map ??= new WeakMap(); + + return self::$map[$socket] ?? null; + } +} From 5e250eb139df94985d89709ec88425c8a4093844 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:25:04 +0800 Subject: [PATCH 2/9] Revert "fix: allow null socket parameter in SocketOptionContainer get method" This reverts commit e217702264cce463132f3409fb44cc57322a2e65. --- src/sentry/src/ConfigProvider.php | 1 - src/sentry/src/Tracing/Aspect/RpcAspect.php | 26 +----------- .../Tracing/Aspect/SocketFactoryAspect.php | 39 ------------------ src/sentry/src/Util/SocketOptionContainer.php | 41 ------------------- 4 files changed, 1 insertion(+), 106 deletions(-) delete mode 100644 src/sentry/src/Tracing/Aspect/SocketFactoryAspect.php delete mode 100644 src/sentry/src/Util/SocketOptionContainer.php diff --git a/src/sentry/src/ConfigProvider.php b/src/sentry/src/ConfigProvider.php index df51c4c01..82407ec37 100644 --- a/src/sentry/src/ConfigProvider.php +++ b/src/sentry/src/ConfigProvider.php @@ -39,7 +39,6 @@ public function __invoke(): array Tracing\Aspect\GuzzleHttpClientAspect::class, Tracing\Aspect\KafkaProducerAspect::class, Tracing\Aspect\RpcAspect::class, - Tracing\Aspect\SocketFactoryAspect::class, Tracing\Aspect\RedisAspect::class, Tracing\Aspect\TraceAnnotationAspect::class, Tracing\Aspect\ViewRenderAspect::class, diff --git a/src/sentry/src/Tracing/Aspect/RpcAspect.php b/src/sentry/src/Tracing/Aspect/RpcAspect.php index 9f2dad1b5..c3c3077b4 100644 --- a/src/sentry/src/Tracing/Aspect/RpcAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcAspect.php @@ -14,17 +14,11 @@ use FriendsOfHyperf\Sentry\Constants; use FriendsOfHyperf\Sentry\Feature; use FriendsOfHyperf\Sentry\Util\Carrier; -use FriendsOfHyperf\Sentry\Util\SocketOptionContainer; use Hyperf\Context\Context; use Hyperf\Contract\ConfigInterface; use Hyperf\Di\Aop\AbstractAspect; use Hyperf\Di\Aop\ProceedingJoinPoint; -use Hyperf\Engine\Contract\Socket\SocketOptionInterface; -use Hyperf\Engine\Contract\SocketInterface; -use Hyperf\JsonRpc\JsonRpcPoolTransporter; -use Hyperf\JsonRpc\Pool\RpcConnection; use Hyperf\Rpc; -use Hyperf\Rpc\Contract\TransporterInterface; use Hyperf\RpcClient; use Hyperf\Stringable\Str; use Psr\Container\ContainerInterface; @@ -103,25 +97,9 @@ private function handleSend(ProceedingJoinPoint $proceedingJoinPoint) return $proceedingJoinPoint->process(); } - /** @var null|TransporterInterface $transporter */ - $transporter = $proceedingJoinPoint->getInstance()->getTransporter(); - /** @var null|SocketOptionInterface $socketOptions */ - $socketOptions = null; - - if ($transporter instanceof JsonRpcPoolTransporter) { - $contextId = spl_object_hash($transporter) . '.Connection'; - /** @var null|RpcConnection $connection */ - $connection = Context::get($contextId); - if ($connection instanceof RpcConnection) { - /** @var null|SocketInterface $socket */ - $socket = (fn () => $this->connection ?? null)->call($connection); - $socketOptions = SocketOptionContainer::get($socket); - } - } - try { return trace( - function (Scope $scope) use ($proceedingJoinPoint, $socketOptions) { + function (Scope $scope) use ($proceedingJoinPoint) { $span = $scope->getSpan(); if ($span && $this->container->has(Rpc\Context::class)) { $rpcCtx = $this->container->get(Rpc\Context::class); @@ -129,8 +107,6 @@ function (Scope $scope) use ($proceedingJoinPoint, $socketOptions) { // Inject the RPC context data into span. $span->setData([ 'rpc.context' => $rpcCtx->getData(), - 'server.address' => $socketOptions?->getHost(), - 'server.port' => $socketOptions?->getPort(), ]); // Inject the tracing carrier into RPC context. $rpcCtx->set(Constants::TRACE_CARRIER, $carrier->toJson()); diff --git a/src/sentry/src/Tracing/Aspect/SocketFactoryAspect.php b/src/sentry/src/Tracing/Aspect/SocketFactoryAspect.php deleted file mode 100644 index 22ba5705a..000000000 --- a/src/sentry/src/Tracing/Aspect/SocketFactoryAspect.php +++ /dev/null @@ -1,39 +0,0 @@ -process(), function ($socket) use ($proceedingJoinPoint) { - $arguments = $proceedingJoinPoint->arguments['keys'] ?? []; - /** @var null|SocketOptionInterface $options */ - $options = $arguments['option'] ?? null; - if ($options instanceof SocketOptionInterface && $socket instanceof SocketInterface) { - SocketOptionContainer::set($socket, $options); - } - }); - } -} diff --git a/src/sentry/src/Util/SocketOptionContainer.php b/src/sentry/src/Util/SocketOptionContainer.php deleted file mode 100644 index 3ad3cb780..000000000 --- a/src/sentry/src/Util/SocketOptionContainer.php +++ /dev/null @@ -1,41 +0,0 @@ - - */ - private static ?WeakMap $map = null; - - public static function set(SocketInterface $socket, SocketOptionInterface $option): void - { - self::$map ??= new WeakMap(); - self::$map[$socket] = $option; - } - - public static function get(?SocketInterface $socket): ?SocketOptionInterface - { - if ($socket === null) { - return null; - } - - self::$map ??= new WeakMap(); - - return self::$map[$socket] ?? null; - } -} From 7890608895b63276592b2d24e3f8f532079ee2e0 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:30:16 +0800 Subject: [PATCH 3/9] feat: add RpcSocketFactoryAspect for tracing RPC socket endpoints --- composer.json | 1 + src/sentry/src/Constants.php | 4 ++ .../Tracing/Aspect/RpcSocketFactoryAspect.php | 37 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 src/sentry/src/Tracing/Aspect/RpcSocketFactoryAspect.php diff --git a/composer.json b/composer.json index ea88bcd63..ed3e6aaf6 100644 --- a/composer.json +++ b/composer.json @@ -85,6 +85,7 @@ "hyperf/redis": "~3.1.0", "hyperf/rpc": "~3.1.0", "hyperf/rpc-client": "~3.1.0", + "hyperf/rpc-multiplex": "~3.1.0", "hyperf/rpc-server": "~3.1.0", "hyperf/scout": "~3.1.0", "hyperf/session": "~3.1.0", diff --git a/src/sentry/src/Constants.php b/src/sentry/src/Constants.php index 0fbd4bf30..c69d68d82 100644 --- a/src/sentry/src/Constants.php +++ b/src/sentry/src/Constants.php @@ -15,6 +15,10 @@ class Constants { public const TRACE_CARRIER = 'sentry.tracing.trace_carrier'; + public const TRACE_RPC_ENDPOINT_HOST = 'sentry.tracing.rpc.endpoint.host'; + + public const TRACE_RPC_ENDPOINT_PORT = 'sentry.tracing.rpc.endpoint.port'; + public const CRON_CHECKIN_ID = 'sentry.crons.checkin_id'; public const DISABLE_COROUTINE_TRACING = 'sentry.tracing.disable_coroutine_tracing'; diff --git a/src/sentry/src/Tracing/Aspect/RpcSocketFactoryAspect.php b/src/sentry/src/Tracing/Aspect/RpcSocketFactoryAspect.php new file mode 100644 index 000000000..118bcb91d --- /dev/null +++ b/src/sentry/src/Tracing/Aspect/RpcSocketFactoryAspect.php @@ -0,0 +1,37 @@ +process(), function (Socket $socket) { + Context::set(Constants::TRACE_RPC_ENDPOINT_HOST, $socket->getName()); + Context::set(Constants::TRACE_RPC_ENDPOINT_PORT, $socket->getPort()); + }); + } +} From 2f6e219999315489afaae8ff83cdf53024e245c4 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:32:09 +0800 Subject: [PATCH 4/9] feat: add RpcEndpointAspect for tracing RPC endpoint details and remove RpcSocketFactoryAspect --- src/sentry/src/ConfigProvider.php | 1 + .../{RpcSocketFactoryAspect.php => RpcEndpointAspect.php} | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) rename src/sentry/src/Tracing/Aspect/{RpcSocketFactoryAspect.php => RpcEndpointAspect.php} (90%) diff --git a/src/sentry/src/ConfigProvider.php b/src/sentry/src/ConfigProvider.php index 82407ec37..47e2c23fc 100644 --- a/src/sentry/src/ConfigProvider.php +++ b/src/sentry/src/ConfigProvider.php @@ -39,6 +39,7 @@ public function __invoke(): array Tracing\Aspect\GuzzleHttpClientAspect::class, Tracing\Aspect\KafkaProducerAspect::class, Tracing\Aspect\RpcAspect::class, + Tracing\Aspect\RpcEndpointAspect::class, Tracing\Aspect\RedisAspect::class, Tracing\Aspect\TraceAnnotationAspect::class, Tracing\Aspect\ViewRenderAspect::class, diff --git a/src/sentry/src/Tracing/Aspect/RpcSocketFactoryAspect.php b/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php similarity index 90% rename from src/sentry/src/Tracing/Aspect/RpcSocketFactoryAspect.php rename to src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php index 118bcb91d..003b5173c 100644 --- a/src/sentry/src/Tracing/Aspect/RpcSocketFactoryAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php @@ -13,15 +13,13 @@ use FriendsOfHyperf\Sentry\Constants; use Hyperf\Context\Context; -use Hyperf\Di\Annotation\Aspect; use Hyperf\Di\Aop\AbstractAspect; use Hyperf\Di\Aop\ProceedingJoinPoint; use Hyperf\RpcMultiplex\Socket; use function Hyperf\Tappable\tap; -#[Aspect()] -class RpcSocketFactoryAspect extends AbstractAspect +class RpcEndpointAspect extends AbstractAspect { public array $classes = [ \Hyperf\RpcMultiplex\SocketFactory::class . '::get', From 07e6974cdd54c4b42f18b5a319afc726e7e76914 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:38:08 +0800 Subject: [PATCH 5/9] feat: enhance RPC tracing by adding server address and port to span data --- src/sentry/src/Tracing/Aspect/RpcAspect.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/sentry/src/Tracing/Aspect/RpcAspect.php b/src/sentry/src/Tracing/Aspect/RpcAspect.php index c3c3077b4..93e7a8c77 100644 --- a/src/sentry/src/Tracing/Aspect/RpcAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcAspect.php @@ -112,8 +112,14 @@ function (Scope $scope) use ($proceedingJoinPoint) { $rpcCtx->set(Constants::TRACE_CARRIER, $carrier->toJson()); } return tap($proceedingJoinPoint->process(), function ($result) use ($span) { - if ($span && $this->feature->isTracingTagEnabled('rpc.result')) { - $span->setData(['rpc.result' => $result]); + if ($this->feature->isTracingTagEnabled('rpc.result')) { + $span?->setData(['rpc.result' => $result]); + } + if (Context::has(Constants::TRACE_RPC_ENDPOINT_HOST)) { + $span?->setData([ + 'server.address' => Context::get(Constants::TRACE_RPC_ENDPOINT_HOST), + 'server.port' => Context::get(Constants::TRACE_RPC_ENDPOINT_PORT), + ]); } }); }, From 37a439e7f0bd3cc96873f4549c0fdbc123574327 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:38:41 +0800 Subject: [PATCH 6/9] feat: add reference link for RPC span semantic conventions in RpcAspect --- src/sentry/src/Tracing/Aspect/RpcAspect.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sentry/src/Tracing/Aspect/RpcAspect.php b/src/sentry/src/Tracing/Aspect/RpcAspect.php index 93e7a8c77..6db7dfa2d 100644 --- a/src/sentry/src/Tracing/Aspect/RpcAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcAspect.php @@ -75,6 +75,7 @@ private function handleGenerateRpcPath(ProceedingJoinPoint $proceedingJoinPoint) default => 'rpc', }; + // https://github.com/open-telemetry/semantic-conventions/blob/main/docs/rpc/rpc-spans.md Context::set(static::SPAN_CONTEXT, SpanContext::make() ->setOp('rpc.client') ->setDescription($path) From dd7ccb46accdb808a81ef5b979b6e1ff04bf4d6d Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:40:43 +0800 Subject: [PATCH 7/9] feat: update RPC tracing constants to use server address and port --- src/sentry/src/Constants.php | 4 ++-- src/sentry/src/Tracing/Aspect/RpcAspect.php | 6 +++--- src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/sentry/src/Constants.php b/src/sentry/src/Constants.php index c69d68d82..e37f16d29 100644 --- a/src/sentry/src/Constants.php +++ b/src/sentry/src/Constants.php @@ -15,9 +15,9 @@ class Constants { public const TRACE_CARRIER = 'sentry.tracing.trace_carrier'; - public const TRACE_RPC_ENDPOINT_HOST = 'sentry.tracing.rpc.endpoint.host'; + public const TRACE_RPC_SERVER_ADDRESS = 'sentry.tracing.rpc.server.address'; - public const TRACE_RPC_ENDPOINT_PORT = 'sentry.tracing.rpc.endpoint.port'; + public const TRACE_RPC_SERVER_PORT = 'sentry.tracing.rpc.server.port'; public const CRON_CHECKIN_ID = 'sentry.crons.checkin_id'; diff --git a/src/sentry/src/Tracing/Aspect/RpcAspect.php b/src/sentry/src/Tracing/Aspect/RpcAspect.php index 6db7dfa2d..cbbf9bd70 100644 --- a/src/sentry/src/Tracing/Aspect/RpcAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcAspect.php @@ -116,10 +116,10 @@ function (Scope $scope) use ($proceedingJoinPoint) { if ($this->feature->isTracingTagEnabled('rpc.result')) { $span?->setData(['rpc.result' => $result]); } - if (Context::has(Constants::TRACE_RPC_ENDPOINT_HOST)) { + if (Context::has(Constants::TRACE_RPC_SERVER_ADDRESS)) { $span?->setData([ - 'server.address' => Context::get(Constants::TRACE_RPC_ENDPOINT_HOST), - 'server.port' => Context::get(Constants::TRACE_RPC_ENDPOINT_PORT), + 'server.address' => Context::get(Constants::TRACE_RPC_SERVER_ADDRESS), + 'server.port' => Context::get(Constants::TRACE_RPC_SERVER_PORT), ]); } }); diff --git a/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php b/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php index 003b5173c..e1b5850c8 100644 --- a/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php @@ -28,8 +28,8 @@ class RpcEndpointAspect extends AbstractAspect public function process(ProceedingJoinPoint $proceedingJoinPoint) { return tap($proceedingJoinPoint->process(), function (Socket $socket) { - Context::set(Constants::TRACE_RPC_ENDPOINT_HOST, $socket->getName()); - Context::set(Constants::TRACE_RPC_ENDPOINT_PORT, $socket->getPort()); + Context::set(Constants::TRACE_RPC_SERVER_ADDRESS, $socket->getName()); + Context::set(Constants::TRACE_RPC_SERVER_PORT, $socket->getPort()); }); } } From 05221420b5942025efe5935157214f7ce56bef7e Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:44:25 +0800 Subject: [PATCH 8/9] feat: add requirement for hyperf/rpc-multiplex to enable RPC tracing --- src/sentry/composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sentry/composer.json b/src/sentry/composer.json index 2c0237806..f90440eb4 100644 --- a/src/sentry/composer.json +++ b/src/sentry/composer.json @@ -41,6 +41,7 @@ "hyperf/amqp": "Required to use the amqp event (~3.1.9).", "hyperf/crontab": "Required to use the crontab event (~3.1.7).", "hyperf/database": "Required to use the crontab event (~3.1.0).", + "hyperf/rpc-multiplex": "Required to use the rpc tracing (~3.1.0).", "phpmyadmin/sql-parser": "Required to use the sql parser (^5.9)." }, "minimum-stability": "dev", From 7beca13f1fd6a8c87c91bbab7c6451547f0f2f59 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:47:38 +0800 Subject: [PATCH 9/9] feat: improve type hinting for socket in RpcEndpointAspect process method --- src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php b/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php index e1b5850c8..e57a7cb5c 100644 --- a/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php +++ b/src/sentry/src/Tracing/Aspect/RpcEndpointAspect.php @@ -27,9 +27,11 @@ class RpcEndpointAspect extends AbstractAspect public function process(ProceedingJoinPoint $proceedingJoinPoint) { - return tap($proceedingJoinPoint->process(), function (Socket $socket) { - Context::set(Constants::TRACE_RPC_SERVER_ADDRESS, $socket->getName()); - Context::set(Constants::TRACE_RPC_SERVER_PORT, $socket->getPort()); + return tap($proceedingJoinPoint->process(), function ($socket) { + if ($socket instanceof Socket) { + Context::set(Constants::TRACE_RPC_SERVER_ADDRESS, $socket->getName()); + Context::set(Constants::TRACE_RPC_SERVER_PORT, $socket->getPort()); + } }); } }