<?php
namespace AppBundle\EventSubscriber;
use AppBundle\Logger\DelivractLogger;
use AppBundle\Logger\NylasLogger;
use AppBundle\Logger\ZohoCRMLogger;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class ApiLogSubscriber implements EventSubscriberInterface
{
private ManagerRegistry $registry;
/**
* @param ManagerRegistry $registry
*/
public function __construct(ManagerRegistry $registry) {
$this->registry = $registry;
}
/**
* @return array<mixed>
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::FINISH_REQUEST => 'onKernelFinishRequest',
];
}
/**
* @param FinishRequestEvent $responseEvent
* @return void
*/
public function onKernelFinishRequest(FinishRequestEvent $responseEvent): void
{
/** @var EntityManagerInterface $entityManager */
$entityManager = $this->registry->getManager();
$connection = $entityManager->getConnection();
if (!$connection->isConnected()) {
$connection->close();
$connection->connect();
}
if (!$entityManager->isOpen()) {
$this->registry->resetManager();
}
try {
if ($logs = array_merge(
ZohoCRMLogger::getLogs(),
NylasLogger::getLogs(),
DelivractLogger::getLogs()
)) {
foreach ($logs as $log) {
$entityManager->persist($log);
}
$entityManager->flush();
}
} catch (\Exception $e) {
}
}
}