Let MySQL do the time logic when looking for tasks

This commit is contained in:
Dane Everitt 2020-10-25 15:06:54 -07:00
parent 23872b844a
commit 8c6327fd32
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
5 changed files with 24 additions and 168 deletions

View file

@ -1,62 +1,38 @@
<?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>.
*
* This software is licensed under the terms of the MIT license.
* https://opensource.org/licenses/MIT
*/
namespace Pterodactyl\Console\Commands\Schedule;
use Cake\Chronos\Chronos;
use Illuminate\Console\Command;
use Illuminate\Support\Collection;
use Pterodactyl\Models\Schedule;
use Pterodactyl\Services\Schedules\ProcessScheduleService;
use Pterodactyl\Contracts\Repository\ScheduleRepositoryInterface;
class ProcessRunnableCommand extends Command
{
/**
* @var string
*/
protected $description = 'Process schedules in the database and determine which are ready to run.';
/**
* @var \Pterodactyl\Services\Schedules\ProcessScheduleService
*/
protected $processScheduleService;
/**
* @var \Pterodactyl\Contracts\Repository\ScheduleRepositoryInterface
*/
protected $repository;
protected $signature = 'p:schedule:process';
/**
* @var string
*/
protected $signature = 'p:schedule:process';
/**
* ProcessRunnableCommand constructor.
*
* @param \Pterodactyl\Services\Schedules\ProcessScheduleService $processScheduleService
* @param \Pterodactyl\Contracts\Repository\ScheduleRepositoryInterface $repository
*/
public function __construct(ProcessScheduleService $processScheduleService, ScheduleRepositoryInterface $repository)
{
parent::__construct();
$this->processScheduleService = $processScheduleService;
$this->repository = $repository;
}
protected $description = 'Process schedules in the database and determine which are ready to run.';
/**
* Handle command execution.
*
* @param \Pterodactyl\Services\Schedules\ProcessScheduleService $service
*
* @throws \Throwable
*/
public function handle()
public function handle(ProcessScheduleService $service)
{
$schedules = $this->repository->getSchedulesToProcess(Chronos::now()->toAtomString());
$schedules = Schedule::query()->with('tasks')
->where('is_active', true)
->where('is_processing', false)
->whereRaw('next_run_at <= NOW()')
->get();
if ($schedules->count() < 1) {
$this->line('There are no scheduled tasks for servers that need to be run.');
@ -64,9 +40,9 @@ class ProcessRunnableCommand extends Command
}
$bar = $this->output->createProgressBar(count($schedules));
$schedules->each(function ($schedule) use ($bar) {
if ($schedule->tasks instanceof Collection && count($schedule->tasks) > 0) {
$this->processScheduleService->handle($schedule);
foreach ($schedules as $schedule) {
if ($schedule->tasks->isNotEmpty()) {
$service->handle($schedule);
if ($this->input->isInteractive()) {
$bar->clear();
@ -79,7 +55,7 @@ class ProcessRunnableCommand extends Command
$bar->advance();
$bar->display();
});
}
$this->line('');
}