mirror of
https://github.com/tiennm99/coolify.git
synced 2026-10-14 06:17:36 +00:00
feat(mcp): add resource diagnostics and deployment controls (#11000)
This commit is contained in:
1 parent
c27a5ec41e
commit
7b18777f06
54 files changed
+8471
-67
No files matched your search
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace App\Mcp\Resources;
|
||||
|
||||
use App\Mcp\Concerns\ResolvesTeam;
|
||||
use App\Models\Project;
|
||||
use App\Models\Server;
|
||||
use Laravel\Mcp\Request;
|
||||
use Laravel\Mcp\Response;
|
||||
use Laravel\Mcp\Server\Resource;
|
||||
|
||||
class InfrastructureOverviewResource extends Resource
|
||||
{
|
||||
use ResolvesTeam;
|
||||
|
||||
protected string $name = 'coolify-overview';
|
||||
|
||||
protected string $description = 'Team infrastructure overview JSON for the authenticated Coolify token.';
|
||||
|
||||
protected string $uri = 'coolify://overview';
|
||||
|
||||
protected string $mimeType = 'application/json';
|
||||
|
||||
public function handle(Request $request): Response
|
||||
{
|
||||
if ($error = $this->ensureAbility($request, 'read', $this->name)) {
|
||||
return $error;
|
||||
}
|
||||
|
||||
$teamId = $this->resolveTeamId($request);
|
||||
if (is_null($teamId)) {
|
||||
return Response::error('Invalid token.');
|
||||
}
|
||||
|
||||
$servers = Server::whereTeamId($teamId)
|
||||
->with('settings:id,server_id,is_reachable,is_usable')
|
||||
->get()
|
||||
->map(fn (Server $s) => [
|
||||
'uuid' => $s->uuid,
|
||||
'name' => $s->name,
|
||||
'ip' => $s->ip,
|
||||
'is_reachable' => $s->settings?->is_reachable,
|
||||
'is_usable' => $s->settings?->is_usable,
|
||||
])
|
||||
->values()
|
||||
->all();
|
||||
|
||||
// databases() is a Collection helper (not an Eloquent relation), so withCount
|
||||
// must target the individual standalone DB relations and sum them.
|
||||
$projects = Project::where('team_id', $teamId)
|
||||
->withCount([
|
||||
'applications',
|
||||
'services',
|
||||
'postgresqls',
|
||||
'redis',
|
||||
'mongodbs',
|
||||
'mysqls',
|
||||
'mariadbs',
|
||||
'keydbs',
|
||||
'dragonflies',
|
||||
'clickhouses',
|
||||
])
|
||||
->get()
|
||||
->map(fn (Project $project) => [
|
||||
'uuid' => $project->uuid,
|
||||
'name' => $project->name,
|
||||
'counts' => [
|
||||
'applications' => $project->applications_count,
|
||||
'services' => $project->services_count,
|
||||
'databases' => $project->postgresqls_count
|
||||
+ $project->redis_count
|
||||
+ $project->mongodbs_count
|
||||
+ $project->mysqls_count
|
||||
+ $project->mariadbs_count
|
||||
+ $project->keydbs_count
|
||||
+ $project->dragonflies_count
|
||||
+ $project->clickhouses_count,
|
||||
],
|
||||
])->values()->all();
|
||||
|
||||
return Response::text(json_encode([
|
||||
'coolify_version' => config('constants.coolify.version'),
|
||||
'servers' => $servers,
|
||||
'projects' => $projects,
|
||||
'counts' => [
|
||||
'servers' => count($servers),
|
||||
'projects' => count($projects),
|
||||
],
|
||||
], JSON_PRETTY_PRINT));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user