mirror of
https://github.com/YuzuZensai/Minikura.git
synced 2026-03-30 21:27:36 +00:00
✨ feat: topology, and improves handling
This commit is contained in:
72
apps/web/lib/k8s-metrics.ts
Normal file
72
apps/web/lib/k8s-metrics.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
export interface ResourceMetrics {
|
||||
cpuUsage?: string;
|
||||
cpuUsagePercent?: number;
|
||||
memoryUsage?: string;
|
||||
memoryUsagePercent?: number;
|
||||
}
|
||||
|
||||
/** Convert CPU nanoseconds (e.g. "123456789n") to millicores (e.g. "123m") */
|
||||
export function parseCpuUsage(cpuNano: string): string | undefined {
|
||||
const usageNano = Number.parseInt(cpuNano.replace("n", ""), 10);
|
||||
if (Number.isNaN(usageNano)) return undefined;
|
||||
|
||||
const usageMilli = Math.round(usageNano / 1_000_000);
|
||||
return `${usageMilli}m`;
|
||||
}
|
||||
|
||||
export function calculateCpuPercent(cpuNano: string, capacityNano: string): number | undefined {
|
||||
const usageNano = Number.parseInt(cpuNano.replace("n", ""), 10);
|
||||
const capNano = Number.parseInt(capacityNano.replace("n", ""), 10);
|
||||
|
||||
if (Number.isNaN(usageNano) || Number.isNaN(capNano) || capNano === 0) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return Math.round((usageNano / capNano) * 100);
|
||||
}
|
||||
|
||||
/** Convert memory kibibytes (e.g. "1024Ki") to mebibytes (e.g. "1Mi") */
|
||||
export function parseMemoryUsage(memoryKi: string): string | undefined {
|
||||
const usageKi = Number.parseInt(memoryKi.replace("Ki", ""), 10);
|
||||
if (Number.isNaN(usageKi)) return undefined;
|
||||
|
||||
const usageMi = Math.round(usageKi / 1024);
|
||||
return `${usageMi}Mi`;
|
||||
}
|
||||
|
||||
export function calculateMemoryPercent(memoryKi: string, capacityKi: string): number | undefined {
|
||||
const usageKi = Number.parseInt(memoryKi.replace("Ki", ""), 10);
|
||||
const capKi = Number.parseInt(capacityKi.replace("Ki", ""), 10);
|
||||
|
||||
if (Number.isNaN(usageKi) || Number.isNaN(capKi) || capKi === 0) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return Math.round((usageKi / capKi) * 100);
|
||||
}
|
||||
|
||||
/** Parse raw K8s metrics into a standardized format with optional percentages */
|
||||
export function parseK8sMetrics(
|
||||
cpuUsage?: string,
|
||||
memoryUsage?: string,
|
||||
cpuCapacity?: string,
|
||||
memoryCapacity?: string
|
||||
): ResourceMetrics {
|
||||
const result: ResourceMetrics = {};
|
||||
|
||||
if (cpuUsage) {
|
||||
result.cpuUsage = parseCpuUsage(cpuUsage);
|
||||
if (cpuCapacity) {
|
||||
result.cpuUsagePercent = calculateCpuPercent(cpuUsage, cpuCapacity);
|
||||
}
|
||||
}
|
||||
|
||||
if (memoryUsage) {
|
||||
result.memoryUsage = parseMemoryUsage(memoryUsage);
|
||||
if (memoryCapacity) {
|
||||
result.memoryUsagePercent = calculateMemoryPercent(memoryUsage, memoryCapacity);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user