Skip to content

Commit ebb2f27

Browse files
authored
Merge pull request #1113 from layer5io/aabidsofi19-patch-1
fix cpu metrics formatting
2 parents 73257cc + 6e8496f commit ebb2f27

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

src/custom/ResourceDetailFormatters/Formatter.tsx

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ import {
5757
TableDataFormatterProps,
5858
TextWithLinkFormatterProps
5959
} from './types';
60-
import { splitCamelCaseString } from './utils';
60+
import { parseCpu, splitCamelCaseString } from './utils';
6161

6262
interface ResourceProgressProps {
6363
title: string;
@@ -368,10 +368,12 @@ export const MemoryUsage: React.FC<MemoryUsageProps> = ({
368368
return parseInt(kiValue.replace('Ki', '')) * 1024;
369369
}, []);
370370

371-
const cpuUsage = useMemo(() => {
371+
const reservedCpu = useMemo(() => {
372372
if (!allocatable || !capacity) return 0;
373-
const usedCPU = parseInt(capacity.cpu) - parseInt(allocatable.cpu);
374-
return (usedCPU / parseInt(capacity.cpu)) * 100;
373+
const usedCPU = parseCpu(capacity.cpu) - parseCpu(allocatable.cpu);
374+
const capacityCPU = parseCpu(capacity.cpu);
375+
376+
return (usedCPU / capacityCPU) * 100;
375377
}, [allocatable, capacity]);
376378

377379
const memoryUsage = useMemo(() => {
@@ -382,12 +384,14 @@ export const MemoryUsage: React.FC<MemoryUsageProps> = ({
382384
return (usedMemory / totalMemory) * 100;
383385
}, [allocatable, capacity]);
384386

385-
const diskUsage = useMemo(() => {
387+
const diskUsagePercent = useMemo(() => {
386388
if (!allocatable || !capacity) return 0;
387-
const totalStorageInBytes = convertKiToBytes(capacity['ephemeral-storage']);
388-
const availableStorageInBytes = parseInt(allocatable['ephemeral-storage']);
389-
const usedStorageInBytes = totalStorageInBytes - availableStorageInBytes;
390-
return (usedStorageInBytes / totalStorageInBytes) * 100;
389+
390+
const total = convertKiToBytes(capacity['ephemeral-storage']);
391+
const available = convertKiToBytes(allocatable['ephemeral-storage']);
392+
393+
const used = total - available;
394+
return (used / total) * 100;
391395
}, [allocatable, capacity, convertKiToBytes]);
392396

393397
const chartOptions = useCallback(
@@ -439,9 +443,9 @@ export const MemoryUsage: React.FC<MemoryUsageProps> = ({
439443

440444
return (
441445
<FlexResourceContainer>
442-
<ResourceProgress title="CPU Usage" percentage={cpuUsage} type={'CPU'} />
446+
<ResourceProgress title="System Reserved Cpu" percentage={reservedCpu} type={'CPU'} />
443447
<ResourceProgress title="Memory Usage" percentage={memoryUsage} type={'Memory'} />
444-
<ResourceProgress title="Disk Usage" percentage={diskUsage} type={'Disk'} />
448+
<ResourceProgress title="Disk Usage" percentage={diskUsagePercent} type={'Disk'} />
445449
</FlexResourceContainer>
446450
);
447451
};

src/custom/ResourceDetailFormatters/utils.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,24 @@ export const convertToReadableUnit = (value: number): string => {
103103

104104
return `${value.toFixed(2)} ${units[index]}`;
105105
};
106+
107+
/**
108+
* Parses a Kubernetes CPU string (e.g., "100m", "1", "1000000n")
109+
* and returns the CPU value in cores as a float.
110+
*/
111+
export function parseCpu(cpu: string): number {
112+
if (!cpu) return 0;
113+
114+
if (cpu.endsWith('n')) {
115+
// Nanocores → cores
116+
return parseInt(cpu.slice(0, -1), 10) / 1_000_000_000;
117+
}
118+
119+
if (cpu.endsWith('m')) {
120+
// Millicores → cores
121+
return parseInt(cpu.slice(0, -1), 10) / 1000;
122+
}
123+
124+
// No suffix = cores
125+
return parseFloat(cpu);
126+
}

0 commit comments

Comments
 (0)