diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index dbe48200d..276a27067 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -74,6 +74,11 @@ class Kernel extends ConsoleKernel if (!$scheduled_backup->enabled) { continue; } + if (is_null(data_get($scheduled_backup,'database'))) { + ray('database not found'); + $scheduled_backup->delete(); + continue; + } if (isset(VALID_CRON_STRINGS[$scheduled_backup->frequency])) { $scheduled_backup->frequency = VALID_CRON_STRINGS[$scheduled_backup->frequency]; diff --git a/app/Jobs/DatabaseBackupJob.php b/app/Jobs/DatabaseBackupJob.php index aaef43883..d8ad4ec12 100644 --- a/app/Jobs/DatabaseBackupJob.php +++ b/app/Jobs/DatabaseBackupJob.php @@ -26,10 +26,8 @@ class DatabaseBackupJob implements ShouldQueue public ?Team $team = null; public Server $server; - public ?ScheduledDatabaseBackup $backup = null; - public string $database_type; - public ?StandalonePostgresql $database = null; - public string $database_status; + public ScheduledDatabaseBackup $backup; + public StandalonePostgresql $database; public ?string $container_name = null; public ?ScheduledDatabaseBackupExecution $backup_log = null; @@ -45,14 +43,8 @@ class DatabaseBackupJob implements ShouldQueue { $this->backup = $backup; $this->team = Team::find($backup->team_id); - $this->database = $this->backup->database; - if (!$this->database) { - ray('Database not found'); - return; - } - $this->database_type = $this->database->type(); + $this->database = data_get($this->backup, 'database'); $this->server = $this->database->destination->server; - $this->database_status = $this->database->status; $this->s3 = $this->backup->s3; } @@ -69,7 +61,7 @@ class DatabaseBackupJob implements ShouldQueue public function handle(): void { try { - if ($this->database_status !== 'running') { + if (data_get($this->database, 'status') !== 'running') { ray('database not running'); return; } @@ -88,7 +80,7 @@ class DatabaseBackupJob implements ShouldQueue 'filename' => $this->backup_location, 'scheduled_database_backup_id' => $this->backup->id, ]); - if ($this->database_type === 'standalone-postgresql') { + if ($this->database->type() === 'standalone-postgresql') { $this->backup_standalone_postgresql(); } $this->calculate_size(); @@ -103,7 +95,6 @@ class DatabaseBackupJob implements ShouldQueue send_internal_notification('DatabaseBackupJob failed with: ' . $th->getMessage()); throw $th; } - } private function backup_standalone_postgresql(): void diff --git a/app/Models/StandalonePostgresql.php b/app/Models/StandalonePostgresql.php index 6c00e302c..e0b95c5db 100644 --- a/app/Models/StandalonePostgresql.php +++ b/app/Models/StandalonePostgresql.php @@ -28,6 +28,11 @@ class StandalonePostgresql extends BaseModel 'is_readonly' => true ]); }); + static::deleted(function ($database) { + $database->scheduledBackups()->delete(); + $database->persistentStorages()->delete(); + instant_remote_process(['docker volume rm postgres-data-' . $database->uuid], $database->destination->server, false); + }); } public function portsMappings(): Attribute diff --git a/config/sentry.php b/config/sentry.php index 86a4adee0..e841af1f9 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ return [ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.29', + 'release' => '4.0.0-beta.30', 'server_name' => env('APP_ID', 'coolify'), // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index c9f3c92a2..92e32ea12 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@