src/EventListener/Api/ApiResponseTimeListener.php line 47

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener\Api;
  4. use App\Application\Service\Api\Integration\Factory\ApiResponseTimeFactory;
  5. use App\Application\Service\Helper\LogWriterService;
  6. use App\Manager\System\ApiResponseTimeManager;
  7. use App\Service\EnvironmentService;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  11. use Symfony\Component\Security\Core\Security;
  12. class ApiResponseTimeListener
  13. {
  14.     private const ACCEPTED_RESPONSE_CODES = [Response::HTTP_OKResponse::HTTP_CREATED];
  15.     protected ApiResponseTimeManager $apiDateCallManager;
  16.     protected LogWriterService $loggerService;
  17.     protected ApiResponseTimeFactory $apiDateCallEndpointFactory;
  18.     protected RequestStack $requestStack;
  19.     protected EnvironmentService $environmentService;
  20.     private Security $security;
  21.     public function __construct(
  22.         ApiResponseTimeManager $apiDateCallManager,
  23.         LogWriterService $loggerService,
  24.         ApiResponseTimeFactory $apiDateCallEndpointFactory,
  25.         RequestStack $requestStack,
  26.         Security $security,
  27.         EnvironmentService $environmentService
  28.     ) {
  29.         $this->apiDateCallManager $apiDateCallManager;
  30.         $this->loggerService $loggerService;
  31.         $this->apiDateCallEndpointFactory $apiDateCallEndpointFactory;
  32.         $this->requestStack $requestStack;
  33.         $this->environmentService $environmentService;
  34.         $this->security $security;
  35.     }
  36.     public function onKernelResponse(ResponseEvent $event): void
  37.     {
  38.         $request $event->getRequest();
  39.         $url $request->server->get('REQUEST_URI');
  40.         $isSubrequest $this->requestStack->getParentRequest();
  41.         if (
  42.             !$this->environmentService->isDev()
  43.             || $isSubrequest
  44.             || \str_contains($url'doc')
  45.             || \str_contains($url'monitor')
  46.             || !$this->environmentService->isApi()
  47.             || !\in_array($event->getResponse()->getStatusCode(), self::ACCEPTED_RESPONSE_CODES)
  48.         ) {
  49.             return;
  50.         }
  51.         try {
  52.             $requestTime $request->server->get('REQUEST_TIME_FLOAT');
  53.             $requestTimeAsArray = \explode('.', (string)$requestTime);
  54.             $dateStartAsDate = \date('Y-m-d H:i:s', (int)\current($requestTimeAsArray));
  55.             $dateWithMicroTime $dateStartAsDate.'.'.$requestTimeAsArray[1];
  56.             $dateStartDateTime = new \DateTime($dateWithMicroTime);
  57.             $dateEndDateTime = new \DateTime();
  58.             $diff $dateStartDateTime->diff($dateEndDateTime);
  59.             $requestTimeAsArray = \explode('.', (string)$diff->f);
  60.             $diffInSeconds = \round((float)((($diff->60) + $diff->s).'.'.$requestTimeAsArray[1]), 1);
  61.             $memoryPeakMb = (int)ceil(\memory_get_peak_usage(true) / 1024 1024);
  62.             $methodType $request->getMethod();
  63.             $token $this->security->getToken();
  64.             if (!$token || $token->getUser() === null) {
  65.                 return;
  66.             }
  67.             $apiDateCall $this->apiDateCallEndpointFactory->create($url$dateStartDateTime$dateEndDateTime$diffInSeconds$memoryPeakMb$methodType$token->getUser());
  68.             $this->apiDateCallManager->save($apiDateCall);
  69.         } catch (\Throwable $e) {
  70.             $this->loggerService->logApiMain(
  71.                 LogWriterService::API_LOG_INFO,
  72.                 'Exception found in ApiResponseTimeListener->onKernelResponse(): '.$e->getMessage(),
  73.                 __METHOD__,
  74.                 $request,
  75.                 null
  76.             );
  77.         }
  78.     }
  79. }