From ca7d41b7c119a81af0ed53d433c9b8f1c15bcf75 Mon Sep 17 00:00:00 2001 From: Presley Pizzo Date: Wed, 11 Jan 2023 20:08:00 +0000 Subject: [PATCH] fix: handle NaN in build time estimate --- .../WorkspaceBuildProgress.stories.tsx | 6 ++++++ .../WorkspaceBuildProgress/WorkspaceBuildProgress.tsx | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.stories.tsx b/site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.stories.tsx index 344828094807f..db06acd2b671b 100644 --- a/site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.stories.tsx +++ b/site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.stories.tsx @@ -67,3 +67,9 @@ StartingHighVariaton.args = { ...Starting.args, transitionStats: { P50: 10000, P95: 20000 }, } + +export const StartingZeroEstimate = Template.bind({}) +StartingZeroEstimate.args = { + ...Starting.args, + transitionStats: { P50: 0, P95: 0 }, +} diff --git a/site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.tsx b/site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.tsx index ed38865f21e0b..d6e6a80b841ed 100644 --- a/site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.tsx +++ b/site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.tsx @@ -34,11 +34,13 @@ const estimateFinish = ( p95: number, ): [number | undefined, string] => { const sinceStart = dayjs().diff(startedAt) - const secondsLeft = (est: number) => - Math.max( + const secondsLeft = (est: number) => { + const max = Math.max( Math.ceil(dayjs.duration((1 - sinceStart / est) * est).asSeconds()), 0, ) + return isNaN(max) ? 0 : max + } const lowGuess = secondsLeft(p50) const highGuess = secondsLeft(p95)