fix: remove success application deployment job
wip: daily backup status
This commit is contained in:
parent
54923b7640
commit
2eb7712e09
@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Console\Commands;
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Jobs\DatabaseBackupStatusJob;
|
||||||
use App\Jobs\SendConfirmationForWaitlistJob;
|
use App\Jobs\SendConfirmationForWaitlistJob;
|
||||||
use App\Models\Application;
|
use App\Models\Application;
|
||||||
use App\Models\ApplicationPreview;
|
use App\Models\ApplicationPreview;
|
||||||
use App\Models\ScheduledDatabaseBackup;
|
use App\Models\ScheduledDatabaseBackup;
|
||||||
|
use App\Models\ScheduledDatabaseBackupExecution;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Models\StandalonePostgresql;
|
use App\Models\StandalonePostgresql;
|
||||||
use App\Models\Team;
|
use App\Models\Team;
|
||||||
@ -15,6 +17,7 @@ use App\Notifications\Application\DeploymentSuccess;
|
|||||||
use App\Notifications\Application\StatusChanged;
|
use App\Notifications\Application\StatusChanged;
|
||||||
use App\Notifications\Database\BackupFailed;
|
use App\Notifications\Database\BackupFailed;
|
||||||
use App\Notifications\Database\BackupSuccess;
|
use App\Notifications\Database\BackupSuccess;
|
||||||
|
use App\Notifications\Database\DailyBackup;
|
||||||
use App\Notifications\Test;
|
use App\Notifications\Test;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
@ -54,6 +57,8 @@ class Emails extends Command
|
|||||||
options: [
|
options: [
|
||||||
'updates' => 'Send Update Email to all users',
|
'updates' => 'Send Update Email to all users',
|
||||||
'emails-test' => 'Test',
|
'emails-test' => 'Test',
|
||||||
|
'database-backup-statuses-daily' => 'Database - Backup Statuses (Daily)',
|
||||||
|
'application-deployment-success-daily' => 'Application - Deployment Success (Daily)',
|
||||||
'application-deployment-success' => 'Application - Deployment Success',
|
'application-deployment-success' => 'Application - Deployment Success',
|
||||||
'application-deployment-failed' => 'Application - Deployment Failed',
|
'application-deployment-failed' => 'Application - Deployment Failed',
|
||||||
'application-status-changed' => 'Application - Status Changed',
|
'application-status-changed' => 'Application - Status Changed',
|
||||||
@ -67,8 +72,12 @@ class Emails extends Command
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
$emailsGathered = ['realusers-before-trial', 'realusers-server-lost-connection'];
|
$emailsGathered = ['realusers-before-trial', 'realusers-server-lost-connection'];
|
||||||
if (!in_array($type, $emailsGathered)) {
|
if (isDev()) {
|
||||||
$this->email = text('Email Address to send to');
|
$this->email = "test@example.com";
|
||||||
|
} else {
|
||||||
|
if (!in_array($type, $emailsGathered)) {
|
||||||
|
$this->email = text('Email Address to send to:');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
set_transanctional_email_settings();
|
set_transanctional_email_settings();
|
||||||
|
|
||||||
@ -102,7 +111,7 @@ class Emails extends Command
|
|||||||
$unsubscribeUrl = route('unsubscribe.marketing.emails', [
|
$unsubscribeUrl = route('unsubscribe.marketing.emails', [
|
||||||
'token' => encrypt($email),
|
'token' => encrypt($email),
|
||||||
]);
|
]);
|
||||||
$this->mail->view('emails.updates',["unsubscribeUrl" => $unsubscribeUrl]);
|
$this->mail->view('emails.updates', ["unsubscribeUrl" => $unsubscribeUrl]);
|
||||||
$this->sendEmail($email);
|
$this->sendEmail($email);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,6 +120,35 @@ class Emails extends Command
|
|||||||
$this->mail = (new Test())->toMail();
|
$this->mail = (new Test())->toMail();
|
||||||
$this->sendEmail();
|
$this->sendEmail();
|
||||||
break;
|
break;
|
||||||
|
case 'database-backup-statuses-daily':
|
||||||
|
$scheduled_backups = ScheduledDatabaseBackup::all();
|
||||||
|
$databases = collect();
|
||||||
|
foreach ($scheduled_backups as $scheduled_backup) {
|
||||||
|
$last_days_backups = $scheduled_backup->get_last_days_backup_status();
|
||||||
|
if ($last_days_backups->isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$failed = $last_days_backups->where('status', 'failed');
|
||||||
|
$database = $scheduled_backup->database;
|
||||||
|
$databases->put($database->name, [
|
||||||
|
'failed_count' => $failed->count(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
$this->mail = (new DailyBackup($databases))->toMail();
|
||||||
|
$this->sendEmail();
|
||||||
|
break;
|
||||||
|
case 'application-deployment-success-daily':
|
||||||
|
$applications = Application::all();
|
||||||
|
foreach ($applications as $application) {
|
||||||
|
$deployments = $application->get_last_days_deployments();
|
||||||
|
ray($deployments);
|
||||||
|
if ($deployments->isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$this->mail = (new DeploymentSuccess($application, 'test'))->toMail();
|
||||||
|
$this->sendEmail();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'application-deployment-success':
|
case 'application-deployment-success':
|
||||||
$application = Application::all()->first();
|
$application = Application::all()->first();
|
||||||
$this->mail = (new DeploymentSuccess($application, 'test'))->toMail();
|
$this->mail = (new DeploymentSuccess($application, 'test'))->toMail();
|
||||||
|
@ -1651,7 +1651,7 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
|
|||||||
if (!$this->only_this_server) {
|
if (!$this->only_this_server) {
|
||||||
$this->deploy_to_additional_destinations();
|
$this->deploy_to_additional_destinations();
|
||||||
}
|
}
|
||||||
$this->application->environment->project->team?->notify(new DeploymentSuccess($this->application, $this->deployment_uuid, $this->preview));
|
// $this->application->environment->project->team?->notify(new DeploymentSuccess($this->application, $this->deployment_uuid, $this->preview));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
74
app/Jobs/DatabaseBackupStatusJob.php
Normal file
74
app/Jobs/DatabaseBackupStatusJob.php
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Jobs;
|
||||||
|
|
||||||
|
use App\Models\ScheduledDatabaseBackup;
|
||||||
|
use App\Models\Server;
|
||||||
|
use App\Models\Team;
|
||||||
|
use App\Notifications\Database\DailyBackup;
|
||||||
|
use App\Notifications\Server\HighDiskUsage;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldBeEncrypted;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\Middleware\WithoutOverlapping;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class DatabaseBackupStatusJob implements ShouldQueue, ShouldBeEncrypted
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
public $tries = 1;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
// $teams = Team::all();
|
||||||
|
// foreach ($teams as $team) {
|
||||||
|
// $scheduled_backups = $team->scheduledDatabaseBackups()->get();
|
||||||
|
// if ($scheduled_backups->isEmpty()) {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
// foreach ($scheduled_backups as $scheduled_backup) {
|
||||||
|
// $last_days_backups = $scheduled_backup->get_last_days_backup_status();
|
||||||
|
// if ($last_days_backups->isEmpty()) {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
// $failed = $last_days_backups->where('status', 'failed');
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// $scheduled_backups = ScheduledDatabaseBackup::all();
|
||||||
|
// $databases = collect();
|
||||||
|
// $teams = collect();
|
||||||
|
// foreach ($scheduled_backups as $scheduled_backup) {
|
||||||
|
// $last_days_backups = $scheduled_backup->get_last_days_backup_status();
|
||||||
|
// if ($last_days_backups->isEmpty()) {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
// $failed = $last_days_backups->where('status', 'failed');
|
||||||
|
// $database = $scheduled_backup->database;
|
||||||
|
// $team = $database->team();
|
||||||
|
// $teams->put($team->id, $team);
|
||||||
|
// $databases->put("{$team->id}:{$database->name}", [
|
||||||
|
// 'failed_count' => $failed->count(),
|
||||||
|
// ]);
|
||||||
|
// }
|
||||||
|
// foreach ($databases as $name => $database) {
|
||||||
|
// [$team_id, $name] = explode(':', $name);
|
||||||
|
// $team = $teams->get($team_id);
|
||||||
|
// $team?->notify(new DailyBackup($databases));
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
@ -65,7 +65,8 @@ class Application extends BaseModel
|
|||||||
return $this->belongsToMany(StandaloneDocker::class, 'additional_destinations')
|
return $this->belongsToMany(StandaloneDocker::class, 'additional_destinations')
|
||||||
->withPivot('server_id', 'status');
|
->withPivot('server_id', 'status');
|
||||||
}
|
}
|
||||||
public function is_public_repository(): bool {
|
public function is_public_repository(): bool
|
||||||
|
{
|
||||||
if (data_get($this, 'source.is_public')) {
|
if (data_get($this, 'source.is_public')) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -401,7 +402,10 @@ class Application extends BaseModel
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
public function get_last_days_deployments()
|
||||||
|
{
|
||||||
|
return ApplicationDeploymentQueue::where('application_id', $this->id)->where('created_at', '>=', now()->subDays(7))->orderBy('created_at', 'desc')->get();
|
||||||
|
}
|
||||||
public function deployments(int $skip = 0, int $take = 10)
|
public function deployments(int $skip = 0, int $take = 10)
|
||||||
{
|
{
|
||||||
$deployments = ApplicationDeploymentQueue::where('application_id', $this->id)->orderBy('created_at', 'desc');
|
$deployments = ApplicationDeploymentQueue::where('application_id', $this->id)->orderBy('created_at', 'desc');
|
||||||
|
@ -30,4 +30,8 @@ class ScheduledDatabaseBackup extends BaseModel
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(S3Storage::class, 's3_storage_id');
|
return $this->belongsTo(S3Storage::class, 's3_storage_id');
|
||||||
}
|
}
|
||||||
|
public function get_last_days_backup_status($days = 7)
|
||||||
|
{
|
||||||
|
return $this->hasMany(ScheduledDatabaseBackupExecution::class)->where('created_at', '>=', now()->subDays($days))->get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
50
app/Notifications/Database/DailyBackup.php
Normal file
50
app/Notifications/Database/DailyBackup.php
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Notifications\Database;
|
||||||
|
|
||||||
|
use App\Models\ScheduledDatabaseBackup;
|
||||||
|
use App\Notifications\Channels\DiscordChannel;
|
||||||
|
use App\Notifications\Channels\TelegramChannel;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Notifications\Channels\MailChannel;
|
||||||
|
use Illuminate\Notifications\Messages\MailMessage;
|
||||||
|
use Illuminate\Notifications\Notification;
|
||||||
|
|
||||||
|
class DailyBackup extends Notification implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Queueable;
|
||||||
|
|
||||||
|
public $tries = 1;
|
||||||
|
|
||||||
|
public function __construct(public $databases)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function via(object $notifiable): array
|
||||||
|
{
|
||||||
|
return [DiscordChannel::class, TelegramChannel::class, MailChannel::class];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function toMail(): MailMessage
|
||||||
|
{
|
||||||
|
$mail = new MailMessage();
|
||||||
|
$mail->subject("Coolify: Daily backup statuses");
|
||||||
|
$mail->view('emails.daily-backup', [
|
||||||
|
'databases' => $this->databases,
|
||||||
|
]);
|
||||||
|
return $mail;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function toDiscord(): string
|
||||||
|
{
|
||||||
|
return "Coolify: Daily backup statuses";
|
||||||
|
}
|
||||||
|
public function toTelegram(): array
|
||||||
|
{
|
||||||
|
$message = "Coolify: Daily backup statuses";
|
||||||
|
return [
|
||||||
|
"message" => $message,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
19
resources/views/emails/daily-backup.blade.php
Normal file
19
resources/views/emails/daily-backup.blade.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<x-emails.layout>
|
||||||
|
@foreach ($databases as $database_name => $databases)
|
||||||
|
|
||||||
|
@if(data_get($databases,'failed_count') > 0)
|
||||||
|
|
||||||
|
<div style="color:red">
|
||||||
|
|
||||||
|
"{{ $database_name }}" backups: There were some failed backups. Please login and check the logs for more details.
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@else
|
||||||
|
|
||||||
|
"{{ $database_name }}" backups: All backups were successful.
|
||||||
|
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@endforeach
|
||||||
|
</x-emails.layout>
|
Loading…
x
Reference in New Issue
Block a user