Add capacity overview with host resource history

This commit is contained in:
2026-10-05 12:06:29 -04:00
parent 7c76851252
commit 09ef8c6ec8
19 changed files with 845 additions and 10 deletions
+63
View File
@@ -0,0 +1,63 @@
import type { CapacityCalibration, HostReadiness } from './hosts.js';
export type CapacityRange = '1h' | '24h' | '7d';
export type CapacityGame = 'all' | 't5' | 't6';
export interface CapacityQuery { range: CapacityRange; hostId: string | null; game: CapacityGame }
export function parseCapacityQuery(params: URLSearchParams): CapacityQuery {
const range = params.get('range');
const game = params.get('game');
return { range: range === '1h' || range === '7d' ? range : '24h',
game: game === 't5' || game === 't6' ? game : 'all', hostId: params.get('host')?.trim().slice(0, 100) || null };
}
export interface CapacityHistoryPoint {
at: number;
cpuCoresAvailable: number | null;
memoryBytesAvailable: number | null;
reportingHosts: number;
expectedHosts: number;
}
export interface CapacityHistory {
range: CapacityRange;
startAt: number;
endAt: number;
bucketMs: number;
points: CapacityHistoryPoint[];
}
export interface CapacityHost {
id: string;
name: string;
readiness: HostReadiness;
connected: boolean;
updatedAt: string | null;
eligible: boolean;
games: ('t5' | 't6')[];
reasons: string[];
cpuCoresAvailable: number | null;
memoryBytesAvailable: number | null;
portsAvailable: number;
totalPorts: number;
estimatedServers: number | null;
limits: { cpu: number | null; memory: number | null; ports: number };
limitingResource: 'CPU' | 'Memory' | 'Ports' | null;
calibration: CapacityCalibration;
}
export interface CapacityCurrent {
updatedAt: string | null;
summary: {
estimatedServers: number | null;
cpuCoresAvailable: number | null;
memoryBytesAvailable: number | null;
portsAvailable: number | null;
eligibleHosts: number;
totalHosts: number;
startupSlots: number | null;
startupLimit: number | null;
activeStartups: number | null;
queued: number | null;
};
hosts: CapacityHost[];
hostOptions: { id: string; name: string }[];
warnings: string[];
}
export interface CapacityData { query: CapacityQuery; current: CapacityCurrent; history: CapacityHistory }