diff --git a/app/Filament/Widgets/DokployPlatformHealth.php b/app/Filament/Widgets/DokployPlatformHealth.php
index f582339..93a6acb 100644
--- a/app/Filament/Widgets/DokployPlatformHealth.php
+++ b/app/Filament/Widgets/DokployPlatformHealth.php
@@ -52,6 +52,7 @@ class DokployPlatformHealth extends Widget
$applicationsPayload = Arr::get($project, 'applications', []);
$applications = $this->formatApplications(is_array($applicationsPayload) ? $applicationsPayload : [], $client);
+ $composes = $this->formatProjectComposes($project, $client);
$services = $this->formatProjectServices($project);
$results[] = [
@@ -59,11 +60,13 @@ class DokployPlatformHealth extends Widget
'project_id' => Arr::get($project, 'projectId', $projectId),
'name' => Arr::get($project, 'name') ?? Arr::get($project, 'projectName') ?? (string) $projectId,
'description' => Arr::get($project, 'description'),
- 'status' => $this->deriveProjectStatus($applications, $services),
+ 'status' => $this->deriveProjectStatus($applications, $services, $composes),
'applications' => $applications,
+ 'composes' => $composes,
'services' => $services,
'updated_at' => Arr::get($project, 'updatedAt') ?? Arr::get($project, 'createdAt'),
'applications_count' => count($applications),
+ 'composes_count' => count($composes),
'services_count' => count($services),
];
}
@@ -204,6 +207,52 @@ class DokployPlatformHealth extends Widget
->all();
}
+ protected function formatProjectComposes(array $project, DokployClient $client): array
+ {
+ $composes = (array) Arr::get($project, 'compose', []);
+
+ return collect($composes)
+ ->map(function (array $compose) use ($client) {
+ $composeId = Arr::get($compose, 'composeId') ?? Arr::get($compose, 'id');
+ $statusPayload = [];
+ $deployments = [];
+
+ if ($composeId) {
+ try {
+ $statusPayload = $client->composeStatus($composeId);
+ $deployments = $client->composeDeployments($composeId, 1);
+ } catch (\Throwable $exception) {
+ $statusPayload = [];
+ $deployments = [];
+ }
+ }
+
+ $composeDetails = Arr::get($statusPayload, 'compose', []);
+
+ return [
+ 'id' => $composeId,
+ 'name' => Arr::get($compose, 'name')
+ ?? Arr::get($compose, 'appName')
+ ?? Arr::get($composeDetails, 'name')
+ ?? Arr::get($composeDetails, 'appName')
+ ?? $composeId,
+ 'status' => Arr::get($compose, 'composeStatus')
+ ?? Arr::get($compose, 'status')
+ ?? Arr::get($composeDetails, 'composeStatus')
+ ?? Arr::get($composeDetails, 'status')
+ ?? 'unknown',
+ 'last_deploy' => Arr::get($deployments, '0.createdAt')
+ ?? Arr::get($deployments, '0.created_at')
+ ?? Arr::get($compose, 'updatedAt')
+ ?? Arr::get($composeDetails, 'updatedAt'),
+ 'services' => $this->formatServices(Arr::get($statusPayload, 'services', [])),
+ ];
+ })
+ ->filter(fn (array $compose) => filled($compose['name']))
+ ->values()
+ ->all();
+ }
+
protected function normalizeServiceList(array $services, string $type, string $idKey, string $statusKey): array
{
return collect($services)
@@ -246,11 +295,12 @@ class DokployPlatformHealth extends Widget
return $metrics;
}
- protected function deriveProjectStatus(array $applications, array $services): string
+ protected function deriveProjectStatus(array $applications, array $services, array $composes): string
{
$statuses = collect($applications)
->pluck('status')
->merge(collect($services)->pluck('status'))
+ ->merge(collect($composes)->pluck('status'))
->filter()
->map(fn ($status) => strtolower((string) $status))
->values();
diff --git a/resources/views/filament/widgets/dokploy-platform-health.blade.php b/resources/views/filament/widgets/dokploy-platform-health.blade.php
index a8fd7eb..1538525 100644
--- a/resources/views/filament/widgets/dokploy-platform-health.blade.php
+++ b/resources/views/filament/widgets/dokploy-platform-health.blade.php
@@ -83,6 +83,9 @@