wip: services

This commit is contained in:
Andras Bacsai
2023-09-21 17:48:31 +02:00
parent 301469de6b
commit 6b75ff7de4
29 changed files with 632 additions and 427 deletions

View File

@@ -74,6 +74,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
$containers = format_docker_command_output_to_json($containers);
$applications = $this->server->applications();
$databases = $this->server->databases();
$services = $this->server->services();
$previews = $this->server->previews();
/// Check if proxy is running
@@ -92,6 +93,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
$foundApplications = [];
$foundApplicationPreviews = [];
$foundDatabases = [];
$foundServices = [];
foreach ($containers as $container) {
$containerStatus = data_get($container, 'State.Status');
$labels = data_get($container, 'Config.Labels');
@@ -138,7 +140,69 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted
}
}
}
$serviceLabelId = data_get($labels, 'coolify.serviceId');
if ($serviceLabelId) {
$coolifyName = data_get($labels, 'coolify.name');
$serviceName = Str::of($coolifyName)->before('-');
$serviceUuid = Str::of($coolifyName)->after('-');
$service = $services->where('uuid', $serviceUuid)->first();
if ($service) {
$foundService = $service->byName($serviceName);
if ($foundService) {
$foundServices[] = "$foundService->id-$serviceName";
$statusFromDb = $foundService->status;
if ($statusFromDb !== $containerStatus) {
ray('Updating status: ' . $containerStatus);
$foundService->update(['status' => $containerStatus]);
}
}
}
}
}
$exitedServices = collect([]);
foreach ($services->get() as $service) {
$apps = $service->applications()->get();
$dbs = $service->databases()->get();
foreach ($apps as $app) {
if (in_array("$service->id-$app->name", $foundServices)) {
continue;
} else {
$exitedServices->push($service);
$app->update(['status' => 'exited']);
}
}
foreach ($dbs as $db) {
if (in_array("$service->id-$db->name", $foundServices)) {
continue;
} else {
$exitedServices->push($service);
$db->update(['status' => 'exited']);
}
}
}
$exitedServices = $exitedServices->unique('id');
ray($exitedServices);
// ray($exitedServices);
// foreach ($serviceIds as $serviceId) {
// $service = $services->where('id', $serviceId)->first();
// if ($service->status === 'exited') {
// continue;
// }
// $name = data_get($service, 'name');
// $fqdn = data_get($service, 'fqdn');
// $containerName = $name ? "$name ($fqdn)" : $fqdn;
// $project = data_get($service, 'environment.project');
// $environment = data_get($service, 'environment');
// $url = base_url() . '/project/' . $project->uuid . "/" . $environment->name . "/service/" . $service->uuid;
// $this->server->team->notify(new ContainerStopped($containerName, $this->server, $url));
// }
$notRunningApplications = $applications->pluck('id')->diff($foundApplications);
foreach ($notRunningApplications as $applicationId) {
$application = $applications->where('id', $applicationId)->first();