mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-20 05:14:46 +02:00

* Fix copy paste AllocationsRelationManager * We shouldn't let the user know if the user is correct but the password isn't * Add missing `trans()` `EditServer` * Add missing `trans()` User `ServersRelationManager` * Replace every `__()` with `trans()` helper * Fix `exceptions` `User` Model * Replace `Translator->get()` with `trans()` helper * Revert "We shouldn't let the user know if the user is correct but the password isn't" This reverts commit e156ee4b38e9e969662a532648c78fdc1e9b0166. that's stock laravel, therefore it needs to stay
71 lines
2.2 KiB
PHP
71 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands\Schedule;
|
|
|
|
use Illuminate\Console\Command;
|
|
use App\Models\Schedule;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use App\Services\Schedules\ProcessScheduleService;
|
|
use Throwable;
|
|
|
|
class ProcessRunnableCommand extends Command
|
|
{
|
|
protected $signature = 'p:schedule:process';
|
|
|
|
protected $description = 'Process schedules in the database and determine which are ready to run.';
|
|
|
|
public function handle(ProcessScheduleService $processScheduleService): int
|
|
{
|
|
$schedules = Schedule::query()
|
|
->with('tasks')
|
|
->whereRelation('server', fn (Builder $builder) => $builder->whereNull('status'))
|
|
->where('is_active', true)
|
|
->where('is_processing', false)
|
|
->where('next_run_at', '<=', now('UTC')->toDateTimeString())
|
|
->get();
|
|
|
|
if ($schedules->count() < 1) {
|
|
$this->line(trans('commands.schedule.process.no_tasks'));
|
|
|
|
return 0;
|
|
}
|
|
|
|
$bar = $this->output->createProgressBar(count($schedules));
|
|
foreach ($schedules as $schedule) {
|
|
$bar->clear();
|
|
$this->processSchedule($processScheduleService, $schedule);
|
|
$bar->advance();
|
|
$bar->display();
|
|
}
|
|
|
|
$this->line('');
|
|
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* Processes a given schedule and logs and errors encountered the console output. This should
|
|
* never throw an exception out, otherwise you'll end up killing the entire run group causing
|
|
* any other schedules to not process correctly.
|
|
*/
|
|
protected function processSchedule(ProcessScheduleService $processScheduleService, Schedule $schedule): void
|
|
{
|
|
if ($schedule->tasks->isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
$processScheduleService->handle($schedule);
|
|
|
|
$this->line(trans('command/messages.schedule.output_line', [
|
|
'schedule' => $schedule->name,
|
|
'id' => $schedule->id,
|
|
]));
|
|
} catch (Throwable $exception) {
|
|
logger()->error($exception, ['schedule_id' => $schedule->id]);
|
|
|
|
$this->error(trans('commands.schedule.process.no_tasks') . " #$schedule->id: " . $exception->getMessage());
|
|
}
|
|
}
|
|
}
|