fix(server): enhance error handling in server patch check notifications

This commit is contained in:
Andras Bacsai
2025-05-27 14:23:16 +02:00
parent 6868ba088c
commit e005f1c838
3 changed files with 119 additions and 1 deletions

View File

@@ -31,7 +31,7 @@ class ServerPatchCheckJob implements ShouldBeEncrypted, ShouldQueue
public function handle(): void public function handle(): void
{ {
try { try {
if ($this->server->isFunctional() === false) { if ($this->server->serverStatus() === false) {
return; return;
} }
@@ -44,6 +44,8 @@ class ServerPatchCheckJob implements ShouldBeEncrypted, ShouldQueue
$patchData = CheckUpdates::run($this->server); $patchData = CheckUpdates::run($this->server);
if (isset($patchData['error'])) { if (isset($patchData['error'])) {
$team->notify(new ServerPatchCheck($this->server, $patchData));
return; // Skip if there's an error checking for updates return; // Skip if there's an error checking for updates
} }

View File

@@ -30,6 +30,21 @@ class ServerPatchCheck extends CustomEmailNotification
public function toMail($notifiable = null): MailMessage public function toMail($notifiable = null): MailMessage
{ {
$mail = new MailMessage; $mail = new MailMessage;
// Handle error case
if (isset($this->patchData['error'])) {
$mail->subject("Coolify: [ERROR] Failed to check patches on {$this->server->name}");
$mail->view('emails.server-patches-error', [
'name' => $this->server->name,
'error' => $this->patchData['error'],
'osId' => $this->patchData['osId'] ?? 'unknown',
'package_manager' => $this->patchData['package_manager'] ?? 'unknown',
'server_url' => $this->serverUrl,
]);
return $mail;
}
$totalUpdates = $this->patchData['total_updates'] ?? 0; $totalUpdates = $this->patchData['total_updates'] ?? 0;
$mail->subject("Coolify: [ACTION REQUIRED] {$totalUpdates} server patches available on {$this->server->name}"); $mail->subject("Coolify: [ACTION REQUIRED] {$totalUpdates} server patches available on {$this->server->name}");
$mail->view('emails.server-patches', [ $mail->view('emails.server-patches', [
@@ -46,6 +61,26 @@ class ServerPatchCheck extends CustomEmailNotification
public function toDiscord(): DiscordMessage public function toDiscord(): DiscordMessage
{ {
// Handle error case
if (isset($this->patchData['error'])) {
$osId = $this->patchData['osId'] ?? 'unknown';
$packageManager = $this->patchData['package_manager'] ?? 'unknown';
$error = $this->patchData['error'];
$description = "**Failed to check for updates** on server {$this->server->name}\n\n";
$description .= "**Error Details:**\n";
$description .= '• OS: '.ucfirst($osId)."\n";
$description .= "• Package Manager: {$packageManager}\n";
$description .= "• Error: {$error}\n\n";
$description .= "[Manage Server]($this->serverUrl)";
return new DiscordMessage(
title: ':x: Coolify: [ERROR] Failed to check patches on '.$this->server->name,
description: $description,
color: DiscordMessage::errorColor(),
);
}
$totalUpdates = $this->patchData['total_updates'] ?? 0; $totalUpdates = $this->patchData['total_updates'] ?? 0;
$updates = $this->patchData['updates'] ?? []; $updates = $this->patchData['updates'] ?? [];
$osId = $this->patchData['osId'] ?? 'unknown'; $osId = $this->patchData['osId'] ?? 'unknown';
@@ -92,6 +127,29 @@ class ServerPatchCheck extends CustomEmailNotification
public function toTelegram(): array public function toTelegram(): array
{ {
// Handle error case
if (isset($this->patchData['error'])) {
$osId = $this->patchData['osId'] ?? 'unknown';
$packageManager = $this->patchData['package_manager'] ?? 'unknown';
$error = $this->patchData['error'];
$message = "❌ Coolify: [ERROR] Failed to check patches on {$this->server->name}!\n\n";
$message .= "📊 Error Details:\n";
$message .= '• OS: '.ucfirst($osId)."\n";
$message .= "• Package Manager: {$packageManager}\n";
$message .= "• Error: {$error}\n\n";
return [
'message' => $message,
'buttons' => [
[
'text' => 'Manage Server',
'url' => $this->serverUrl,
],
],
];
}
$totalUpdates = $this->patchData['total_updates'] ?? 0; $totalUpdates = $this->patchData['total_updates'] ?? 0;
$updates = $this->patchData['updates'] ?? []; $updates = $this->patchData['updates'] ?? [];
$osId = $this->patchData['osId'] ?? 'unknown'; $osId = $this->patchData['osId'] ?? 'unknown';
@@ -145,6 +203,31 @@ class ServerPatchCheck extends CustomEmailNotification
public function toPushover(): PushoverMessage public function toPushover(): PushoverMessage
{ {
// Handle error case
if (isset($this->patchData['error'])) {
$osId = $this->patchData['osId'] ?? 'unknown';
$packageManager = $this->patchData['package_manager'] ?? 'unknown';
$error = $this->patchData['error'];
$message = "[ERROR] Failed to check patches on {$this->server->name}!\n\n";
$message .= "Error Details:\n";
$message .= '• OS: '.ucfirst($osId)."\n";
$message .= "• Package Manager: {$packageManager}\n";
$message .= "• Error: {$error}\n\n";
return new PushoverMessage(
title: 'Server patch check failed',
level: 'error',
message: $message,
buttons: [
[
'text' => 'Manage Server',
'url' => $this->serverUrl,
],
],
);
}
$totalUpdates = $this->patchData['total_updates'] ?? 0; $totalUpdates = $this->patchData['total_updates'] ?? 0;
$updates = $this->patchData['updates'] ?? []; $updates = $this->patchData['updates'] ?? [];
$osId = $this->patchData['osId'] ?? 'unknown'; $osId = $this->patchData['osId'] ?? 'unknown';
@@ -194,6 +277,26 @@ class ServerPatchCheck extends CustomEmailNotification
public function toSlack(): SlackMessage public function toSlack(): SlackMessage
{ {
// Handle error case
if (isset($this->patchData['error'])) {
$osId = $this->patchData['osId'] ?? 'unknown';
$packageManager = $this->patchData['package_manager'] ?? 'unknown';
$error = $this->patchData['error'];
$description = "Failed to check patches on '{$this->server->name}'!\n\n";
$description .= "*Error Details:*\n";
$description .= '• OS: '.ucfirst($osId)."\n";
$description .= "• Package Manager: {$packageManager}\n";
$description .= "• Error: `{$error}`\n\n";
$description .= "\n:link: <{$this->serverUrl}|Manage Server>";
return new SlackMessage(
title: 'Coolify: [ERROR] Server patch check failed',
description: $description,
color: SlackMessage::errorColor()
);
}
$totalUpdates = $this->patchData['total_updates'] ?? 0; $totalUpdates = $this->patchData['total_updates'] ?? 0;
$updates = $this->patchData['updates'] ?? []; $updates = $this->patchData['updates'] ?? [];
$osId = $this->patchData['osId'] ?? 'unknown'; $osId = $this->patchData['osId'] ?? 'unknown';

View File

@@ -0,0 +1,13 @@
<x-emails.layout>
Failed to check for package updates on your server {{ $name }}.
## Error Details
- Operating System: {{ ucfirst($osId) }}
- Package Manager: {{ $package_manager }}
- Error: {{ $error }}
---
You can manage your server and view more details in your [Coolify Dashboard]({{ $server_url }}).
</x-emails.layout>