src/Messenger/EventListener/StopWorkerIfRebuildStartedListener.php line 47

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright (c) 2011-present Qualiteam software Ltd. All rights reserved.
  4.  * See https://www.x-cart.com/license-agreement.html for license details.
  5.  */
  6. namespace XCart\Messenger\EventListener;
  7. use Psr\Log\LoggerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Messenger\Event\WorkerRunningEvent;
  10. use Symfony\Component\Messenger\Event\WorkerStartedEvent;
  11. final class StopWorkerIfRebuildStartedListener implements EventSubscriberInterface
  12. {
  13.     private RebuildFlag $rebuildFlag;
  14.     private ?LoggerInterface $logger;
  15.     public function __construct(RebuildFlag $rebuildFlagLoggerInterface $logger null)
  16.     {
  17.         $this->rebuildFlag $rebuildFlag;
  18.         $this->logger      $logger;
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             WorkerStartedEvent::class => 'onWorkerStarted',
  24.             WorkerRunningEvent::class => 'onWorkerRunning'// Bulletproofing, rebuild will request workers stop itself
  25.         ];
  26.     }
  27.     public function onWorkerStarted(WorkerStartedEvent $event): void
  28.     {
  29.         try {
  30.             $this->rebuildFlag->check();
  31.         } catch (RebuildInProgressException $e) {
  32.             if ($this->logger) {
  33.                 $this->logger->warning('Rebuild in progress, stopping');
  34.             }
  35.             $event->getWorker()->stop();
  36.         }
  37.     }
  38.     public function onWorkerRunning(WorkerRunningEvent $event): void
  39.     {
  40.         try {
  41.             $this->rebuildFlag->check();
  42.         } catch (RebuildInProgressException $e) {
  43.             if ($this->logger) {
  44.                 $this->logger->warning('Rebuild in progress, stopping');
  45.             }
  46.             $event->getWorker()->stop();
  47.         }
  48.     }
  49. }