src/Messenger/EventListener/StopWorkerIfRebuildStartedListener.php line 38

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.     /**
  21.      * @return array<string, string>
  22.      */
  23.     public static function getSubscribedEvents()
  24.     {
  25.         return [
  26.             WorkerStartedEvent::class => 'onWorkerStarted',
  27.             WorkerRunningEvent::class => 'onWorkerRunning'// Bulletproofing, rebuild will request workers stop itself
  28.         ];
  29.     }
  30.     public function onWorkerStarted(WorkerStartedEvent $event): void
  31.     {
  32.         try {
  33.             $this->rebuildFlag->check();
  34.         } catch (RebuildInProgressException $e) {
  35.             if ($this->logger) {
  36.                 $this->logger->warning('Rebuild in progress, stopping');
  37.             }
  38.             $event->getWorker()->stop();
  39.         }
  40.     }
  41.     public function onWorkerRunning(WorkerRunningEvent $event): void
  42.     {
  43.         try {
  44.             $this->rebuildFlag->check();
  45.         } catch (RebuildInProgressException $e) {
  46.             if ($this->logger) {
  47.                 $this->logger->warning('Rebuild in progress, stopping');
  48.             }
  49.             $event->getWorker()->stop();
  50.         }
  51.     }
  52. }