Handle Dokploy project composes in widget
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user