diff --git a/src/Bundle/ChillMainBundle/Service/Workflow/CancelStaleWorkflowCronJob.php b/src/Bundle/ChillMainBundle/Service/Workflow/CancelStaleWorkflowCronJob.php index 2114396f0..d8888efe8 100644 --- a/src/Bundle/ChillMainBundle/Service/Workflow/CancelStaleWorkflowCronJob.php +++ b/src/Bundle/ChillMainBundle/Service/Workflow/CancelStaleWorkflowCronJob.php @@ -6,22 +6,22 @@ use Chill\MainBundle\Cron\CronJobInterface; use Chill\MainBundle\Entity\CronJobExecution; use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository; use DateInterval; -use Doctrine\DBAL\Connection; use Psr\Log\LoggerInterface; use Symfony\Component\Clock\ClockInterface; use Symfony\Component\Messenger\MessageBusInterface; class CancelStaleWorkflowCronJob implements CronJobInterface { - public const KEY = 'remove-stale-workflow'; + public const string KEY = 'remove-stale-workflow'; - public const KEEP_INTERVAL = 'P90D'; + public const string KEEP_INTERVAL = 'P90D'; - private const LAST_CANCELED_WORKFLOW = 'last-canceled-workflow-id'; + private const string LAST_CANCELED_WORKFLOW = 'last-canceled-workflow-id'; public function __construct(private readonly EntityWorkflowRepository $workflowRepository, private readonly ClockInterface $clock, private readonly MessageBusInterface $messageBus, + private readonly LoggerInterface $logger, ) { } @@ -38,18 +38,26 @@ class CancelStaleWorkflowCronJob implements CronJobInterface public function run(array $lastExecutionData): ?array { + $this->logger->info('Cronjob started: Canceling stale workflows.'); + $olderThanDate = $this->clock->now()->sub(new DateInterval(self::KEEP_INTERVAL)); - $staleWorkflowIds = $this->workflowRepository->findWorkflowsWithoutFinalStepAndOlderThan($olderThanDate); - $lastCanceled = self::LAST_CANCELED_WORKFLOW; + $processedCount = 0; foreach ($staleWorkflowIds as $wId) { - $this->messageBus->dispatch(new CancelStaleWorkflow($wId)); - $lastCanceled = $wId; + try { + $this->messageBus->dispatch(new CancelStaleWorkflow($wId)); + $lastCanceled = $wId; + $processedCount++; + } catch (\Exception $e) { + $this->logger->error("Failed to dispatch CancelStaleWorkflow for ID {$wId}", ['exception' => $e]); + continue; + } } + $this->logger->info("Cronjob completed: {$processedCount} workflows processed."); + return [self::LAST_CANCELED_WORKFLOW => $lastCanceled]; } - }