Skip to content

Commit 30fee3f

Browse files
committed
Update frontend
1 parent 0263b09 commit 30fee3f

File tree

7 files changed

+42
-22
lines changed

7 files changed

+42
-22
lines changed

coderd/metricscache/metricscache.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ func (c *Cache) TemplateBuildTimeStats(id uuid.UUID) codersdk.TemplateBuildTimeS
257257
}
258258

259259
convertMedian := func(m float64) *int64 {
260-
if m < 1 {
260+
if m <= 0 {
261261
return nil
262262
}
263263
i := int64(m * 1000)

coderd/templates_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,7 @@ func TestTemplateMetrics(t *testing.T) {
661661
template, err = client.Template(ctx, template.ID)
662662
require.NoError(t, err)
663663
require.Equal(t, 1, template.ActiveUserCount)
664+
require.NotNil(t, template.BuildTimeStats.StartMillis, template.BuildTimeStats)
664665
require.Greater(t, *template.BuildTimeStats.StartMillis, int64(1))
665666

666667
workspaces, err = client.Workspaces(ctx, codersdk.WorkspaceFilter{})

site/src/components/TemplateStats/TemplateStats.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export const TemplateStats: FC<TemplateStatsProps> = ({
4646
<span className={styles.statsLabel}>{Language.buildTimeLabel}</span>
4747

4848
<span className={styles.statsValue}>
49-
{formatTemplateBuildTime(template.average_build_time_ms)}{" "}
49+
{formatTemplateBuildTime(template.build_time_stats.start_ms)}{" "}
5050
</span>
5151
</div>
5252
<div className={styles.statsDivider} />

site/src/components/Workspace/Workspace.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,7 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
186186

187187
<WorkspaceStats workspace={workspace} handleUpdate={handleUpdate} />
188188

189-
{workspace.latest_build.status === "starting" && (
190-
<WorkspaceBuildProgress workspace={workspace} template={template} />
191-
)}
189+
<WorkspaceBuildProgress workspace={workspace} template={template} />
192190

193191
{typeof resources !== "undefined" && resources.length > 0 && (
194192
<Resources

site/src/components/WorkspaceBuildProgress/WorkspaceBuildProgress.tsx

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { FC } from "react"
66
import { MONOSPACE_FONT_FAMILY } from "theme/constants"
77

88
import duration from "dayjs/plugin/duration"
9+
import { Running } from "components/WorkspaceStatusBadge/WorkspaceStatusBadge.stories"
910

1011
dayjs.extend(duration)
1112

@@ -39,34 +40,54 @@ export const WorkspaceBuildProgress: FC<{
3940
const styles = useStyles()
4041

4142
// Template stats not loaded or non-existent
42-
if (!template || template.average_build_time_ms <= 0) {
43+
if (!template) {
4344
return <></>
4445
}
4546

47+
let buildEstimate: number | undefined = 0
48+
switch (workspace.latest_build.status) {
49+
case "starting":
50+
buildEstimate = template.build_time_stats.start_ms
51+
break
52+
case "stopping":
53+
buildEstimate = template.build_time_stats.stop_ms
54+
break
55+
case "deleting":
56+
buildEstimate = template.build_time_stats.delete_ms
57+
break
58+
default:
59+
// Not in a transition state
60+
return <></>
61+
}
62+
4663
const job = workspace.latest_build.job
47-
const status = job.status
64+
if (buildEstimate === undefined) {
65+
return (
66+
<div className={styles.stack}>
67+
<LinearProgress value={0} variant="indeterminate" />
68+
<div className={styles.barHelpers}>
69+
<div className={styles.label}>{`Build ${job.status}`}</div>
70+
<div className={styles.label}>Unknown ETA</div>
71+
</div>
72+
</div>
73+
)
74+
}
4875

4976
return (
5077
<div className={styles.stack}>
5178
<LinearProgress
5279
value={
53-
(status === "running" &&
54-
estimateFinish(
55-
dayjs(job.started_at),
56-
template.average_build_time_ms,
57-
)[0] * 100) ||
80+
(job.status === "running" &&
81+
estimateFinish(dayjs(job.started_at), buildEstimate)[0] * 100) ||
5882
0
5983
}
60-
variant={status === "running" ? "determinate" : "indeterminate"}
84+
variant={job.status === "running" ? "determinate" : "indeterminate"}
6185
/>
6286
<div className={styles.barHelpers}>
63-
<div className={styles.label}>{`Build ${status}`}</div>
87+
<div className={styles.label}>{`Build ${job.status}`}</div>
6488
<div className={styles.label}>
65-
{status === "running" &&
66-
estimateFinish(
67-
dayjs(job.started_at),
68-
template.average_build_time_ms,
69-
)[1]}
89+
{job.status === "running" &&
90+
estimateFinish(dayjs(job.started_at), buildEstimate)[1]}
7091
</div>
7192
</div>
7293
</div>

site/src/pages/TemplatesPage/TemplatesPageView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ export const TemplatesPageView: FC<
237237
style={{ color: theme.palette.text.secondary }}
238238
>
239239
{formatTemplateBuildTime(
240-
template.average_build_time_ms,
240+
template.build_time_stats.start_ms,
241241
)}
242242
</span>
243243
</TableCellLink>

site/src/util/templates.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ export const formatTemplateActiveDevelopers = (num?: number): string => {
1313
return num.toString()
1414
}
1515

16-
export const formatTemplateBuildTime = (buildTimeMs: number): string => {
17-
return buildTimeMs < 0
16+
export const formatTemplateBuildTime = (buildTimeMs?: number): string => {
17+
return buildTimeMs === undefined
1818
? "Unknown"
1919
: `${Math.round(dayjs.duration(buildTimeMs, "milliseconds").asSeconds())}s`
2020
}

0 commit comments

Comments
 (0)