fix: stuck monitors
This commit is contained in:
@@ -4,6 +4,7 @@ namespace App\Monitor\Framework\Entity;
|
|||||||
|
|
||||||
use App\Monitor\Framework\Repository\MonitorRepository;
|
use App\Monitor\Framework\Repository\MonitorRepository;
|
||||||
use App\User\Framework\Entity\User;
|
use App\User\Framework\Entity\User;
|
||||||
|
use Carbon\Carbon;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use Doctrine\Common\Collections\Collection;
|
use Doctrine\Common\Collections\Collection;
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
@@ -148,7 +149,7 @@ class Monitor
|
|||||||
|
|
||||||
public function getLastSearch(): ?\DateTimeInterface
|
public function getLastSearch(): ?\DateTimeInterface
|
||||||
{
|
{
|
||||||
return $this->lastSearch;
|
return Carbon::parse($this->lastSearch);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setLastSearch(?\DateTimeInterface $lastSearch): static
|
public function setLastSearch(?\DateTimeInterface $lastSearch): static
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use App\Monitor\Action\Command\MonitorTvEpisodeCommand;
|
|||||||
use App\Monitor\Action\Command\MonitorTvSeasonCommand;
|
use App\Monitor\Action\Command\MonitorTvSeasonCommand;
|
||||||
use App\Monitor\Action\Command\MonitorTvShowCommand;
|
use App\Monitor\Action\Command\MonitorTvShowCommand;
|
||||||
use App\Monitor\Framework\Repository\MonitorRepository;
|
use App\Monitor\Framework\Repository\MonitorRepository;
|
||||||
|
use Carbon\Carbon;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Symfony\Component\Messenger\MessageBusInterface;
|
use Symfony\Component\Messenger\MessageBusInterface;
|
||||||
use Symfony\Component\Scheduler\Attribute\AsCronTask;
|
use Symfony\Component\Scheduler\Attribute\AsCronTask;
|
||||||
@@ -23,6 +24,8 @@ class MonitorDispatcher
|
|||||||
public function __invoke() {
|
public function __invoke() {
|
||||||
$this->logger->info('[MonitorDispatcher] Executing MonitorDispatcher');
|
$this->logger->info('[MonitorDispatcher] Executing MonitorDispatcher');
|
||||||
|
|
||||||
|
$this->cleanupStuckMonitors();
|
||||||
|
|
||||||
$monitorHandlers = [
|
$monitorHandlers = [
|
||||||
'movie' => MonitorMovieCommand::class,
|
'movie' => MonitorMovieCommand::class,
|
||||||
'tvepisode' => MonitorTvEpisodeCommand::class,
|
'tvepisode' => MonitorTvEpisodeCommand::class,
|
||||||
@@ -41,4 +44,16 @@ class MonitorDispatcher
|
|||||||
$this->bus->dispatch(new $command($monitor->getId()));
|
$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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user