refactor: add caching for docker inspect results for ComplexStatusCheck

This commit is contained in:
H01001000 2025-12-12 20:27:25 -08:00
parent 6b88481ce2
commit 5a34f180eb
No known key found for this signature in database
GPG key ID: 3794A5F6B719C5DF
3 changed files with 19 additions and 5 deletions

View file

@ -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;
});

View file

@ -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);

View file

@ -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);
});
}