From f24894ad2399c34c5dab8827fea1df711b9f3481 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 15 Oct 2025 13:42:53 +0800 Subject: [PATCH 1/5] feat(sentry): add database connection pool metrics to breadcrumbs Add connection pool statistics (max connections, waiting connections, and current connections in use) to Sentry breadcrumbs for database events. This provides better visibility into database connection pool usage when debugging issues. --- src/sentry/src/Listener/EventHandleListener.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/sentry/src/Listener/EventHandleListener.php b/src/sentry/src/Listener/EventHandleListener.php index a5dd758b3..9258a683a 100644 --- a/src/sentry/src/Listener/EventHandleListener.php +++ b/src/sentry/src/Listener/EventHandleListener.php @@ -20,6 +20,7 @@ use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Crontab\Event as CrontabEvent; use Hyperf\Database\Events as DbEvent; +use Hyperf\DbConnection\Pool\PoolFactory; use Hyperf\Event\Contract\ListenerInterface; use Hyperf\Framework\Event\BootApplication; use Hyperf\HttpServer\Event as HttpEvent; @@ -37,6 +38,8 @@ use Symfony\Component\Console\Input\InputInterface; use Throwable; +use function Sentry\captureException; + /** * @property InputInterface $input * @property int $exitCode @@ -280,6 +283,17 @@ protected function handleDbQueryExecuted(object $event): void $data['bindings'] = $event->bindings; } + try { + $pool = $this->container->get(PoolFactory::class)->getPool($event->connectionName); + $data['pool'] = [ + 'max' => $pool->getOption()->getMaxConnections(), + 'waiting' => $pool->getConnectionsInChannel(), + 'use' => $pool->getCurrentConnections(), + ]; + } catch (Throwable $e) { + captureException($e); + } + Integration::addBreadcrumb(new Breadcrumb( Breadcrumb::LEVEL_INFO, Breadcrumb::TYPE_DEFAULT, From f514db66283ea9957658a862ef8dd5d842bf2da5 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 15 Oct 2025 13:49:04 +0800 Subject: [PATCH 2/5] feat(sentry): update breadcrumb type for Guzzle HTTP requests --- src/sentry/src/Aspect/GuzzleHttpClientAspect.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sentry/src/Aspect/GuzzleHttpClientAspect.php b/src/sentry/src/Aspect/GuzzleHttpClientAspect.php index 8122b80d8..fc98c7174 100644 --- a/src/sentry/src/Aspect/GuzzleHttpClientAspect.php +++ b/src/sentry/src/Aspect/GuzzleHttpClientAspect.php @@ -81,8 +81,8 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint) Integration::addBreadcrumb(new Breadcrumb( Breadcrumb::LEVEL_INFO, - Breadcrumb::TYPE_DEFAULT, - 'guzzle', + Breadcrumb::TYPE_HTTP, + 'http', $uri, $data )); From 3a159480ca6890a60cb5c6d2275a02b567294c01 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 15 Oct 2025 13:50:39 +0800 Subject: [PATCH 3/5] refactor(EventHandleListener): replace direct captureException call with method reference --- src/sentry/src/Listener/EventHandleListener.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/sentry/src/Listener/EventHandleListener.php b/src/sentry/src/Listener/EventHandleListener.php index 9258a683a..f4e5ab1b2 100644 --- a/src/sentry/src/Listener/EventHandleListener.php +++ b/src/sentry/src/Listener/EventHandleListener.php @@ -38,8 +38,6 @@ use Symfony\Component\Console\Input\InputInterface; use Throwable; -use function Sentry\captureException; - /** * @property InputInterface $input * @property int $exitCode @@ -291,7 +289,7 @@ protected function handleDbQueryExecuted(object $event): void 'use' => $pool->getCurrentConnections(), ]; } catch (Throwable $e) { - captureException($e); + $this->captureException($e); } Integration::addBreadcrumb(new Breadcrumb( From a0a76289a92faf7151ec1f136b859f196d2ffcc5 Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 15 Oct 2025 13:54:23 +0800 Subject: [PATCH 4/5] feat(redis): enhance Redis command breadcrumb with connection pool metrics --- .../src/Listener/EventHandleListener.php | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/sentry/src/Listener/EventHandleListener.php b/src/sentry/src/Listener/EventHandleListener.php index f4e5ab1b2..6f173dedb 100644 --- a/src/sentry/src/Listener/EventHandleListener.php +++ b/src/sentry/src/Listener/EventHandleListener.php @@ -27,6 +27,7 @@ use Hyperf\HttpServer\Server as HttpServer; use Hyperf\Kafka\Event as KafkaEvent; use Hyperf\Redis\Event as RedisEvent; +use Hyperf\Redis\Pool\PoolFactory as RedisPoolFactory; use Hyperf\RpcServer\Event as RpcEvent; use Hyperf\RpcServer\Server as RpcServer; use Hyperf\Server\Event; @@ -330,16 +331,30 @@ protected function handleRedisCommandExecuted(object $event): void return; } + $data = [ + 'connectionName' => $event->connectionName, + 'arguments' => $event->parameters, + 'result' => $event->result, + 'duration' => $event->time * 1000, + ]; + + try { + $pool = $this->container->get(RedisPoolFactory::class)->getPool($event->connectionName); + $data['pool'] = [ + 'max' => $pool->getOption()->getMaxConnections(), + 'waiting' => $pool->getConnectionsInChannel(), + 'use' => $pool->getCurrentConnections(), + ]; + } catch (Throwable $e) { + $this->captureException($e); + } + Integration::addBreadcrumb(new Breadcrumb( Breadcrumb::LEVEL_INFO, Breadcrumb::TYPE_DEFAULT, 'redis', $event->command, - [ - 'arguments' => $event->parameters, - 'result' => $event->result, - 'duration' => $event->time * 1000, - ] + $data )); } From e19fe3d2d81f6847e339080a0170009c8682b90a Mon Sep 17 00:00:00 2001 From: Deeka Wong <8337659+huangdijia@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:43:23 +0800 Subject: [PATCH 5/5] fix(EventHandleListener): correct PoolFactory alias for database connection pool --- src/sentry/src/Listener/EventHandleListener.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sentry/src/Listener/EventHandleListener.php b/src/sentry/src/Listener/EventHandleListener.php index 6f173dedb..616c9a09c 100644 --- a/src/sentry/src/Listener/EventHandleListener.php +++ b/src/sentry/src/Listener/EventHandleListener.php @@ -20,7 +20,7 @@ use Hyperf\Contract\StdoutLoggerInterface; use Hyperf\Crontab\Event as CrontabEvent; use Hyperf\Database\Events as DbEvent; -use Hyperf\DbConnection\Pool\PoolFactory; +use Hyperf\DbConnection\Pool\PoolFactory as DbPoolFactory; use Hyperf\Event\Contract\ListenerInterface; use Hyperf\Framework\Event\BootApplication; use Hyperf\HttpServer\Event as HttpEvent; @@ -283,7 +283,7 @@ protected function handleDbQueryExecuted(object $event): void } try { - $pool = $this->container->get(PoolFactory::class)->getPool($event->connectionName); + $pool = $this->container->get(DbPoolFactory::class)->getPool($event->connectionName); $data['pool'] = [ 'max' => $pool->getOption()->getMaxConnections(), 'waiting' => $pool->getConnectionsInChannel(),