Files
panel/app/Transformers/Admin/OverviewTransformer.php
Eric Wang 8e1729ec6f feat: add admin overview dashboard with metrics endpoint
Adds /api/admin/overview returning cached aggregate metrics for servers,
nodes, capacity, addresses, backups, and ISOs, plus a refreshed admin
dashboard UI consuming it via SWR.

Refactored from #153:
- Split OverviewService into focused per-section methods over a single
  orchestrator, dropping the monolithic freshMetrics()
- Dropped the recent-activity panel and supporting index migration —
  ActivityLog has no writers in the codebase, so the panel always
  rendered empty
- Removed the 999.99 percent cap; overallocation is a legitimate state
  and the frontend already clamps bar width
- Added capacity byte-conversion and restoring-bucket test cases

Co-Authored-By: Ajdin <AjdinDev@users.noreply.github.com>
2026-05-28 21:22:40 -04:00

75 lines
2.9 KiB
PHP

<?php
namespace Convoy\Transformers\Admin;
use League\Fractal\TransformerAbstract;
class OverviewTransformer extends TransformerAbstract
{
public function transform(array $overview): array
{
return [
'generated_at' => $overview['generated_at'],
'summary' => [
'servers' => $overview['summary']['servers'],
'nodes' => $overview['summary']['nodes'],
'users' => $overview['summary']['users'],
'locations' => $overview['summary']['locations'],
'failed_servers' => $overview['summary']['failed_servers'],
],
'servers' => [
'total' => $overview['servers']['total'],
'ready' => $overview['servers']['ready'],
'installing' => $overview['servers']['installing'],
'suspended' => $overview['servers']['suspended'],
'restoring' => $overview['servers']['restoring'],
'deleting' => $overview['servers']['deleting'],
'failed' => $overview['servers']['failed'],
'statuses' => $overview['servers']['statuses'],
],
'capacity' => [
'memory' => $this->metric($overview['capacity']['memory']),
'disk' => $this->metric($overview['capacity']['disk']),
],
'addresses' => [
'pools' => $overview['addresses']['pools'],
'total' => $overview['addresses']['total'],
'assigned' => $overview['addresses']['assigned'],
'available' => $overview['addresses']['available'],
'percent' => $overview['addresses']['percent'],
],
'backups' => [
'total' => $overview['backups']['total'],
'successful' => $overview['backups']['successful'],
'pending' => $overview['backups']['pending'],
'failed' => $overview['backups']['failed'],
],
'isos' => [
'total' => $overview['isos']['total'],
'successful' => $overview['isos']['successful'],
'pending' => $overview['isos']['pending'],
],
'nodes' => collect($overview['nodes'])
->map(fn (array $node) => [
'id' => $node['id'],
'name' => $node['name'],
'cluster' => $node['cluster'],
'fqdn' => $node['fqdn'],
'servers' => $node['servers'],
'memory' => $this->metric($node['memory']),
'disk' => $this->metric($node['disk']),
])
->all(),
];
}
private function metric(array $metric): array
{
return [
'allocated' => $metric['allocated'],
'total' => $metric['total'],
'percent' => $metric['percent'],
];
}
}