mirror of
https://github.com/ConvoyPanel/panel.git
synced 2026-06-14 17:33:00 +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>
114 lines
2.4 KiB
TypeScript
114 lines
2.4 KiB
TypeScript
import http from '@/api/http'
|
|
|
|
export interface DashboardMetric {
|
|
allocated: number
|
|
total: number
|
|
percent: number
|
|
}
|
|
|
|
export interface DashboardSummary {
|
|
servers: number
|
|
nodes: number
|
|
users: number
|
|
locations: number
|
|
failedServers: number
|
|
}
|
|
|
|
export interface DashboardServers {
|
|
total: number
|
|
ready: number
|
|
installing: number
|
|
suspended: number
|
|
restoring: number
|
|
deleting: number
|
|
failed: number
|
|
statuses: Record<string, number>
|
|
}
|
|
|
|
export interface DashboardAddresses {
|
|
pools: number
|
|
total: number
|
|
assigned: number
|
|
available: number
|
|
percent: number
|
|
}
|
|
|
|
export interface DashboardBackups {
|
|
total: number
|
|
successful: number
|
|
pending: number
|
|
failed: number
|
|
}
|
|
|
|
export interface DashboardIsos {
|
|
total: number
|
|
successful: number
|
|
pending: number
|
|
}
|
|
|
|
export interface DashboardNode {
|
|
id: number
|
|
name: string
|
|
cluster: string
|
|
fqdn: string
|
|
servers: number
|
|
memory: DashboardMetric
|
|
disk: DashboardMetric
|
|
}
|
|
|
|
export interface DashboardOverview {
|
|
generatedAt: string
|
|
summary: DashboardSummary
|
|
servers: DashboardServers
|
|
capacity: {
|
|
memory: DashboardMetric
|
|
disk: DashboardMetric
|
|
}
|
|
addresses: DashboardAddresses
|
|
backups: DashboardBackups
|
|
isos: DashboardIsos
|
|
nodes: DashboardNode[]
|
|
}
|
|
|
|
const rawMetric = (data: any): DashboardMetric => ({
|
|
allocated: data.allocated,
|
|
total: data.total,
|
|
percent: data.percent,
|
|
})
|
|
|
|
export const rawDataToOverview = (data: any): DashboardOverview => ({
|
|
generatedAt: data.generated_at,
|
|
summary: {
|
|
servers: data.summary.servers,
|
|
nodes: data.summary.nodes,
|
|
users: data.summary.users,
|
|
locations: data.summary.locations,
|
|
failedServers: data.summary.failed_servers,
|
|
},
|
|
servers: data.servers,
|
|
capacity: {
|
|
memory: rawMetric(data.capacity.memory),
|
|
disk: rawMetric(data.capacity.disk),
|
|
},
|
|
addresses: data.addresses,
|
|
backups: data.backups,
|
|
isos: data.isos,
|
|
nodes: data.nodes.map((node: any) => ({
|
|
id: node.id,
|
|
name: node.name,
|
|
cluster: node.cluster,
|
|
fqdn: node.fqdn,
|
|
servers: node.servers,
|
|
memory: rawMetric(node.memory),
|
|
disk: rawMetric(node.disk),
|
|
})),
|
|
})
|
|
|
|
const getOverview = async (): Promise<DashboardOverview> => {
|
|
const { data } = await http.get('/api/admin/overview')
|
|
|
|
return rawDataToOverview(data.data)
|
|
}
|
|
|
|
export default getOverview
|