diff --git a/app/Actions/Docker/GetContainersStatus.php b/app/Actions/Docker/GetContainersStatus.php index a1476e120..f34c8e4c9 100644 --- a/app/Actions/Docker/GetContainersStatus.php +++ b/app/Actions/Docker/GetContainersStatus.php @@ -46,10 +46,11 @@ class GetContainersStatus } $this->applications = $this->server->applications(); $skip_these_applications = collect([]); + $dockerInspectCache = []; foreach ($this->applications as $application) { if ($application->additional_servers->count() > 0) { $skip_these_applications->push($application); - ComplexStatusCheck::run($application); + ComplexStatusCheck::run($application, $dockerInspectCache); $this->applications = $this->applications->filter(function ($value, $key) use ($application) { return $value->id !== $application->id; }); diff --git a/app/Actions/Shared/ComplexStatusCheck.php b/app/Actions/Shared/ComplexStatusCheck.php index 3649be986..3d37ea8d4 100644 --- a/app/Actions/Shared/ComplexStatusCheck.php +++ b/app/Actions/Shared/ComplexStatusCheck.php @@ -12,7 +12,7 @@ class ComplexStatusCheck use AsAction; use CalculatesExcludedStatus; - public function handle(Application $application) + public function handle(Application $application, array &$dockerInspectCache = []) { $servers = $application->additional_servers; $servers->push($application->destination->server); @@ -29,8 +29,20 @@ class ComplexStatusCheck continue; } } - $containers = instant_remote_process(["docker container inspect $(docker container ls -q --filter 'label=coolify.applicationId={$application->id}' --filter 'label=coolify.pullRequestId=0') --format '{{json .}}'"], $server, false); - $containers = format_docker_command_output_to_json($containers); + + if (!isset($dockerInspectCache[$server->id])) { + $allContainers = instant_remote_process(["docker container inspect $(docker ps -aq --filter 'label=coolify.pullRequestId=0') --format 'json'"], $server, false); + $allContainers = format_docker_command_output_to_json($allContainers); + $dockerInspectCache[$server->id] = $allContainers; + } + $allContainers = $dockerInspectCache[$server->id]; + + $containers = collect($allContainers)->filter(function ($container) use ($application) { + $labels = data_get($container, 'Config.Labels', []); + $appId = data_get($labels, 'coolify.applicationId'); + + return $appId && intval($appId) === $application->id; + }); if ($containers->count() > 0) { $statusToSet = $this->aggregateContainerStatuses($application, $containers); diff --git a/app/Jobs/PushServerUpdateJob.php b/app/Jobs/PushServerUpdateJob.php index e6c64ada7..29151e2d2 100644 --- a/app/Jobs/PushServerUpdateJob.php +++ b/app/Jobs/PushServerUpdateJob.php @@ -580,8 +580,9 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue, Silenced private function updateAdditionalServersStatus() { + $dockerInspectCache = []; $this->allApplicationsWithAdditionalServers->each(function ($application) { - ComplexStatusCheck::run($application); + ComplexStatusCheck::run($application, $dockerInspectCache); }); }