mirror of
https://github.com/ConvoyPanel/panel.git
synced 2026-06-23 23:44:30 +08:00
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>
75 lines
2.9 KiB
PHP
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'],
|
|
];
|
|
}
|
|
}
|