vendor/sentry/sentry-symfony/src/EventListener/TracingSubRequestListener.php line 54

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Sentry\SentryBundle\EventListener;
  4. use Sentry\Tracing\Span;
  5. use Sentry\Tracing\SpanContext;
  6. use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
  7. /**
  8.  * This event listener acts on the sub requests and starts a child span of the
  9.  * current transaction to gather performance data for each of them.
  10.  */
  11. final class TracingSubRequestListener extends AbstractTracingRequestListener
  12. {
  13.     /**
  14.      * This method is called for each subrequest handled by the framework and
  15.      * traces each by starting a new {@see Span}.
  16.      *
  17.      * @param SubRequestListenerRequestEvent $event The event
  18.      */
  19.     public function handleKernelRequestEvent(SubRequestListenerRequestEvent $event): void
  20.     {
  21.         if ($event->isMasterRequest()) {
  22.             return;
  23.         }
  24.         $request $event->getRequest();
  25.         $span $this->hub->getSpan();
  26.         if (null === $span) {
  27.             return;
  28.         }
  29.         $spanContext = new SpanContext();
  30.         $spanContext->setOp('http.server');
  31.         $spanContext->setDescription(sprintf('%s %s%s%s'$request->getMethod(), $request->getSchemeAndHttpHost(), $request->getBaseUrl(), $request->getPathInfo()));
  32.         $spanContext->setTags([
  33.             'http.method' => $request->getMethod(),
  34.             'http.url' => $request->getUri(),
  35.             'route' => $this->getRouteName($request),
  36.         ]);
  37.         $this->hub->setSpan($span->startChild($spanContext));
  38.     }
  39.     /**
  40.      * This method is called for each subrequest handled by the framework and
  41.      * ends the tracing.
  42.      *
  43.      * @param FinishRequestEvent $event The event
  44.      */
  45.     public function handleKernelFinishRequestEvent(FinishRequestEvent $event): void
  46.     {
  47.         if ($event->isMasterRequest()) {
  48.             return;
  49.         }
  50.         $span $this->hub->getSpan();
  51.         if (null === $span) {
  52.             return;
  53.         }
  54.         $span->finish();
  55.     }
  56. }