From ddcfbac5a8d73462216b9506ab54da7ccd2c5efb Mon Sep 17 00:00:00 2001 From: Anton Sakharov Date: Thu, 2 Jun 2022 11:30:48 +0300 Subject: [PATCH] TE-10997: Group transactions by command argument (#9296) TE-10997 Group transactions by command name and argument --- .../Transfer/monitoring.transfer.xml | 5 ++ .../Business/EventHandler/EventHandler.php | 34 +++++++++++- .../Business/MonitoringBusinessFactory.php | 14 ++++- ...toringConsoleTransactionNamingStrategy.php | 53 +++++++++++++++++++ ...ringTransactionNamingStrategyInterface.php | 27 ++++++++++ 5 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 src/Spryker/Zed/Monitoring/Business/MonitoringTransactionNamingStrategy/FirstArgumentMonitoringConsoleTransactionNamingStrategy.php create mode 100644 src/Spryker/Zed/Monitoring/Business/MonitoringTransactionNamingStrategy/MonitoringTransactionNamingStrategyInterface.php diff --git a/src/Spryker/Shared/Monitoring/Transfer/monitoring.transfer.xml b/src/Spryker/Shared/Monitoring/Transfer/monitoring.transfer.xml index 46ed63b..e6e03c1 100644 --- a/src/Spryker/Shared/Monitoring/Transfer/monitoring.transfer.xml +++ b/src/Spryker/Shared/Monitoring/Transfer/monitoring.transfer.xml @@ -9,4 +9,9 @@ + + + + + diff --git a/src/Spryker/Zed/Monitoring/Business/EventHandler/EventHandler.php b/src/Spryker/Zed/Monitoring/Business/EventHandler/EventHandler.php index 17a1f47..d0a2aa3 100644 --- a/src/Spryker/Zed/Monitoring/Business/EventHandler/EventHandler.php +++ b/src/Spryker/Zed/Monitoring/Business/EventHandler/EventHandler.php @@ -7,6 +7,7 @@ namespace Spryker\Zed\Monitoring\Business\EventHandler; +use Generated\Shared\Transfer\MonitoringTransactionEventTransfer; use Spryker\Service\Monitoring\MonitoringServiceInterface; use Spryker\Zed\Monitoring\Dependency\Service\MonitoringToUtilNetworkServiceInterface; use Symfony\Component\Console\Event\ConsoleTerminateEvent; @@ -33,16 +34,24 @@ class EventHandler implements EventHandlerInterface */ protected $utilNetworkService; + /** + * @var array<\Spryker\Zed\Monitoring\Business\MonitoringTransactionNamingStrategy\MonitoringTransactionNamingStrategyInterface> + */ + protected array $monitoringTransactionNamingStrategies = []; + /** * @param \Spryker\Service\Monitoring\MonitoringServiceInterface $monitoringService * @param \Spryker\Zed\Monitoring\Dependency\Service\MonitoringToUtilNetworkServiceInterface $utilNetworkService + * @param array<\Spryker\Zed\Monitoring\Business\MonitoringTransactionNamingStrategy\MonitoringTransactionNamingStrategyInterface> $monitoringTransactionNamingStrategies */ public function __construct( MonitoringServiceInterface $monitoringService, - MonitoringToUtilNetworkServiceInterface $utilNetworkService + MonitoringToUtilNetworkServiceInterface $utilNetworkService, + array $monitoringTransactionNamingStrategies = [] ) { $this->monitoringService = $monitoringService; $this->utilNetworkService = $utilNetworkService; + $this->monitoringTransactionNamingStrategies = $monitoringTransactionNamingStrategies; } /** @@ -67,9 +76,32 @@ public function handleConsoleTerminateEvent(ConsoleTerminateEvent $event): void */ protected function getTransactionName(ConsoleTerminateEvent $event): string { + $monitoringTransactionEventTransfer = $this->mapConsoleTerminateEventToMonitoringTransactionEventTransfer($event); + foreach ($this->monitoringTransactionNamingStrategies as $monitoringTransactionNamingStrategy) { + if ($monitoringTransactionNamingStrategy->isApplicable($monitoringTransactionEventTransfer)) { + return $monitoringTransactionNamingStrategy->getMonitoringTransactionName($monitoringTransactionEventTransfer); + } + } + return static::TRANSACTION_NAME_PREFIX . $event->getCommand()->getName(); } + /** + * @param \Symfony\Component\Console\Event\ConsoleTerminateEvent $event + * + * @return \Generated\Shared\Transfer\MonitoringTransactionEventTransfer + */ + protected function mapConsoleTerminateEventToMonitoringTransactionEventTransfer( + ConsoleTerminateEvent $event + ): MonitoringTransactionEventTransfer { + $monitoringTransactionEventTransfer = new MonitoringTransactionEventTransfer(); + $monitoringTransactionEventTransfer->setCommandName($event->getCommand()->getName()); + $monitoringTransactionEventTransfer->setArguments($event->getInput()->getArguments()); + $monitoringTransactionEventTransfer->setTransactionNamePrefix(trim(static::TRANSACTION_NAME_PREFIX)); + + return $monitoringTransactionEventTransfer; + } + /** * @param \Symfony\Component\Console\Event\ConsoleTerminateEvent $event * diff --git a/src/Spryker/Zed/Monitoring/Business/MonitoringBusinessFactory.php b/src/Spryker/Zed/Monitoring/Business/MonitoringBusinessFactory.php index 13f539c..fb2a9ec 100644 --- a/src/Spryker/Zed/Monitoring/Business/MonitoringBusinessFactory.php +++ b/src/Spryker/Zed/Monitoring/Business/MonitoringBusinessFactory.php @@ -24,7 +24,19 @@ class MonitoringBusinessFactory extends AbstractBusinessFactory */ public function createEventHandler(): EventHandlerInterface { - return new EventHandler($this->getMonitoringService(), $this->getUtilNetworkService()); + return new EventHandler( + $this->getMonitoringService(), + $this->getUtilNetworkService(), + $this->getMonitoringTransactionNamingStrategies(), + ); + } + + /** + * @return array<\Spryker\Zed\Monitoring\Business\MonitoringTransactionNamingStrategy\MonitoringTransactionNamingStrategyInterface> + */ + public function getMonitoringTransactionNamingStrategies(): array + { + return []; } /** diff --git a/src/Spryker/Zed/Monitoring/Business/MonitoringTransactionNamingStrategy/FirstArgumentMonitoringConsoleTransactionNamingStrategy.php b/src/Spryker/Zed/Monitoring/Business/MonitoringTransactionNamingStrategy/FirstArgumentMonitoringConsoleTransactionNamingStrategy.php new file mode 100644 index 0000000..ab84655 --- /dev/null +++ b/src/Spryker/Zed/Monitoring/Business/MonitoringTransactionNamingStrategy/FirstArgumentMonitoringConsoleTransactionNamingStrategy.php @@ -0,0 +1,53 @@ + + */ + protected array $commandNames = []; + + /** + * @param array $commandNames + */ + public function __construct(array $commandNames) + { + $this->commandNames = $commandNames; + } + + /** + * @param \Generated\Shared\Transfer\MonitoringTransactionEventTransfer $monitoringTransactionEventTransfer + * + * @return bool + */ + public function isApplicable( + MonitoringTransactionEventTransfer $monitoringTransactionEventTransfer + ): bool { + return in_array($monitoringTransactionEventTransfer->getCommandName(), $this->commandNames, true); + } + + /** + * @param \Generated\Shared\Transfer\MonitoringTransactionEventTransfer $monitoringTransactionEventTransfer + * + * @return string|null + */ + public function getMonitoringTransactionName( + MonitoringTransactionEventTransfer $monitoringTransactionEventTransfer + ): ?string { + $arguments = array_values($monitoringTransactionEventTransfer->getArguments()); + $commandName = $monitoringTransactionEventTransfer->getCommandName(); + $transactionNamePrefix = $monitoringTransactionEventTransfer->getTransactionNamePrefix(); + $argumentValue = $arguments[1] ?? ''; + + return implode(' ', [$transactionNamePrefix, $commandName, $argumentValue]); + } +} diff --git a/src/Spryker/Zed/Monitoring/Business/MonitoringTransactionNamingStrategy/MonitoringTransactionNamingStrategyInterface.php b/src/Spryker/Zed/Monitoring/Business/MonitoringTransactionNamingStrategy/MonitoringTransactionNamingStrategyInterface.php new file mode 100644 index 0000000..afdcfa5 --- /dev/null +++ b/src/Spryker/Zed/Monitoring/Business/MonitoringTransactionNamingStrategy/MonitoringTransactionNamingStrategyInterface.php @@ -0,0 +1,27 @@ +