Skip to content

Commit

Permalink
TE-10997: Group transactions by command argument (#9296)
Browse files Browse the repository at this point in the history
TE-10997 Group transactions by command name and argument
  • Loading branch information
Anton Sakharov authored Jun 2, 2022
1 parent defb86d commit ddcfbac
Show file tree
Hide file tree
Showing 5 changed files with 131 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,9 @@
<property name="localeName" type="string"/>
</transfer>

<transfer name="MonitoringTransactionEvent">
<property name="commandName" type="string"/>
<property name="arguments" type="array" singular="argument"/>
<property name="transactionNamePrefix" type="string"/>
</transfer>
</transfers>
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}

/**
Expand All @@ -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
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 [];
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

namespace Spryker\Zed\Monitoring\Business\MonitoringTransactionNamingStrategy;

use Generated\Shared\Transfer\MonitoringTransactionEventTransfer;

class FirstArgumentMonitoringConsoleTransactionNamingStrategy implements MonitoringTransactionNamingStrategyInterface
{
/**
* @var array<string>
*/
protected array $commandNames = [];

/**
* @param array<string> $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]);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

namespace Spryker\Zed\Monitoring\Business\MonitoringTransactionNamingStrategy;

use Generated\Shared\Transfer\MonitoringTransactionEventTransfer;

interface MonitoringTransactionNamingStrategyInterface
{
/**
* @param \Generated\Shared\Transfer\MonitoringTransactionEventTransfer $monitoringTransactionEventTransfer
*
* @return bool
*/
public function isApplicable(MonitoringTransactionEventTransfer $monitoringTransactionEventTransfer): bool;

/**
* @param \Generated\Shared\Transfer\MonitoringTransactionEventTransfer $monitoringTransactionEventTransfer
*
* @return string|null
*/
public function getMonitoringTransactionName(MonitoringTransactionEventTransfer $monitoringTransactionEventTransfer): ?string;
}

0 comments on commit ddcfbac

Please sign in to comment.