mirror of
https://github.com/YuzuZensai/Minikura.git
synced 2026-03-30 19:27:38 +00:00
73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
|
|
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;
|
||
|
|
}
|