Add notification-level deduplication keys and TTLs for deployment, backup, server, container, scheduled task, SSL, token, and transactional emails. Apply deduplication in email channels before sending rendered messages.
117 lines
3.6 KiB
PHP
117 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Notifications\Database;
|
|
|
|
use App\Models\ScheduledDatabaseBackup;
|
|
use App\Notifications\CustomEmailNotification;
|
|
use App\Notifications\Dto\DiscordMessage;
|
|
use App\Notifications\Dto\PushoverMessage;
|
|
use App\Notifications\Dto\SlackMessage;
|
|
use Illuminate\Notifications\Messages\MailMessage;
|
|
|
|
class BackupSuccess extends CustomEmailNotification
|
|
{
|
|
public int|string|null $backupId = null;
|
|
|
|
public string $name;
|
|
|
|
public string $frequency;
|
|
|
|
public function __construct(ScheduledDatabaseBackup $backup, public $database, public $database_name)
|
|
{
|
|
$this->onQueue('high');
|
|
$this->backupId = data_get($backup, 'uuid') ?? data_get($backup, 'id');
|
|
|
|
$this->name = $database->name;
|
|
$this->frequency = $backup->frequency;
|
|
}
|
|
|
|
public function via(object $notifiable): array
|
|
{
|
|
return $notifiable->getEnabledChannels('backup_success');
|
|
}
|
|
|
|
public function deduplicationKey(object $notifiable, string $channel): ?string
|
|
{
|
|
return "backup-success:backup:{$this->backupId}:database:{$this->database->uuid}:name:{$this->database_name}:frequency:{$this->frequency}";
|
|
}
|
|
|
|
public function deduplicateFor(): int
|
|
{
|
|
return 86400;
|
|
}
|
|
|
|
public function toMail(): MailMessage
|
|
{
|
|
$mail = new MailMessage;
|
|
$mail->subject("Coolify: Backup successfully done for {$this->database->name}");
|
|
$mail->view('emails.backup-success', [
|
|
'name' => $this->name,
|
|
'database_name' => $this->database_name,
|
|
'frequency' => $this->frequency,
|
|
]);
|
|
|
|
return $mail;
|
|
}
|
|
|
|
public function toDiscord(): DiscordMessage
|
|
{
|
|
$message = new DiscordMessage(
|
|
title: ':white_check_mark: Database backup successful',
|
|
description: "Database backup for {$this->name} (db:{$this->database_name}) was successful.",
|
|
color: DiscordMessage::successColor(),
|
|
);
|
|
|
|
$message->addField('Frequency', $this->frequency, true);
|
|
|
|
return $message;
|
|
}
|
|
|
|
public function toTelegram(): array
|
|
{
|
|
$message = "Coolify: Database backup for {$this->name} (db:{$this->database_name}) with frequency of {$this->frequency} was successful.";
|
|
|
|
return [
|
|
'message' => $message,
|
|
];
|
|
}
|
|
|
|
public function toPushover(): PushoverMessage
|
|
{
|
|
return new PushoverMessage(
|
|
title: 'Database backup successful',
|
|
level: 'success',
|
|
message: "Database backup for {$this->name} (db:{$this->database_name}) was successful.<br/><br/><b>Frequency:</b> {$this->frequency}.",
|
|
);
|
|
}
|
|
|
|
public function toSlack(): SlackMessage
|
|
{
|
|
$title = 'Database backup successful';
|
|
$description = "Database backup for {$this->name} (db:{$this->database_name}) was successful.";
|
|
|
|
$description .= "\n\n*Frequency:* {$this->frequency}";
|
|
|
|
return new SlackMessage(
|
|
title: $title,
|
|
description: $description,
|
|
color: SlackMessage::successColor()
|
|
);
|
|
}
|
|
|
|
public function toWebhook(): array
|
|
{
|
|
$url = base_url().'/project/'.data_get($this->database, 'environment.project.uuid').'/environment/'.data_get($this->database, 'environment.uuid').'/database/'.$this->database->uuid;
|
|
|
|
return [
|
|
'success' => true,
|
|
'message' => 'Database backup successful',
|
|
'event' => 'backup_success',
|
|
'database_name' => $this->name,
|
|
'database_uuid' => $this->database->uuid,
|
|
'database_type' => $this->database_name,
|
|
'frequency' => $this->frequency,
|
|
'url' => $url,
|
|
];
|
|
}
|
|
}
|