Skip to content

Commit 42b22d3

Browse files
committed
Clean up CPU charts
1 parent 13e82c0 commit 42b22d3

File tree

1 file changed

+24
-47
lines changed

1 file changed

+24
-47
lines changed

app/pages/project/instances/instance/tabs/MetricsTab/CpuMetricsTab.tsx

Lines changed: 24 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Copyright Oxide Computer Company
77
*/
88

9-
import { useMemo, useState } from 'react'
9+
import { useState } from 'react'
1010

1111
import { usePrefetchedApiQuery } from '@oxide/api'
1212

@@ -16,6 +16,7 @@ import {
1616
MetricRow,
1717
OxqlMetric,
1818
} from '~/components/oxql-metrics/OxqlMetric'
19+
import type { OxqlVcpuState } from '~/components/oxql-metrics/util'
1920
import { useInstanceSelector } from '~/hooks/use-params'
2021
import { Listbox } from '~/ui/lib/Listbox'
2122

@@ -29,35 +30,30 @@ export default function CpuMetricsTab() {
2930
path: { instance },
3031
query: { project },
3132
})
32-
3333
const { startTime, endTime, dateTimeRangePicker } = useMetricsContext()
3434

35-
const queryBase = {
36-
metricName: 'virtual_machine:vcpu_usage' as const,
37-
startTime,
38-
endTime,
39-
groupBy: { cols: ['vcpu_id'], op: 'sum' } as const,
40-
}
41-
42-
// all this memoization is ridiculous, but we need the filters referentially
43-
// table or everything will re-render too much
44-
const filterBase = useMemo(() => ({ instance_id: instanceData.id }), [instanceData.id])
35+
type CpuChartType = OxqlVcpuState | 'all'
4536

46-
const stateItems = [
37+
const stateItems: { label: string; value: CpuChartType }[] = [
4738
{ label: 'State: Running', value: 'run' },
4839
{ label: 'State: Emulating', value: 'emulation' },
4940
{ label: 'State: Idling', value: 'idle' },
5041
{ label: 'State: Waiting', value: 'waiting' },
5142
{ label: 'All states', value: 'all' },
5243
]
53-
5444
const [selectedState, setSelectedState] = useState(stateItems[0].value)
5545

56-
const title = `CPU Utilization: ${stateItems
57-
.find((i) => i.value === selectedState)
58-
?.label.replace('State: ', '')
59-
.replace('All states', 'Total')}`
60-
const state = selectedState === 'all' ? undefined : selectedState
46+
const CpuStateMetric = ({ state }: { state: CpuChartType }) => (
47+
<OxqlMetric
48+
title={`CPU Utilization: ${stateItems.find((i) => i.value === state)?.label.replace('State: ', '')}`}
49+
eqFilters={{ instance_id: instanceData.id, state }}
50+
metricName={'virtual_machine:vcpu_usage' as const}
51+
startTime={startTime}
52+
endTime={endTime}
53+
groupBy={{ cols: ['vcpu_id'], op: 'sum' } as const}
54+
/>
55+
)
56+
6157
return (
6258
<>
6359
<MetricHeader>
@@ -74,41 +70,22 @@ export default function CpuMetricsTab() {
7470
{dateTimeRangePicker}
7571
</MetricHeader>
7672
<MetricCollection>
77-
<MetricRow>
78-
<OxqlMetric
79-
title={title}
80-
eqFilters={useMemo(() => ({ ...filterBase, state }), [filterBase, state])}
81-
{...queryBase}
82-
/>
83-
</MetricRow>
84-
{selectedState === 'all' && (
73+
{selectedState === 'all' ? (
8574
<>
8675
<MetricRow>
87-
<OxqlMetric
88-
title="CPU Utilization: Running"
89-
eqFilters={{ ...filterBase, state: 'run' }}
90-
{...queryBase}
91-
/>
92-
<OxqlMetric
93-
title="CPU Utilization: Emulation"
94-
eqFilters={{ ...filterBase, state: 'emulation' }}
95-
{...queryBase}
96-
/>
76+
<CpuStateMetric state="run" />
77+
<CpuStateMetric state="emulation" />
9778
</MetricRow>
9879

9980
<MetricRow>
100-
<OxqlMetric
101-
title="CPU Utilization: Idling"
102-
eqFilters={{ ...filterBase, state: 'idle' }}
103-
{...queryBase}
104-
/>
105-
<OxqlMetric
106-
title="CPU Utilization: Waiting"
107-
eqFilters={{ ...filterBase, state: 'waiting' }}
108-
{...queryBase}
109-
/>
81+
<CpuStateMetric state="idle" />
82+
<CpuStateMetric state="waiting" />
11083
</MetricRow>
11184
</>
85+
) : (
86+
<MetricRow>
87+
<CpuStateMetric state={selectedState} />
88+
</MetricRow>
11289
)}
11390
</MetricCollection>
11491
</>

0 commit comments

Comments
 (0)