diff --git a/composer.json b/composer.json index 0c231b823..e4eeefcd1 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ "psr/http-factory-implementation": "*", "psy/psysh": "^0.10.0 || ^0.11.0", "ramsey/uuid": "^4.7", - "sentry/sentry": "^4.19.0", + "sentry/sentry": "^4.21.0", "symfony/console": "^5.3 || ^6.0 || ^7.0", "symfony/http-foundation": "^5.3 || ^6.0 || ^7.0", "symfony/polyfill-php84": "^1.33", @@ -330,4 +330,4 @@ "test:types": "@php vendor/bin/pest --type-coverage", "test:unit": "@php vendor/bin/pest" } -} +} \ No newline at end of file diff --git a/src/sentry/class_map/SentrySdk.php b/src/sentry/class_map/SentrySdk.php deleted file mode 100644 index 299a541a6..000000000 --- a/src/sentry/class_map/SentrySdk.php +++ /dev/null @@ -1,65 +0,0 @@ - Context::set(__CLASS__, $hub)); - } - - /** - * Gets the current hub. If it's not initialized then creates a new instance - * and sets it as current hub. - */ - public static function getCurrentHub(): HubInterface - { - return Context::getOrSet(__CLASS__, fn () => make(HubInterface::class)); - } - - /** - * Sets the current hub. - * - * @param HubInterface $hub The hub to set - */ - public static function setCurrentHub(HubInterface $hub): HubInterface - { - return Context::set(__CLASS__, $hub); - } -} diff --git a/src/sentry/composer.json b/src/sentry/composer.json index 0390dddfb..fedcfd358 100644 --- a/src/sentry/composer.json +++ b/src/sentry/composer.json @@ -33,7 +33,7 @@ "hyperf/http-server": "~3.1.0", "hyperf/support": "~3.1.0", "hyperf/tappable": "~3.1.0", - "sentry/sentry": "^4.19.0", + "sentry/sentry": "^4.21.0", "symfony/polyfill-php85": "^1.33" }, "suggest": { @@ -65,4 +65,4 @@ "config": "FriendsOfHyperf\\Sentry\\ConfigProvider" } } -} +} \ No newline at end of file diff --git a/src/sentry/src/Aspect/CoroutineAspect.php b/src/sentry/src/Aspect/CoroutineAspect.php index a38865a3e..151c2cb70 100644 --- a/src/sentry/src/Aspect/CoroutineAspect.php +++ b/src/sentry/src/Aspect/CoroutineAspect.php @@ -11,7 +11,6 @@ namespace FriendsOfHyperf\Sentry\Aspect; -use FriendsOfHyperf\Sentry\Integration; use Hyperf\Context\Context; use Hyperf\Di\Aop\AbstractAspect; use Hyperf\Di\Aop\ProceedingJoinPoint; @@ -60,7 +59,7 @@ protected function handleCreate(ProceedingJoinPoint $proceedingJoinPoint): void } // Defer the flushing of events until the coroutine completes. - defer(fn () => Integration::flushEvents()); + defer(fn () => SentrySdk::flush()); // Continue the callable in the new Coroutine. $callable(); diff --git a/src/sentry/src/Aspect/SentrySdkAspect.php b/src/sentry/src/Aspect/SentrySdkAspect.php new file mode 100644 index 000000000..6954b1635 --- /dev/null +++ b/src/sentry/src/Aspect/SentrySdkAspect.php @@ -0,0 +1,72 @@ +methodName) { + 'init' => $this->handleInit($proceedingJoinPoint), + 'setCurrentHub' => $this->handleSetCurrentHub($proceedingJoinPoint), + 'getRuntimeContextManager' => $this->handleGetRuntimeContextManager($proceedingJoinPoint), + default => $proceedingJoinPoint->process(), + }; + } + + private function handleInit(ProceedingJoinPoint $proceedingJoinPoint) + { + Context::set( + RuntimeContextManager::class, + new RuntimeContextManager(make(HubInterface::class)) + ); + + return SentrySdk::getCurrentHub(); + } + + private function handleSetCurrentHub(ProceedingJoinPoint $proceedingJoinPoint) + { + $arguments = $proceedingJoinPoint->arguments['keys'] ?? []; + $hub = $arguments['hub']; + // @phpstan-ignore-next-line + Closure::bind(fn () => static::getRuntimeContextManager()->setCurrentHub($hub), null, SentrySdk::class)(); + + return $hub; + } + + private function handleGetRuntimeContextManager(ProceedingJoinPoint $proceedingJoinPoint) + { + return Context::getOrSet( + RuntimeContextManager::class, + fn () => new RuntimeContextManager(make(HubInterface::class)) + ); + } +} diff --git a/src/sentry/src/ConfigProvider.php b/src/sentry/src/ConfigProvider.php index e101e53cb..a1be9bed8 100644 --- a/src/sentry/src/ConfigProvider.php +++ b/src/sentry/src/ConfigProvider.php @@ -28,6 +28,7 @@ public function __invoke(): array Aspect\LoggerAspect::class, Aspect\RedisAspect::class, // Aspect\SingletonAspect::class, + Aspect\SentrySdkAspect::class, Metrics\Aspect\CounterAspect::class, Metrics\Aspect\HistogramAspect::class, Tracing\Aspect\AmqpProducerAspect::class, @@ -75,9 +76,7 @@ public function __invoke(): array ], 'annotations' => [ 'scan' => [ - 'class_map' => [ - \Sentry\SentrySdk::class => __DIR__ . '/../class_map/SentrySdk.php', - ], + 'class_map' => [], ], ], 'publish' => [ diff --git a/src/sentry/src/Integration.php b/src/sentry/src/Integration.php index 776ccd165..0b3b5dd9b 100644 --- a/src/sentry/src/Integration.php +++ b/src/sentry/src/Integration.php @@ -14,8 +14,6 @@ use Sentry\Breadcrumb; use Sentry\Event; use Sentry\Integration\IntegrationInterface; -use Sentry\Logs\Logs; -use Sentry\Metrics\TraceMetrics; use Sentry\SentrySdk; use Sentry\State\Scope; use Sentry\Tracing\Span; @@ -106,9 +104,7 @@ public static function setTransaction(?string $transaction): void */ public static function flushEvents(): void { - Logs::getInstance()->flush(); - TraceMetrics::getInstance()->flush(); - SentrySdk::getCurrentHub()->getClient()?->flush(); + SentrySdk::flush(); } /** diff --git a/src/sentry/src/Metrics/Listener/OnBeforeHandle.php b/src/sentry/src/Metrics/Listener/OnBeforeHandle.php index 82220efd6..74940eea5 100644 --- a/src/sentry/src/Metrics/Listener/OnBeforeHandle.php +++ b/src/sentry/src/Metrics/Listener/OnBeforeHandle.php @@ -13,7 +13,6 @@ use FriendsOfHyperf\Sentry\Constants; use FriendsOfHyperf\Sentry\Feature; -use FriendsOfHyperf\Sentry\Integration; use FriendsOfHyperf\Sentry\Metrics\Event\MetricFactoryReady; use FriendsOfHyperf\Sentry\Metrics\Traits\MetricSetter; use FriendsOfHyperf\Sentry\SentryContext; @@ -22,6 +21,7 @@ use Hyperf\Event\Contract\ListenerInterface; use Psr\Container\ContainerInterface; use Psr\EventDispatcher\EventDispatcherInterface; +use Sentry\SentrySdk; use Sentry\Unit; use function FriendsOfHyperf\Sentry\metrics; @@ -115,8 +115,7 @@ function () use ($metrics) { Unit::megabyte() ); - // metrics()->flush(); - Integration::flushEvents(); + SentrySdk::flush(); } ); } diff --git a/src/sentry/src/Metrics/Listener/OnCoroutineServerStart.php b/src/sentry/src/Metrics/Listener/OnCoroutineServerStart.php index 2e525be90..e7b28db88 100644 --- a/src/sentry/src/Metrics/Listener/OnCoroutineServerStart.php +++ b/src/sentry/src/Metrics/Listener/OnCoroutineServerStart.php @@ -12,7 +12,6 @@ namespace FriendsOfHyperf\Sentry\Metrics\Listener; use FriendsOfHyperf\Sentry\Feature; -use FriendsOfHyperf\Sentry\Integration; use FriendsOfHyperf\Sentry\Metrics\Event\MetricFactoryReady; use FriendsOfHyperf\Sentry\Metrics\Traits\MetricSetter; use Hyperf\Coordinator\Timer; @@ -20,6 +19,7 @@ use Hyperf\Server\Event\MainCoroutineServerStart; use Psr\Container\ContainerInterface; use Psr\EventDispatcher\EventDispatcherInterface; +use Sentry\SentrySdk; use Sentry\Unit; use function FriendsOfHyperf\Sentry\metrics; @@ -113,8 +113,7 @@ function () use ($metrics) { Unit::megabyte() ); - // metrics()->flush(); - Integration::flushEvents(); + SentrySdk::flush(); } ); } diff --git a/src/sentry/src/Metrics/Listener/OnMetricFactoryReady.php b/src/sentry/src/Metrics/Listener/OnMetricFactoryReady.php index c4cf57437..247e080eb 100644 --- a/src/sentry/src/Metrics/Listener/OnMetricFactoryReady.php +++ b/src/sentry/src/Metrics/Listener/OnMetricFactoryReady.php @@ -13,7 +13,6 @@ use FriendsOfHyperf\Sentry\Constants as SentryConstants; use FriendsOfHyperf\Sentry\Feature; -use FriendsOfHyperf\Sentry\Integration; use FriendsOfHyperf\Sentry\Metrics\CoroutineServerStats; use FriendsOfHyperf\Sentry\Metrics\Event\MetricFactoryReady; use FriendsOfHyperf\Sentry\Metrics\Traits\MetricSetter; @@ -22,6 +21,7 @@ use Hyperf\Event\Contract\ListenerInterface; use Hyperf\Support\System; use Psr\Container\ContainerInterface; +use Sentry\SentrySdk; use Sentry\Unit; use Swoole\Server as SwooleServer; @@ -130,8 +130,7 @@ function () use ($metrics, $serverStatsFactory, $workerId) { Unit::megabyte() ); - // metrics()->flush(); - Integration::flushEvents(); + SentrySdk::flush(); } ); } diff --git a/src/sentry/src/Metrics/Listener/OnWorkerStart.php b/src/sentry/src/Metrics/Listener/OnWorkerStart.php index cb99367c6..3a2638c6f 100644 --- a/src/sentry/src/Metrics/Listener/OnWorkerStart.php +++ b/src/sentry/src/Metrics/Listener/OnWorkerStart.php @@ -12,7 +12,6 @@ namespace FriendsOfHyperf\Sentry\Metrics\Listener; use FriendsOfHyperf\Sentry\Feature; -use FriendsOfHyperf\Sentry\Integration; use FriendsOfHyperf\Sentry\Metrics\Event\MetricFactoryReady; use FriendsOfHyperf\Sentry\Metrics\Traits\MetricSetter; use Hyperf\Coordinator\Timer; @@ -20,6 +19,7 @@ use Hyperf\Framework\Event\BeforeWorkerStart; use Psr\Container\ContainerInterface; use Psr\EventDispatcher\EventDispatcherInterface; +use Sentry\SentrySdk; use Sentry\Unit; use Swoole\Server; @@ -120,8 +120,7 @@ function () use ($metrics, $event) { Unit::megabyte() ); - // metrics()->flush(); - Integration::flushEvents(); + SentrySdk::flush(); } ); } diff --git a/src/sentry/src/Metrics/Listener/PoolWatcher.php b/src/sentry/src/Metrics/Listener/PoolWatcher.php index 44e9ab181..1c651cbaf 100644 --- a/src/sentry/src/Metrics/Listener/PoolWatcher.php +++ b/src/sentry/src/Metrics/Listener/PoolWatcher.php @@ -12,13 +12,13 @@ namespace FriendsOfHyperf\Sentry\Metrics\Listener; use FriendsOfHyperf\Sentry\Feature; -use FriendsOfHyperf\Sentry\Integration; use Hyperf\Coordinator\Timer; use Hyperf\Event\Contract\ListenerInterface; use Hyperf\Framework\Event\BeforeWorkerStart; use Hyperf\Pool\Pool; use Hyperf\Server\Event\MainCoroutineServerStart; use Psr\Container\ContainerInterface; +use Sentry\SentrySdk; use function FriendsOfHyperf\Sentry\metrics; @@ -90,8 +90,7 @@ function () use ($pool, $workerId, $poolName) { ] ); - // metrics()->flush(); - Integration::flushEvents(); + SentrySdk::flush(); } ); } diff --git a/src/sentry/src/Metrics/Listener/QueueWatcher.php b/src/sentry/src/Metrics/Listener/QueueWatcher.php index ebad472ce..70c93ec5e 100644 --- a/src/sentry/src/Metrics/Listener/QueueWatcher.php +++ b/src/sentry/src/Metrics/Listener/QueueWatcher.php @@ -12,13 +12,13 @@ namespace FriendsOfHyperf\Sentry\Metrics\Listener; use FriendsOfHyperf\Sentry\Feature; -use FriendsOfHyperf\Sentry\Integration; use FriendsOfHyperf\Sentry\Metrics\Event\MetricFactoryReady; use Hyperf\AsyncQueue\Driver\DriverFactory; use Hyperf\Contract\ConfigInterface; use Hyperf\Coordinator\Timer; use Hyperf\Event\Contract\ListenerInterface; use Psr\Container\ContainerInterface; +use Sentry\SentrySdk; use function FriendsOfHyperf\Sentry\metrics; @@ -84,8 +84,7 @@ function () { ); } - // metrics()->flush(); - Integration::flushEvents(); + SentrySdk::flush(); } ); } diff --git a/src/sentry/src/Metrics/Timer.php b/src/sentry/src/Metrics/Timer.php index 5cdefb53b..7818c6e92 100644 --- a/src/sentry/src/Metrics/Timer.php +++ b/src/sentry/src/Metrics/Timer.php @@ -11,6 +11,7 @@ namespace FriendsOfHyperf\Sentry\Metrics; +use Sentry\SentrySdk; use Sentry\Unit; use function FriendsOfHyperf\Sentry\metrics; @@ -55,7 +56,7 @@ public function end(bool $flush = false): void $this->unit ?? Unit::second() ); - $flush && metrics()->flush(); + $flush && SentrySdk::flush(); $this->ended = true; } diff --git a/src/sentry/src/Tracing/Aspect/CoroutineAspect.php b/src/sentry/src/Tracing/Aspect/CoroutineAspect.php index 6f64274c0..7e3471826 100644 --- a/src/sentry/src/Tracing/Aspect/CoroutineAspect.php +++ b/src/sentry/src/Tracing/Aspect/CoroutineAspect.php @@ -12,13 +12,13 @@ namespace FriendsOfHyperf\Sentry\Tracing\Aspect; use FriendsOfHyperf\Sentry\Feature; -use FriendsOfHyperf\Sentry\Integration; use FriendsOfHyperf\Sentry\SentryContext; use FriendsOfHyperf\Sentry\Util\CoroutineBacktraceHelper; use Hyperf\Context\Context; use Hyperf\Di\Aop\AbstractAspect; use Hyperf\Di\Aop\ProceedingJoinPoint; use Hyperf\Engine\Coroutine as Co; +use Sentry\SentrySdk; use Sentry\State\Scope; use Sentry\Tracing\SpanContext; @@ -82,7 +82,7 @@ function (Scope $scope) use ($proceedingJoinPoint, $callingOnFunction) { // Defer the finishing of the transaction and flushing of events until the coroutine completes. defer(function () use ($transaction) { $transaction->finish(); - Integration::flushEvents(); + SentrySdk::flush(); }); return trace( diff --git a/src/sentry/src/Tracing/Listener/EventHandleListener.php b/src/sentry/src/Tracing/Listener/EventHandleListener.php index 978273b16..2d10cfe06 100644 --- a/src/sentry/src/Tracing/Listener/EventHandleListener.php +++ b/src/sentry/src/Tracing/Listener/EventHandleListener.php @@ -14,7 +14,6 @@ use Closure; use FriendsOfHyperf\Sentry\Constants; use FriendsOfHyperf\Sentry\Feature; -use FriendsOfHyperf\Sentry\Integration; use FriendsOfHyperf\Sentry\SentryContext; use FriendsOfHyperf\Sentry\Util\Carrier; use FriendsOfHyperf\Sentry\Util\CoContainer; @@ -454,7 +453,7 @@ protected function handleCommandFinished(CommandEvent\AfterExecute $event): void SentrySdk::getCurrentHub()->popScope(); } - Integration::flushEvents(); + SentrySdk::flush(); } }