<?php
namespace Sq\Service\EventSubscriber;
use Psr\Container\ContainerInterface;
use Sq\Entity\Apm\TransactionInterface;
use Sq\Event\Kernel\InitialiseContainerEvent;
use Sq\Service\Apm\ApmInterface;
use Sq\Service\Log\LogBuilder;
use Sq\Service\Log\LogBuilderInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ApmMetadataSubscriber implements EventSubscriberInterface
{
private ApmInterface $apm;
private ContainerInterface $container;
private LogBuilderInterface $logBuilder;
private ParameterBagInterface $parameterBag;
public function __construct(ParameterBagInterface $parameterBag, ContainerInterface $container, ApmInterface $apm, LogBuilderInterface $logBuilder)
{
$this->apm = $apm;
$this->container = $container;
$this->logBuilder = $logBuilder;
$this->parameterBag = $parameterBag;
}
/** @inheritDoc */
public static function getSubscribedEvents()
{
return [
InitialiseContainerEvent::class => ['onInitializeContainer'],
];
}
/**
* @param \Sq\Event\Kernel\InitialiseContainerEvent $event
*/
public function onInitializeContainer(InitialiseContainerEvent $event): void
{
if ($this->apm->isTracking())
{
$transaction = $this->apm->getCurrentTransaction();
$this->addScriptId($transaction);
$transaction->addAttribute('instance_id', $this->parameterBag->get('instance.identifier'));
$transaction->addAttribute('app_name', $this->parameterBag->get('kernel.app_name'));
$transaction->addAttribute('app_type', $this->parameterBag->get('kernel.app_type'));
}
}
protected function addScriptId(TransactionInterface $transaction)
{
if ($this->logBuilder instanceof LogBuilder)
{
$transaction->addAttribute("script_id", $this->logBuilder->getProcessId());
}
}
}