From 4262e12921a8e73e642ff8f2cca4188d4b17fc36 Mon Sep 17 00:00:00 2001 From: Tomasz Szuba Date: Wed, 11 Oct 2023 16:11:33 +0200 Subject: [PATCH] Handle decimals in k8s resource usage calculation (#20514) When one of the numerator/denominator is a number and other is bigint this was failing. decimals cannot be converted to bigints Signed-off-by: Tomasz Szuba --- .changeset/rare-glasses-play.md | 5 ++++ .github/vale/Vocab/Backstage/accept.txt | 3 ++- .../kubernetes-react/src/utils/pod.test.tsx | 24 +++++++++---------- plugins/kubernetes-react/src/utils/pod.tsx | 8 +++++-- 4 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 .changeset/rare-glasses-play.md diff --git a/.changeset/rare-glasses-play.md b/.changeset/rare-glasses-play.md new file mode 100644 index 0000000000..7613f6f1bc --- /dev/null +++ b/.changeset/rare-glasses-play.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-react': patch +--- + +Handle mixed decimals and bigint when calculating k8s resource usage diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index aadbaa3985..e6c0aa9632 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -25,6 +25,7 @@ backend's backported backporting BEPs +bigint Bigtable Billett bitbucket @@ -453,4 +454,4 @@ zsh Pulumi Lightsail PR -rebasing \ No newline at end of file +rebasing diff --git a/plugins/kubernetes-react/src/utils/pod.test.tsx b/plugins/kubernetes-react/src/utils/pod.test.tsx index 06d4e22371..c48e40cd42 100644 --- a/plugins/kubernetes-react/src/utils/pod.test.tsx +++ b/plugins/kubernetes-react/src/utils/pod.test.tsx @@ -24,18 +24,18 @@ import { SubvalueCell } from '@backstage/core-components'; describe('pod', () => { describe('currentToDeclaredResourceToPerc', () => { - it('10%', () => { - const tests: (number | string)[][] = [ - [10, 100], - [10, '100'], - ['10', 100], - ['10', '100'], - ]; - tests.forEach(([a, b]) => { - const result = currentToDeclaredResourceToPerc(a, b); - expect(result).toBe('10%'); - }); - }); + it.each([ + [10, 100], + [10, '100'], + ['10', 100], + ['10', '100'], + ['10', 100.0], + [10.0, '100'], + [10.1, '100'], + ['10', 100.1], + ])('%p out of %p gives 10%%', (current, resource) => + expect(currentToDeclaredResourceToPerc(current, resource)).toBe('10%'), + ); }); describe('podStatusToCpuUtil', () => { it('does use correct units', () => { diff --git a/plugins/kubernetes-react/src/utils/pod.tsx b/plugins/kubernetes-react/src/utils/pod.tsx index 9c0ce898a3..1123f11427 100644 --- a/plugins/kubernetes-react/src/utils/pod.tsx +++ b/plugins/kubernetes-react/src/utils/pod.tsx @@ -126,8 +126,12 @@ export const currentToDeclaredResourceToPerc = ( return `${Math.round((current / resource) * 100)}%`; } - const numerator: bigint = BigInt(current); - const denominator: bigint = BigInt(resource); + const numerator: bigint = BigInt( + typeof current === 'number' ? Math.round(current) : current, + ); + const denominator: bigint = BigInt( + typeof resource === 'number' ? Math.round(resource) : resource, + ); return `${(numerator * BigInt(100)) / denominator}%`; };