fix: remove success application deployment job
wip: daily backup status
This commit is contained in:
		| @@ -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 (isDev()) { | ||||||
|  |             $this->email = "test@example.com"; | ||||||
|  |         } else { | ||||||
|             if (!in_array($type, $emailsGathered)) { |             if (!in_array($type, $emailsGathered)) { | ||||||
|             $this->email = text('Email Address to send to'); |                 $this->email = text('Email Address to send to:'); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         set_transanctional_email_settings(); |         set_transanctional_email_settings(); | ||||||
| 
 | 
 | ||||||
| @@ -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> | ||||||
		Reference in New Issue
	
	Block a user
	 Andras Bacsai
					Andras Bacsai