From 018e46a39112e59b60e2130456047a9f6d724ad5 Mon Sep 17 00:00:00 2001 From: Alex Bouma Date: Sun, 8 Sep 2024 20:30:39 +0200 Subject: [PATCH] Set the traced request directly on the request fetcher --- src/EventListener/TracingRequestListener.php | 30 +++++++++++++++----- src/Integration/RequestFetcher.php | 22 ++++++-------- src/Resources/config/services.xml | 1 + 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/EventListener/TracingRequestListener.php b/src/EventListener/TracingRequestListener.php index d94f34a7..729941c8 100644 --- a/src/EventListener/TracingRequestListener.php +++ b/src/EventListener/TracingRequestListener.php @@ -4,8 +4,10 @@ namespace Sentry\SentryBundle\EventListener; +use Sentry\State\HubInterface; use Sentry\Tracing\TransactionSource; use Symfony\Component\HttpFoundation\Request; +use Sentry\Integration\RequestFetcherInterface; use Sentry\SentryBundle\Integration\RequestFetcher; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\Event\TerminateEvent; @@ -21,6 +23,18 @@ */ final class TracingRequestListener extends AbstractTracingRequestListener { + /** + * @var \Sentry\Integration\RequestFetcherInterface + */ + private $requestFetcher; + + public function __construct(HubInterface $hub, RequestFetcherInterface $requestFetcher) + { + parent::__construct($hub); + + $this->requestFetcher = $requestFetcher; + } + /** * This method is called for each subrequest handled by the framework and * starts a new {@see Transaction}. @@ -36,6 +50,10 @@ public function handleKernelRequestEvent(RequestEvent $event): void /** @var Request $request */ $request = $event->getRequest(); + if ($this->requestFetcher instanceof RequestFetcher) { + $this->requestFetcher->setRequest($request); + } + /** @var float $requestStartTime */ $requestStartTime = $request->server->get('REQUEST_TIME_FLOAT', microtime(true)); @@ -76,14 +94,12 @@ public function handleKernelTerminateEvent(TerminateEvent $event): void return; } - RequestFetcher::withCurrentRequest( - $event->getRequest(), - static function () use ($transaction): void { - $transaction->finish(); - }, - ); - + $transaction->finish(); metrics()->flush(); + + if ($this->requestFetcher instanceof RequestFetcher) { + $this->requestFetcher->setRequest(null); + } } /** diff --git a/src/Integration/RequestFetcher.php b/src/Integration/RequestFetcher.php index cba88383..0d8dfac8 100644 --- a/src/Integration/RequestFetcher.php +++ b/src/Integration/RequestFetcher.php @@ -25,14 +25,14 @@ final class RequestFetcher implements RequestFetcherInterface private $requestStack; /** - * @var HttpMessageFactoryInterface The factory to convert Symfony requests to PSR-7 requests + * @var \Symfony\Component\HttpFoundation\Request|null The current request */ - private $httpMessageFactory; + private $currentRequest; /** - * @var \Symfony\Component\HttpFoundation\Request|null The current request + * @var HttpMessageFactoryInterface The factory to convert Symfony requests to PSR-7 requests */ - private static $currentRequest = null; + private $httpMessageFactory; /** * Class constructor. @@ -47,7 +47,7 @@ public function __construct(RequestStack $requestStack, ?HttpMessageFactoryInter new HttpFactory(), new HttpFactory(), new HttpFactory(), - new HttpFactory(), + new HttpFactory() ); } @@ -56,7 +56,7 @@ public function __construct(RequestStack $requestStack, ?HttpMessageFactoryInter */ public function fetchRequest(): ?ServerRequestInterface { - $request = self::$currentRequest ?? $this->requestStack->getCurrentRequest(); + $request = $this->currentRequest ?? $this->requestStack->getCurrentRequest(); if (null === $request) { return null; @@ -69,14 +69,8 @@ public function fetchRequest(): ?ServerRequestInterface } } - public static function withCurrentRequest(Request $request, callable $callback): void + public function setRequest(?Request $request): void { - self::$currentRequest = $request; - - try { - $callback(); - } finally { - self::$currentRequest = null; - } + $this->currentRequest = $request; } } diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml index ef3ce7d8..02ad8994 100644 --- a/src/Resources/config/services.xml +++ b/src/Resources/config/services.xml @@ -48,6 +48,7 @@ +