Fix Traefik warning persistence after proxy configuration update (#7466)

This commit is contained in:
Andras Bacsai 2025-12-03 09:57:14 +01:00 committed by GitHub
commit fb8eb3fa37
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 30 additions and 15 deletions

View file

@ -2,6 +2,7 @@
namespace App\Jobs; namespace App\Jobs;
use App\Events\ProxyStatusChangedUI;
use App\Models\Server; use App\Models\Server;
use App\Notifications\Server\TraefikVersionOutdated; use App\Notifications\Server\TraefikVersionOutdated;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
@ -38,6 +39,8 @@ public function handle(): void
$this->server->update(['detected_traefik_version' => $currentVersion]); $this->server->update(['detected_traefik_version' => $currentVersion]);
if (! $currentVersion) { if (! $currentVersion) {
ProxyStatusChangedUI::dispatch($this->server->team_id);
return; return;
} }
@ -48,16 +51,22 @@ public function handle(): void
// Handle empty/null response from SSH command // Handle empty/null response from SSH command
if (empty(trim($imageTag))) { if (empty(trim($imageTag))) {
ProxyStatusChangedUI::dispatch($this->server->team_id);
return; return;
} }
if (str_contains(strtolower(trim($imageTag)), ':latest')) { if (str_contains(strtolower(trim($imageTag)), ':latest')) {
ProxyStatusChangedUI::dispatch($this->server->team_id);
return; return;
} }
// Parse current version to extract major.minor.patch // Parse current version to extract major.minor.patch
$current = ltrim($currentVersion, 'v'); $current = ltrim($currentVersion, 'v');
if (! preg_match('/^(\d+\.\d+)\.(\d+)$/', $current, $matches)) { if (! preg_match('/^(\d+\.\d+)\.(\d+)$/', $current, $matches)) {
ProxyStatusChangedUI::dispatch($this->server->team_id);
return; return;
} }
@ -77,6 +86,8 @@ public function handle(): void
$this->server->update(['traefik_outdated_info' => null]); $this->server->update(['traefik_outdated_info' => null]);
} }
ProxyStatusChangedUI::dispatch($this->server->team_id);
return; return;
} }
@ -96,6 +107,9 @@ public function handle(): void
// Fully up to date // Fully up to date
$this->server->update(['traefik_outdated_info' => null]); $this->server->update(['traefik_outdated_info' => null]);
} }
// Dispatch UI update event so warning state refreshes in real-time
ProxyStatusChangedUI::dispatch($this->server->team_id);
} }
/** /**

View file

@ -2,10 +2,13 @@
namespace App\Listeners; namespace App\Listeners;
use App\Enums\ProxyTypes;
use App\Events\ProxyStatusChanged; use App\Events\ProxyStatusChanged;
use App\Events\ProxyStatusChangedUI; use App\Events\ProxyStatusChangedUI;
use App\Jobs\CheckTraefikVersionForServerJob;
use App\Models\Server; use App\Models\Server;
use Illuminate\Contracts\Queue\ShouldQueueAfterCommit; use Illuminate\Contracts\Queue\ShouldQueueAfterCommit;
use Illuminate\Support\Facades\Log;
class ProxyStatusChangedNotification implements ShouldQueueAfterCommit class ProxyStatusChangedNotification implements ShouldQueueAfterCommit
{ {
@ -32,6 +35,19 @@ public function handle(ProxyStatusChanged $event)
$server->setupDynamicProxyConfiguration(); $server->setupDynamicProxyConfiguration();
$server->proxy->force_stop = false; $server->proxy->force_stop = false;
$server->save(); $server->save();
// Check Traefik version after proxy is running
if ($server->proxyType() === ProxyTypes::TRAEFIK->value) {
$traefikVersions = get_traefik_versions();
if ($traefikVersions !== null) {
CheckTraefikVersionForServerJob::dispatch($server, $traefikVersions);
} else {
Log::warning('Traefik version check skipped after proxy status change: versions.json data unavailable', [
'server_id' => $server->id,
'server_name' => $server->name,
]);
}
}
} }
if ($status === 'created') { if ($status === 'created') {
instant_remote_process([ instant_remote_process([

View file

@ -6,11 +6,9 @@
use App\Actions\Proxy\StartProxy; use App\Actions\Proxy\StartProxy;
use App\Actions\Proxy\StopProxy; use App\Actions\Proxy\StopProxy;
use App\Enums\ProxyTypes; use App\Enums\ProxyTypes;
use App\Jobs\CheckTraefikVersionForServerJob;
use App\Models\Server; use App\Models\Server;
use App\Services\ProxyDashboardCacheService; use App\Services\ProxyDashboardCacheService;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\Log;
use Livewire\Component; use Livewire\Component;
class Navbar extends Component class Navbar extends Component
@ -70,19 +68,6 @@ public function restart()
$activity = StartProxy::run($this->server, force: true, restarting: true); $activity = StartProxy::run($this->server, force: true, restarting: true);
$this->dispatch('activityMonitor', $activity->id); $this->dispatch('activityMonitor', $activity->id);
// Check Traefik version after restart to provide immediate feedback
if ($this->server->proxyType() === ProxyTypes::TRAEFIK->value) {
$traefikVersions = get_traefik_versions();
if ($traefikVersions !== null) {
CheckTraefikVersionForServerJob::dispatch($this->server, $traefikVersions);
} else {
Log::warning('Traefik version check skipped: versions.json data unavailable', [
'server_id' => $this->server->id,
'server_name' => $this->server->name,
]);
}
}
} catch (\Throwable $e) { } catch (\Throwable $e) {
return handleError($e, $this); return handleError($e, $this);
} }