From 78b194cb161e7f7c1cefefb5239c85c4b9fcd6f0 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 6 Feb 2024 15:42:31 +0100 Subject: [PATCH] Refactor application status update logic and add complex_status column --- app/Jobs/ContainerStatusJob.php | 12 +++++++++-- app/Livewire/Project/Application/Heading.php | 21 ++++++++++++------- app/Models/Application.php | 3 +++ app/Models/Server.php | 14 +++++++++++-- ..._06_132748_add_additional_destinations.php | 2 ++ 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php index 86c879a3b..14a90604f 100644 --- a/app/Jobs/ContainerStatusJob.php +++ b/app/Jobs/ContainerStatusJob.php @@ -126,7 +126,16 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted $foundApplications[] = $application->id; $statusFromDb = $application->status; if ($statusFromDb !== $containerStatus) { + // if ($application->additional_networks->count() > 0) { + // } + // if (!str($containerStatus)->contains('running')) { + // $application->update(['status' => 'degraded']); + // } else { + // $application->update(['status' => $containerStatus]); + // } + // } else { $application->update(['status' => $containerStatus]); + // } } } else { //Notify user that this container should not be there. @@ -160,10 +169,9 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted // Notify user that this container should not be there. } } - if (data_get($container,'Name') === '/coolify-db') { + if (data_get($container, 'Name') === '/coolify-db') { $foundDatabases[] = 0; } - } $serviceLabelId = data_get($labels, 'coolify.serviceId'); if ($serviceLabelId) { diff --git a/app/Livewire/Project/Application/Heading.php b/app/Livewire/Project/Application/Heading.php index 070a215d1..04320efda 100644 --- a/app/Livewire/Project/Application/Heading.php +++ b/app/Livewire/Project/Application/Heading.php @@ -29,14 +29,19 @@ class Heading extends Component public function check_status($showNotification = false) { - if ($this->application->destination->server->isFunctional()) { - dispatch(new ContainerStatusJob($this->application->destination->server)); - $this->application->refresh(); - $this->application->previews->each(function ($preview) { - $preview->refresh(); - }); - } else { - dispatch(new ServerStatusJob($this->application->destination->server)); + $all_servers = collect([]); + $all_servers = $all_servers->push($this->application->destination->server); + $all_servers = $all_servers->merge($this->application->additional_servers); + foreach ($all_servers as $server) { + if ($server->isFunctional()) { + dispatch(new ContainerStatusJob($server)); + $this->application->refresh(); + $this->application->previews->each(function ($preview) { + $preview->refresh(); + }); + } else { + dispatch(new ServerStatusJob($this->application->destination->server)); + } } if ($showNotification) $this->dispatch('success', "Application status updated."); } diff --git a/app/Models/Application.php b/app/Models/Application.php index 0a43f7723..1a41802ba 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -15,6 +15,9 @@ class Application extends BaseModel { use SoftDeletes; protected $guarded = []; + // protected $casts = [ + // 'complex_status' => 'json', + // ]; protected static function booted() { static::saving(function ($application) { diff --git a/app/Models/Server.php b/app/Models/Server.php index b3f4abc61..bdbb0309d 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -9,6 +9,7 @@ use App\Notifications\Server\Revived; use App\Notifications\Server\Unreachable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; +use Illuminate\Support\Facades\DB; use Spatie\SchemalessAttributes\Casts\SchemalessAttributes; use Spatie\SchemalessAttributes\SchemalessAttributesTrait; use Illuminate\Support\Str; @@ -248,9 +249,17 @@ class Server extends BaseModel } public function applications() { - return $this->destinations()->map(function ($standaloneDocker) { + $applications = $this->destinations()->map(function ($standaloneDocker) { return $standaloneDocker->applications; })->flatten(); + $additionalApplicationIds = DB::table('additional_destinations')->where('server_id', $this->id)->get('application_id'); + $additionalApplicationIds = collect($additionalApplicationIds)->map(function ($item) { + return $item->application_id; + }); + Application::whereIn('id', $additionalApplicationIds)->get()->each(function ($application) use ($applications) { + $applications->push($application); + }); + return $applications; } public function dockerComposeBasedApplications() { @@ -300,7 +309,8 @@ class Server extends BaseModel { $standalone_docker = $this->hasMany(StandaloneDocker::class)->get(); $swarm_docker = $this->hasMany(SwarmDocker::class)->get(); - return $standalone_docker->concat($swarm_docker); + $asd = $this->belongsToMany(StandaloneDocker::class, 'additional_destinations')->withPivot('server_id')->get(); + return $standalone_docker->concat($swarm_docker)->concat($asd); } public function standaloneDockers() diff --git a/database/migrations/2024_02_06_132748_add_additional_destinations.php b/database/migrations/2024_02_06_132748_add_additional_destinations.php index d751fcc40..8b18c4824 100644 --- a/database/migrations/2024_02_06_132748_add_additional_destinations.php +++ b/database/migrations/2024_02_06_132748_add_additional_destinations.php @@ -20,6 +20,7 @@ return new class extends Migration }); Schema::table('applications', function (Blueprint $table) { $table->dropColumn('additional_destinations'); + $table->text('complex_status')->nullable(); }); } @@ -31,6 +32,7 @@ return new class extends Migration Schema::dropIfExists('additional_destinations'); Schema::table('applications', function (Blueprint $table) { $table->string('additional_destinations')->nullable()->after('destination'); + $table->dropColumn('complex_status'); }); } };