Всем привет.
Хочу использовать встроенный в симфони профайлер для сбора метрик (время обработки, кол-во запросов к бд, и т.д.) во время выполнения тестов, консольных комманд, а также во время выполнения запросов к серверу. Если с тестами удалось более менее нормально получить данные от прфайлера, то во время выполнения запроса к серверу пока встретил трудности.
Я использую EventListener и событие onKernelResponse, где хочу, чтобы на каждый запрос к серверу я смог собрать данные по метрике и отправить их в логгер, например в Senty. В этом случае не удается собрать events в TimeDataCollector, т.к. их просто нет.
Ниже приведу код:
<?php
namespace App\EventListener;
use App\AppAdapter\AppRequest;
use App\AppAdapter\Response\AppJsonResponse;
use App\AppAdapter\Response\AppResponse;
use App\Utils\Response\PrepareJsonResponse;
use App\Utils\Response\PrepareResponse;
use Doctrine\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\DataCollector\TimeDataCollector;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\Profiler\Profiler;
use Symfony\Component\Stopwatch\Stopwatch;
class KernelResponseListener
{
protected ContainerInterface $containerBuilder;
protected ?AppRequest $appRequest;
private Profiler $profiler;
private ContainerInterface $container;
private Stopwatch $stopwatch;
private RequestStack $requestStack;
public function __construct(Stopwatch $stopwatch, RequestStack $requestStack, ContainerInterface $container, ContainerInterface $containerBuilder, Profiler $profiler)
{
$this->containerBuilder = $containerBuilder;
$this->appRequest = $containerBuilder->get(AppRequest::class);
$this->profiler = $profiler;
$this->container = $container;
$this->stopwatch = $stopwatch;
$this->requestStack = $requestStack;
}
/**
* @param ViewEvent $event
*
* @return void
*/
public function onKernelResponse(ResponseEvent $event): void
{
$profile = $this->profiler->collect($event->getRequest(), $event->getResponse());
/** @var TimeDataCollector $time */
$time = $profile->getCollector('time');
dump($time);
dd($this->profiler->get('time'));
}
}
И результат:
Кто-то может подсказать как использовать профайлер для метрики?