From 9eaa1202575a49f63f2b11f20e117255d6b632f8 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Fri, 4 Jul 2025 15:15:09 -0500 Subject: [PATCH] fix: stuck monitors --- src/Monitor/Framework/Entity/Monitor.php | 3 ++- .../Framework/Scheduler/MonitorDispatcher.php | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Monitor/Framework/Entity/Monitor.php b/src/Monitor/Framework/Entity/Monitor.php index 6b048e3..f073336 100644 --- a/src/Monitor/Framework/Entity/Monitor.php +++ b/src/Monitor/Framework/Entity/Monitor.php @@ -4,6 +4,7 @@ namespace App\Monitor\Framework\Entity; use App\Monitor\Framework\Repository\MonitorRepository; use App\User\Framework\Entity\User; +use Carbon\Carbon; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\DBAL\Types\Types; @@ -148,7 +149,7 @@ class Monitor public function getLastSearch(): ?\DateTimeInterface { - return $this->lastSearch; + return Carbon::parse($this->lastSearch); } public function setLastSearch(?\DateTimeInterface $lastSearch): static diff --git a/src/Monitor/Framework/Scheduler/MonitorDispatcher.php b/src/Monitor/Framework/Scheduler/MonitorDispatcher.php index c13b7ae..479e30b 100644 --- a/src/Monitor/Framework/Scheduler/MonitorDispatcher.php +++ b/src/Monitor/Framework/Scheduler/MonitorDispatcher.php @@ -7,6 +7,7 @@ use App\Monitor\Action\Command\MonitorTvEpisodeCommand; use App\Monitor\Action\Command\MonitorTvSeasonCommand; use App\Monitor\Action\Command\MonitorTvShowCommand; use App\Monitor\Framework\Repository\MonitorRepository; +use Carbon\Carbon; use Psr\Log\LoggerInterface; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Scheduler\Attribute\AsCronTask; @@ -23,6 +24,8 @@ class MonitorDispatcher public function __invoke() { $this->logger->info('[MonitorDispatcher] Executing MonitorDispatcher'); + $this->cleanupStuckMonitors(); + $monitorHandlers = [ 'movie' => MonitorMovieCommand::class, 'tvepisode' => MonitorTvEpisodeCommand::class, @@ -41,4 +44,16 @@ class MonitorDispatcher $this->bus->dispatch(new $command($monitor->getId())); } } + + private function cleanupStuckMonitors(): void + { + $monitors = $this->monitorRepository->findBy(['status' => 'In Progress']); + foreach ($monitors as $monitor) { + // Reset the status to active so it will be executed again + if ($monitor->getLastSearch()->diffInHours(Carbon::today()) > 6) { + $monitor->setStatus('Active'); + } + } + $this->monitorRepository->getEntityManager()->flush(); + } }