Load Dokploy project details for compose data
This commit is contained in:
@@ -33,17 +33,39 @@ class DokployPlatformHealth extends Widget
|
||||
}
|
||||
|
||||
foreach ($projectMap as $label => $projectId) {
|
||||
$project = $client->findProject((string) $projectId);
|
||||
$project = [];
|
||||
$projectIdString = (string) $projectId;
|
||||
|
||||
try {
|
||||
$project = $client->project($projectIdString);
|
||||
} catch (\Throwable $exception) {
|
||||
$project = [];
|
||||
}
|
||||
|
||||
if (empty($project)) {
|
||||
$project = $client->findProject($projectIdString) ?? [];
|
||||
|
||||
$resolvedProjectId = Arr::get($project, 'projectId');
|
||||
|
||||
if ($resolvedProjectId) {
|
||||
try {
|
||||
$project = $client->project((string) $resolvedProjectId);
|
||||
} catch (\Throwable $exception) {
|
||||
$project = $project;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! $project) {
|
||||
$results[] = [
|
||||
'label' => ucfirst((string) $label),
|
||||
'project_id' => (string) $projectId,
|
||||
'name' => (string) $projectId,
|
||||
'project_id' => $projectIdString,
|
||||
'name' => $projectIdString,
|
||||
'status' => 'unreachable',
|
||||
'error' => "Project {$projectId} not found.",
|
||||
'error' => "Project {$projectIdString} not found.",
|
||||
'applications' => [],
|
||||
'services' => [],
|
||||
'composes' => [],
|
||||
'updated_at' => null,
|
||||
];
|
||||
|
||||
@@ -57,8 +79,8 @@ class DokployPlatformHealth extends Widget
|
||||
|
||||
$results[] = [
|
||||
'label' => ucfirst((string) $label),
|
||||
'project_id' => Arr::get($project, 'projectId', $projectId),
|
||||
'name' => Arr::get($project, 'name') ?? Arr::get($project, 'projectName') ?? (string) $projectId,
|
||||
'project_id' => Arr::get($project, 'projectId', $projectIdString),
|
||||
'name' => Arr::get($project, 'name') ?? Arr::get($project, 'projectName') ?? $projectIdString,
|
||||
'description' => Arr::get($project, 'description'),
|
||||
'status' => $this->deriveProjectStatus($applications, $services, $composes),
|
||||
'applications' => $applications,
|
||||
|
||||
@@ -49,6 +49,17 @@ class DokployClient
|
||||
}, 60);
|
||||
}
|
||||
|
||||
public function project(string $projectId): array
|
||||
{
|
||||
return $this->cached($this->projectCacheKey($projectId), function () use ($projectId) {
|
||||
$project = $this->get('/project.one', [
|
||||
'projectId' => $projectId,
|
||||
]);
|
||||
|
||||
return is_array($project) ? $project : [];
|
||||
}, 60);
|
||||
}
|
||||
|
||||
public function findProject(string $projectIdOrName): ?array
|
||||
{
|
||||
$projects = $this->projects();
|
||||
@@ -357,6 +368,11 @@ class DokployClient
|
||||
return 'dokploy.projects';
|
||||
}
|
||||
|
||||
protected function projectCacheKey(string $projectId): string
|
||||
{
|
||||
return "dokploy.project.{$projectId}";
|
||||
}
|
||||
|
||||
protected function forgetApplicationCaches(string $applicationId): void
|
||||
{
|
||||
Cache::forget($this->applicationCacheKey($applicationId));
|
||||
|
||||
@@ -24,7 +24,7 @@ class DokployPlatformHealthWidgetTest extends TestCase
|
||||
]);
|
||||
|
||||
$fakeClient = Mockery::mock(DokployClient::class);
|
||||
$fakeClient->shouldReceive('findProject')
|
||||
$fakeClient->shouldReceive('project')
|
||||
->with('proj_1')
|
||||
->andReturn([
|
||||
'projectId' => 'proj_1',
|
||||
|
||||
Reference in New Issue
Block a user