<?php
namespace App\V4\EventSubscriber\Sentry;
use function Sentry\configureScope;
use Sentry\State\Scope;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class RegisterTransactionIdEventSubscriber implements EventSubscriberInterface
{
public const KEY_TRANSACTION_ID = 'X-Transaction-Id';
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
public function onKernelRequest(RequestEvent $requestEvent)
{
$transactionId = $requestEvent->getRequest()->headers->get(self::KEY_TRANSACTION_ID) ?? 'middleware:'.sha1(uniqid());
configureScope(function (Scope $scope) use ($transactionId) {
$scope->setTag(self::KEY_TRANSACTION_ID, $transactionId);
});
$requestEvent->getRequest()->headers->set(self::KEY_TRANSACTION_ID, $transactionId);
}
}