Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v4.0.0-beta.380 #4649

Merged
merged 11 commits into from
Dec 27, 2024
Prev Previous commit
Next Next commit
fix: unreachable notifications
  • Loading branch information
peaklabs-dev committed Dec 23, 2024
commit f26853b57661b5503328e7daa3896093733ae8c0
3 changes: 3 additions & 0 deletions app/Console/Commands/CloudCleanupSubscriptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 2,7 @@

namespace App\Console\Commands;

use App\Events\ServerReachabilityChanged;
use App\Models\Team;
use Illuminate\Console\Command;

Expand Down Expand Up @@ -92,6 93,8 @@ private function disableServers(Team $team)
$server->update([
'ip' => '1.2.3.4',
]);

ServerReachabilityChanged::dispatch($server);
}
}
}
Expand Down
17 changes: 17 additions & 0 deletions app/Events/ServerReachabilityChanged.php
Original file line number Diff line number Diff line change
@@ -0,0 1,17 @@
<?php

namespace App\Events;

use App\Models\Server;
use Illuminate\Foundation\Events\Dispatchable;

class ServerReachabilityChanged
{
use Dispatchable;

public function __construct(
public readonly Server $server
) {
$this->server->isReachableChanged();
}
}
7 changes: 1 addition & 6 deletions app/Jobs/ServerCheckJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 31,7 @@ public function middleware(): array
return [(new WithoutOverlapping($this->server->uuid))->dontRelease()];
}

public function __construct(public Server $server)
{
if (isDev()) {
$this->handle();
}
}
public function __construct(public Server $server) {}

public function handle()
{
Expand Down
2 changes: 2 additions & 0 deletions app/Livewire/Server/Show.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 4,7 @@

use App\Actions\Server\StartSentinel;
use App\Actions\Server\StopSentinel;
use App\Events\ServerReachabilityChanged;
use App\Models\Server;
use Livewire\Attributes\Computed;
use Livewire\Attributes\Validate;
Expand Down Expand Up @@ -202,6 203,7 @@ public function checkLocalhostConnection()
$this->server->settings->is_reachable = $this->isReachable = true;
$this->server->settings->is_usable = $this->isUsable = true;
$this->server->settings->save();
ServerReachabilityChanged::dispatch($this->server);
$this->dispatch('proxyStatusUpdated');
} else {
$this->dispatch('error', 'Server is not reachable.', 'Please validate your configuration and connection.<br><br>Check this <a target="_blank" class="underline" href="https://coolify.io/docs/knowledge-base/server/openssh">documentation</a> for further help. <br><br>Error: '.$error);
Expand Down
61 changes: 57 additions & 4 deletions app/Models/Server.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 6,7 @@
use App\Actions\Server\InstallDocker;
use App\Actions\Server\StartSentinel;
use App\Enums\ProxyTypes;
use App\Events\ServerReachabilityChanged;
use App\Jobs\CheckAndStartSentinelJob;
use App\Notifications\Server\Reachable;
use App\Notifications\Server\Unreachable;
Expand Down Expand Up @@ -1024,14 1025,63 @@ public function isReachableChanged()
$this->refresh();
$unreachableNotificationSent = (bool) $this->unreachable_notification_sent;
$isReachable = (bool) $this->settings->is_reachable;
// If the server is reachable, send the reachable notification if it was sent before

\Log::debug('Server reachability check', [
'server_id' => $this->id,
'is_reachable' => $isReachable,
'notification_sent' => $unreachableNotificationSent,
'unreachable_count' => $this->unreachable_count,
]);

if ($isReachable === true) {
$this->unreachable_count = 0;
$this->save();

if ($unreachableNotificationSent === true) {
\Log::debug('Server is now reachable, sending notification', [
'server_id' => $this->id,
]);
$this->sendReachableNotification();
}
} else {
// If the server is unreachable, send the unreachable notification if it was not sent before
if ($unreachableNotificationSent === false) {

return;
}

$this->increment('unreachable_count');
\Log::debug('Incremented unreachable count', [
'server_id' => $this->id,
'new_count' => $this->unreachable_count,
]);

if ($this->unreachable_count === 1) {
$this->settings->is_reachable = true;
$this->settings->save();
\Log::debug('First unreachable attempt, marking as reachable', [
'server_id' => $this->id,
]);

return;
}

if ($this->unreachable_count >= 2 && ! $unreachableNotificationSent) {
$failedChecks = 0;
for ($i = 0; $i < 3; $i ) {
$status = $this->serverStatus();
\Log::debug('Additional reachability check', [
'server_id' => $this->id,
'attempt' => $i 1,
'status' => $status,
]);
sleep(5);
if (! $status) {
$failedChecks ;
}
}

if ($failedChecks === 3 && ! $unreachableNotificationSent) {
\Log::debug('Server confirmed unreachable after 3 attempts, sending notification', [
'server_id' => $this->id,
]);
$this->sendUnreachableNotification();
}
}
Expand Down Expand Up @@ -1065,6 1115,7 @@ public function validateConnection(bool $justCheckingNewKey = false)
if ($this->settings->is_reachable === false) {
$this->settings->is_reachable = true;
$this->settings->save();
ServerReachabilityChanged::dispatch($this);
}

return ['uptime' => true, 'error' => null];
Expand All @@ -1075,6 1126,7 @@ public function validateConnection(bool $justCheckingNewKey = false)
if ($this->settings->is_reachable === true) {
$this->settings->is_reachable = false;
$this->settings->save();
ServerReachabilityChanged::dispatch($this);
}

return ['uptime' => false, 'error' => $e->getMessage()];
Expand Down Expand Up @@ -1165,6 1217,7 @@ public function validateDockerEngineVersion()
$this->settings->is_reachable = true;
$this->settings->is_usable = true;
$this->settings->save();
ServerReachabilityChanged::dispatch($this);

return true;
}
Expand Down
3 changes: 0 additions & 3 deletions app/Models/ServerSetting.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 85,6 @@ protected static function booted()
) {
$settings->server->restartSentinel();
}
if ($settings->isDirty('is_reachable')) {
$settings->server->isReachableChanged();
}
});
}

Expand Down
2 changes: 2 additions & 0 deletions app/Models/Team.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 2,7 @@

namespace App\Models;

use App\Events\ServerReachabilityChanged;
use App\Notifications\Channels\SendsDiscord;
use App\Notifications\Channels\SendsEmail;
use App\Notifications\Channels\SendsPushover;
Expand Down Expand Up @@ -202,6 203,7 @@ public function subscriptionEnded()
'is_usable' => false,
'is_reachable' => false,
]);
ServerReachabilityChanged::dispatch($server);
}
}

Expand Down
Loading