Files
nuc-portal/src/lib/stats.ts
Alejandro Gutiérrez 8583ae52c6 Add Overview tab with system vitals and replace WhyRating tab
- Add /stats Python API endpoint on NUC (CPU, RAM, Swap, Disk, uptime, load avg)
- Add VitalsBar component in header showing CPU/RAM/Disk mini bars
- Add Overview as new default landing tab with system health, service summary,
  recent deployments, quick links, and WhyRating project status
- Poll system stats every 30s, deployments every 30s on overview tab
- Remove standalone WhyRating tab (content moved to Overview)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 22:12:00 +01:00

41 lines
1.1 KiB
TypeScript

export interface SystemStats {
cpu_percent: number;
ram_total_mb: number;
ram_used_mb: number;
ram_percent: number;
swap_total_mb: number;
swap_used_mb: number;
swap_percent: number;
disk_total_gb: number;
disk_used_gb: number;
disk_percent: number;
uptime_seconds: number;
load_avg: [number, number, number];
}
export function getVitalsColor(percent: number): string {
if (percent >= 90) return 'text-red-500';
if (percent >= 70) return 'text-amber-500';
return 'text-emerald-500';
}
export function getVitalsBg(percent: number): string {
if (percent >= 90) return 'bg-red-500';
if (percent >= 70) return 'bg-amber-500';
return 'bg-emerald-500';
}
export function getVitalsTrack(percent: number): string {
if (percent >= 90) return 'bg-red-500/20';
if (percent >= 70) return 'bg-amber-500/20';
return 'bg-emerald-500/20';
}
export function formatUptime(seconds: number): string {
const days = Math.floor(seconds / 86400);
const hours = Math.floor((seconds % 86400) / 3600);
if (days > 0) return `${days}d ${hours}h`;
const mins = Math.floor((seconds % 3600) / 60);
return `${hours}h ${mins}m`;
}