From bbaef0360244717fcbcf7f1a4d1ab04a8214fdc9 Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Fri, 10 Oct 2025 09:35:54 +0200
Subject: [PATCH] fix: update Hetzner server status handling to prevent
unnecessary database updates and improve UI responsiveness
---
app/Livewire/Server/Show.php | 12 +-
.../views/livewire/server/show.blade.php | 127 +++++++++++-------
2 files changed, 82 insertions(+), 57 deletions(-)
diff --git a/app/Livewire/Server/Show.php b/app/Livewire/Server/Show.php
index e758f0f54..1d82ead9e 100644
--- a/app/Livewire/Server/Show.php
+++ b/app/Livewire/Server/Show.php
@@ -388,11 +388,13 @@ public function checkHetznerServerStatus(bool $manual = false)
$this->hetznerServerStatus = $serverData['status'] ?? null;
- // Save status to database
- $this->server->update(['hetzner_server_status' => $this->hetznerServerStatus]);
-
- if ($manual) {
- $this->dispatch('success', 'Server status refreshed: '.ucfirst($this->hetznerServerStatus ?? 'unknown'));
+ // Save status to database without triggering model events
+ if ($this->server->hetzner_server_status !== $this->hetznerServerStatus) {
+ $this->server->hetzner_server_status = $this->hetznerServerStatus;
+ $this->server->update(['hetzner_server_status' => $this->hetznerServerStatus]);
+ if ($manual) {
+ $this->dispatch('success', 'Server status refreshed: '.ucfirst($this->hetznerServerStatus ?? 'unknown'));
+ }
}
// If Hetzner server is off but Coolify thinks it's still reachable, update Coolify's state
diff --git a/resources/views/livewire/server/show.blade.php b/resources/views/livewire/server/show.blade.php
index f47f24b20..5f99ad97f 100644
--- a/resources/views/livewire/server/show.blade.php
+++ b/resources/views/livewire/server/show.blade.php
@@ -10,19 +10,38 @@
General
@if ($server->hetzner_server_id)
-
-
-
-
-
- @if ($hetznerServerStatus)
-
- @if (in_array($hetznerServerStatus, ['starting', 'initializing']))
+
+
+
+
+
+
+ @if ($hetznerServerStatus)
+
+ @if (in_array($hetznerServerStatus, ['starting', 'initializing']))
+
+
+
+
+
+ @endif
+ $hetznerServerStatus === 'running',
+ 'text-red-500' => $hetznerServerStatus === 'off',
+ ])>
+ {{ ucfirst($hetznerServerStatus) }}
+
+
+ @else
+
- @endif
- $hetznerServerStatus === 'running',
- 'text-red-500' => $hetznerServerStatus === 'off',
- ])>
- {{ ucfirst($hetznerServerStatus) }}
+ Checking status...
-
- @else
-
-
-
-
-
-
- Checking status...
-
- @endif
+ @endif
+
+
+
+
+
+
+
+
+
+
+
@if ($server->cloudProviderToken && !$server->isFunctional() && $hetznerServerStatus === 'off')
@if ($server->isSentinelLive())
- Save
- Restart
+ Save
+ Restart
Sentinel Logs
- Logs
+ Logs
@else
- Save
- Sync
+ Save
+ Sync
Sentinel Logs
- Logs
+ Logs
@endif
@@ -345,14 +365,14 @@ class="w-full input opacity-50 cursor-not-allowed"
+ label="Enable Sentinel" :disabled="$isValidating" />
@if ($server->isSentinelEnabled())
@if (isDev())
+ label="Enable Sentinel (with debug)" instantSave :disabled="$isValidating" />
@endif
+ id="isMetricsEnabled" label="Enable Metrics" :disabled="$isValidating" />
@else
@if (isDev())
isSentinelEnabled())
+ label="Sentinel token" required helper="Token for Sentinel." :disabled="$isValidating" />
Regenerate
+ wire:click="regenerateSentinelToken" :disabled="$isValidating">Regenerate
+ helper="URL to your Coolify instance. If it is empty that means you do not have a FQDN set for your Coolify instance."
+ :disabled="$isValidating" />
+ helper="Interval used for gathering metrics. Lower values result in more disk space usage."
+ :disabled="$isValidating" />
+ helper="Number of days to retain metrics data for." :disabled="$isValidating" />
+ helper="Interval at which metrics data is sent to the collector."
+ :disabled="$isValidating" />
@endif