diff --git a/app/Actions/Database/StartClickhouse.php b/app/Actions/Database/StartClickhouse.php index 42c6e1449..f218fcabb 100644 --- a/app/Actions/Database/StartClickhouse.php +++ b/app/Actions/Database/StartClickhouse.php @@ -49,11 +49,7 @@ class StartClickhouse 'hard' => 262144, ], ], - 'labels' => [ - 'coolify.managed' => 'true', - 'coolify.type' => 'database', - 'coolify.databaseId' => $this->database->id, - ], + 'labels' => defaultDatabaseLabels($this->database)->toArray(), 'healthcheck' => [ 'test' => "clickhouse-client --password {$this->database->clickhouse_admin_password} --query 'SELECT 1'", 'interval' => '5s', diff --git a/app/Actions/Database/StartDragonfly.php b/app/Actions/Database/StartDragonfly.php index ea235be4e..4f9f45b7c 100644 --- a/app/Actions/Database/StartDragonfly.php +++ b/app/Actions/Database/StartDragonfly.php @@ -46,11 +46,7 @@ class StartDragonfly 'networks' => [ $this->database->destination->network, ], - 'labels' => [ - 'coolify.managed' => 'true', - 'coolify.type' => 'database', - 'coolify.databaseId' => $this->database->id, - ], + 'labels' => defaultDatabaseLabels($this->database)->toArray(), 'healthcheck' => [ 'test' => "redis-cli -a {$this->database->dragonfly_password} ping", 'interval' => '5s', diff --git a/app/Actions/Database/StartKeydb.php b/app/Actions/Database/StartKeydb.php index 010bf5884..6c733d318 100644 --- a/app/Actions/Database/StartKeydb.php +++ b/app/Actions/Database/StartKeydb.php @@ -48,11 +48,7 @@ class StartKeydb 'networks' => [ $this->database->destination->network, ], - 'labels' => [ - 'coolify.managed' => 'true', - 'coolify.type' => 'database', - 'coolify.databaseId' => $this->database->id, - ], + 'labels' => defaultDatabaseLabels($this->database)->toArray(), 'healthcheck' => [ 'test' => "keydb-cli --pass {$this->database->keydb_password} ping", 'interval' => '5s', diff --git a/app/Actions/Database/StartMariadb.php b/app/Actions/Database/StartMariadb.php index 2437a013e..299b07385 100644 --- a/app/Actions/Database/StartMariadb.php +++ b/app/Actions/Database/StartMariadb.php @@ -43,11 +43,7 @@ class StartMariadb 'networks' => [ $this->database->destination->network, ], - 'labels' => [ - 'coolify.managed' => 'true', - 'coolify.type' => 'database', - 'coolify.databaseId' => $this->database->id, - ], + 'labels' => defaultDatabaseLabels($this->database)->toArray(), 'healthcheck' => [ 'test' => ['CMD', 'healthcheck.sh', '--connect', '--innodb_initialized'], 'interval' => '5s', diff --git a/app/Actions/Database/StartMongodb.php b/app/Actions/Database/StartMongodb.php index a33e72c27..89d35ca7b 100644 --- a/app/Actions/Database/StartMongodb.php +++ b/app/Actions/Database/StartMongodb.php @@ -51,11 +51,7 @@ class StartMongodb 'networks' => [ $this->database->destination->network, ], - 'labels' => [ - 'coolify.managed' => 'true', - 'coolify.type' => 'database', - 'coolify.databaseId' => $this->database->id, - ], + 'labels' => defaultDatabaseLabels($this->database)->toArray(), 'healthcheck' => [ 'test' => [ 'CMD', diff --git a/app/Actions/Database/StartMysql.php b/app/Actions/Database/StartMysql.php index 0b19b3f0c..73db1512a 100644 --- a/app/Actions/Database/StartMysql.php +++ b/app/Actions/Database/StartMysql.php @@ -43,11 +43,7 @@ class StartMysql 'networks' => [ $this->database->destination->network, ], - 'labels' => [ - 'coolify.managed' => 'true', - 'coolify.type' => 'database', - 'coolify.databaseId' => $this->database->id, - ], + 'labels' => defaultDatabaseLabels($this->database)->toArray(), 'healthcheck' => [ 'test' => ['CMD', 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', "-p{$this->database->mysql_root_password}"], 'interval' => '5s', diff --git a/app/Actions/Database/StartPostgresql.php b/app/Actions/Database/StartPostgresql.php index ebfe61f82..035849340 100644 --- a/app/Actions/Database/StartPostgresql.php +++ b/app/Actions/Database/StartPostgresql.php @@ -50,11 +50,7 @@ class StartPostgresql 'networks' => [ $this->database->destination->network, ], - 'labels' => [ - 'coolify.managed' => 'true', - 'coolify.type' => 'database', - 'coolify.databaseId' => $this->database->id, - ], + 'labels' => defaultDatabaseLabels($this->database)->toArray(), 'healthcheck' => [ 'test' => [ 'CMD-SHELL', diff --git a/app/Actions/Database/StartRedis.php b/app/Actions/Database/StartRedis.php index bacf49f82..1beebd134 100644 --- a/app/Actions/Database/StartRedis.php +++ b/app/Actions/Database/StartRedis.php @@ -48,11 +48,7 @@ class StartRedis 'networks' => [ $this->database->destination->network, ], - 'labels' => [ - 'coolify.managed' => 'true', - 'coolify.type' => 'database', - 'coolify.databaseId' => $this->database->id, - ], + 'labels' => defaultDatabaseLabels($this->database)->toArray(), 'healthcheck' => [ 'test' => [ 'CMD-SHELL', diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index 12005ce60..1bc69578c 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -1693,7 +1693,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue return escapeDollarSign($value); }); } - $labels = $labels->merge(defaultLabels($this->application->id, $this->application->uuid, $this->pull_request_id))->toArray(); + $labels = $labels->merge(defaultLabels($this->application->id, $this->application->uuid, $this->application->project()->name, $this->application->name, $this->application->environment->name, $this->pull_request_id))->toArray(); // Check for custom HEALTHCHECK if ($this->application->build_pack === 'dockerfile' || $this->application->dockerfile) { diff --git a/bootstrap/helpers/docker.php b/bootstrap/helpers/docker.php index eda2133a7..d2a46d1d2 100644 --- a/bootstrap/helpers/docker.php +++ b/bootstrap/helpers/docker.php @@ -188,7 +188,20 @@ function get_port_from_dockerfile($dockerfile): ?int return null; } -function defaultLabels($id, $name, $pull_request_id = 0, string $type = 'application', $subType = null, $subId = null) +function defaultDatabaseLabels($database) { + $labels = collect([]); + $labels->push('coolify.managed=true'); + $labels->push('coolify.type=database'); + $labels->push('coolify.databaseId='.$database->id); + $labels->push('coolify.resourceName='.Str::slug($database->name)); + $labels->push('coolify.serviceName='.Str::slug($database->name)); + $labels->push('coolify.projectName='.Str::slug($database->project()->name)); + $labels->push('coolify.environmentName='.Str::slug($database->environment->name)); + + return $labels; +} + +function defaultLabels($id, $name, string $projectName, string $resourceName, string $environment, $pull_request_id = 0, string $type = 'application', $subType = null, $subId = null, $subName = null) { $labels = collect([]); $labels->push('coolify.managed=true'); @@ -196,14 +209,21 @@ function defaultLabels($id, $name, $pull_request_id = 0, string $type = 'applica $labels->push('coolify.'.$type.'Id='.$id); $labels->push("coolify.type=$type"); $labels->push('coolify.name='.$name); + $labels->push('coolify.resourceName='.Str::slug($resourceName)); + $labels->push('coolify.projectName='.Str::slug($projectName)); + $labels->push('coolify.serviceName='.Str::slug($subName ?? $resourceName)); + $labels->push('coolify.environmentName='.Str::slug($environment)); + $labels->push('coolify.pullRequestId='.$pull_request_id); if ($type === 'service') { $subId && $labels->push('coolify.service.subId='.$subId); $subType && $labels->push('coolify.service.subType='.$subType); + $subName && $labels->push('coolify.service.subName='.Str::slug($subName)); } return $labels; } + function generateServiceSpecificFqdns(ServiceApplication|Application $resource) { if ($resource->getMorphClass() === \App\Models\ServiceApplication::class) { diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index b9fde2070..4cd40f203 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -1990,7 +1990,17 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal } else { $fqdns = collect(data_get($savedService, 'fqdns'))->filter(); } - $defaultLabels = defaultLabels($resource->id, $containerName, type: 'service', subType: $isDatabase ? 'database' : 'application', subId: $savedService->id); + $defaultLabels = defaultLabels( + id: $resource->id, + name: $containerName, + projectName: $resource->project()->name, + resourceName: $resource->name, + type: 'service', + subType: $isDatabase ? 'database' : 'application', + subId: $savedService->id, + subName: $savedService->name, + environment: $resource->environment->name, + ); $serviceLabels = $serviceLabels->merge($defaultLabels); if (! $isDatabase && $fqdns->count() > 0) { if ($fqdns) { @@ -2818,7 +2828,16 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal } } } - $defaultLabels = defaultLabels($resource->id, $containerName, $pull_request_id, type: 'application'); + + $defaultLabels = defaultLabels( + id: $resource->id, + name: $containerName, + projectName: $resource->project()->name, + resourceName: $resource->name, + environment: $resource->environment->name, + pull_request_id: $pull_request_id, + type: 'application' + ); $serviceLabels = $serviceLabels->merge($defaultLabels); if ($server->isLogDrainEnabled()) { @@ -3612,11 +3631,15 @@ function newParser(Application|Service $resource, int $pull_request_id = 0, ?int } } } + $defaultLabels = defaultLabels( id: $resource->id, name: $containerName, + projectName: $resource->project()->name, + resourceName: $resource->name, pull_request_id: $pullRequestId, - type: 'application' + type: 'application', + environment: $resource->environment->name, ); } elseif ($isService) { if ($savedService->serviceType()) { @@ -3624,7 +3647,18 @@ function newParser(Application|Service $resource, int $pull_request_id = 0, ?int } else { $fqdns = collect(data_get($savedService, 'fqdns'))->filter(); } - $defaultLabels = defaultLabels($resource->id, $containerName, type: 'service', subType: $isDatabase ? 'database' : 'application', subId: $savedService->id); + + $defaultLabels = defaultLabels( + id: $resource->id, + name: $containerName, + projectName: $resource->project()->name, + resourceName: $resource->name, + type: 'service', + subType: $isDatabase ? 'database' : 'application', + subId: $savedService->id, + subName: $savedService->human_name ?? $savedService->name, + environment: $resource->environment->name, + ); } // Add COOLIFY_FQDN & COOLIFY_URL to environment if (! $isDatabase && $fqdns instanceof Collection && $fqdns->count() > 0) {