diff --git a/app/Jobs/ServerStatusJob.php b/app/Jobs/ServerStatusJob.php index d91961bcb..63033d7b8 100644 --- a/app/Jobs/ServerStatusJob.php +++ b/app/Jobs/ServerStatusJob.php @@ -17,7 +17,7 @@ class ServerStatusJob implements ShouldQueue, ShouldBeEncrypted use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public int|string|null $disk_usage = null; - public $tries = 4; + public $tries = 3; public function backoff(): int { return isDev() ? 1 : 3; diff --git a/app/Models/Server.php b/app/Models/Server.php index 54cc134aa..19da8d784 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -10,7 +10,6 @@ use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Sleep; use Spatie\SchemalessAttributes\Casts\SchemalessAttributes; use Spatie\SchemalessAttributes\SchemalessAttributesTrait; use Illuminate\Support\Str; @@ -468,53 +467,63 @@ public function isServerReady(int $tries = 3) if ($this->skipServer()) { return false; } - $checkIteration = 1; - $isServerReady = false; - while ($checkIteration < $tries) { - ['uptime' => $uptime] = $this->validateConnection(); - if ($uptime) { - if ($this->unreachable_notification_sent === true) { - $this->update(['unreachable_notification_sent' => false]); + $serverUptimeCheckNumber = $this->unreachable_count; + if ($this->unreachable_count < $tries) { + $serverUptimeCheckNumber = $this->unreachable_count + 1; + } + if ($this->unreachable_count > $tries) { + $serverUptimeCheckNumber = $tries; + } + + $serverUptimeCheckNumberMax = $tries; + + // ray('server: ' . $this->name); + // ray('serverUptimeCheckNumber: ' . $serverUptimeCheckNumber); + // ray('serverUptimeCheckNumberMax: ' . $serverUptimeCheckNumberMax); + + ['uptime' => $uptime] = $this->validateConnection(); + if ($uptime) { + if ($this->unreachable_notification_sent === true) { + $this->update(['unreachable_notification_sent' => false]); + } + return true; + } else { + if ($serverUptimeCheckNumber >= $serverUptimeCheckNumberMax) { + // Reached max number of retries + if ($this->unreachable_notification_sent === false) { + ray('Server unreachable, sending notification...'); + $this->team?->notify(new Unreachable($this)); + $this->update(['unreachable_notification_sent' => true]); + } + if ($this->settings->is_reachable === true) { + $this->settings()->update([ + 'is_reachable' => false, + ]); + } + + foreach ($this->applications() as $application) { + $application->update(['status' => 'exited']); + } + foreach ($this->databases() as $database) { + $database->update(['status' => 'exited']); + } + foreach ($this->services()->get() as $service) { + $apps = $service->applications()->get(); + $dbs = $service->databases()->get(); + foreach ($apps as $app) { + $app->update(['status' => 'exited']); + } + foreach ($dbs as $db) { + $db->update(['status' => 'exited']); + } } - $this->settings()->update([ - 'is_reachable' => true, - ]); - $isServerReady = true; - break; } else { - ray('Server is not ready yet.'); - $checkIteration++; - Sleep::for(10)->seconds(); + $this->update([ + 'unreachable_count' => $this->unreachable_count + 1, + ]); } + return false; } - if ($isServerReady) { - return $isServerReady; - } - if ($this->unreachable_notification_sent === false) { - ray('Server unreachable, sending notification...'); - $this->team?->notify(new Unreachable($this)); - $this->update(['unreachable_notification_sent' => true]); - } - $this->settings()->update([ - 'is_reachable' => false, - ]); - foreach ($this->applications() as $application) { - $application->update(['status' => 'exited']); - } - foreach ($this->databases() as $database) { - $database->update(['status' => 'exited']); - } - foreach ($this->services()->get() as $service) { - $apps = $service->applications()->get(); - $dbs = $service->databases()->get(); - foreach ($apps as $app) { - $app->update(['status' => 'exited']); - } - foreach ($dbs as $db) { - $db->update(['status' => 'exited']); - } - } - return false; } public function getDiskUsage() { @@ -762,11 +771,6 @@ public function validateConnection() $server->settings()->update([ 'is_reachable' => false, ]); - if (data_get($server, 'unreachable_notification_sent') === false) { - ray('Server unreachable, sending notification...'); - $this->team?->notify(new Unreachable($this)); - $this->update(['unreachable_notification_sent' => true]); - } return ['uptime' => false, 'error' => $e->getMessage()]; } } diff --git a/config/sentry.php b/config/sentry.php index 6629fefab..633e5bcd6 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.273', + 'release' => '4.0.0-beta.274', // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index a5706892f..3cb55c8fd 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@