Refactor Kernel.php to improve server scheduling logic

This commit is contained in:
Andras Bacsai
2024-11-02 12:38:22 +01:00
parent 7296f726a7
commit 1c9844cc87

View File

@@ -14,6 +14,7 @@ use App\Jobs\ScheduledTaskJob;
use App\Jobs\ServerCheckJob;
use App\Jobs\ServerCleanupMux;
use App\Jobs\UpdateCoolifyJob;
use App\Models\InstanceSettings;
use App\Models\ScheduledDatabaseBackup;
use App\Models\ScheduledTask;
use App\Models\Server;
@@ -26,10 +27,13 @@ class Kernel extends ConsoleKernel
{
private $allServers;
private InstanceSettings $settings;
protected function schedule(Schedule $schedule): void
{
$this->allServers = Server::query()->whereRelation('settings', 'is_usable', true)->whereRelation('settings', 'is_reachable', true)->where('ip', '!=', '1.2.3.4')->get();
$settings = instanceSettings();
$this->allServers = Server::where('ip', '!=', '1.2.3.4')->get();
$this->settings = instanceSettings();
$schedule->job(new CleanupStaleMultiplexedConnections)->hourly();
@@ -43,14 +47,12 @@ class Kernel extends ConsoleKernel
$this->checkScheduledTasks($schedule);
$schedule->command('uploads:clear')->everyTwoMinutes();
$schedule->command('telescope:prune')->daily();
$schedule->job(new CheckHelperImageJob)->everyFiveMinutes()->onOneServer();
} else {
// Instance Jobs
$schedule->command('horizon:snapshot')->everyFiveMinutes();
$schedule->command('cleanup:unreachable-servers')->daily()->onOneServer();
$schedule->job(new PullTemplatesFromCDN)->cron($settings->update_check_frequency)->timezone($settings->instance_timezone)->onOneServer();
$schedule->job(new PullTemplatesFromCDN)->cron($this->settings->update_check_frequency)->timezone($this->settings->instance_timezone)->onOneServer();
$schedule->job(new CleanupInstanceStuffsJob)->everyTwoMinutes()->onOneServer();
$this->scheduleUpdates($schedule);
@@ -67,35 +69,33 @@ class Kernel extends ConsoleKernel
private function pullImages($schedule): void
{
$settings = instanceSettings();
foreach ($this->allServers as $server) {
$servers = $this->allServers->whereRelation('settings', 'is_usable', true)->whereRelation('settings', 'is_reachable', true);
foreach ($servers as $server) {
if ($server->isSentinelEnabled()) {
$schedule->job(function () use ($server) {
CheckAndStartSentinelJob::dispatch($server);
})->cron($settings->update_check_frequency)->timezone($settings->instance_timezone)->onOneServer();
})->cron($this->settings->update_check_frequency)->timezone($this->settings->instance_timezone)->onOneServer();
}
}
$schedule->job(new CheckHelperImageJob)
->cron($settings->update_check_frequency)
->timezone($settings->instance_timezone)
->cron($this->settings->update_check_frequency)
->timezone($this->settings->instance_timezone)
->onOneServer();
}
private function scheduleUpdates($schedule): void
{
$settings = instanceSettings();
$updateCheckFrequency = $settings->update_check_frequency;
$updateCheckFrequency = $this->settings->update_check_frequency;
$schedule->job(new CheckForUpdatesJob)
->cron($updateCheckFrequency)
->timezone($settings->instance_timezone)
->timezone($this->settings->instance_timezone)
->onOneServer();
if ($settings->is_auto_update_enabled) {
$autoUpdateFrequency = $settings->auto_update_frequency;
if ($this->settings->is_auto_update_enabled) {
$autoUpdateFrequency = $this->settings->auto_update_frequency;
$schedule->job(new UpdateCoolifyJob)
->cron($autoUpdateFrequency)
->timezone($settings->instance_timezone)
->timezone($this->settings->instance_timezone)
->onOneServer();
}
}