Skip to content

Commit 93cb81a

Browse files
committed
refactor utilization chart component to enhance data processing and improve visualization
1 parent 4457032 commit 93cb81a

File tree

1 file changed

+45
-37
lines changed
  • src/routes/team/[team]/[env]/app/[app]/utilization

1 file changed

+45
-37
lines changed

src/routes/team/[team]/[env]/app/[app]/utilization/+page.svelte

+45-37
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,26 @@
3232
const interval = $derived(page.url.searchParams.get('interval') ?? '7d');
3333
3434
const visualizationColors: string[] = [
35-
'#CCE1FF',
36-
'#99C4DD',
3735
'#FFC166',
38-
'#66CBEC',
3936
'#99DEAD',
40-
'#C0B2D2'
37+
'#CCE1FF',
38+
'#C0B2D2',
39+
'#66CBEC',
40+
'#99C4DD'
4141
];
4242
4343
function options(
4444
data: resourceUsage,
4545
request: number,
4646
limit?: number,
47-
color: string = '#000000',
4847
valueFormatter: (value: number) => string = (value: number) =>
4948
value == null ? '-' : value.toLocaleString('en-GB', { maximumFractionDigits: 4 })
5049
): EChartsOption {
5150
const safeData = data ?? [];
5251
53-
console.log(safeData);
52+
const uniqueTimestamps = Array.from(new Set(safeData.map((d) => d.timestamp.getTime())));
5453
55-
return {
54+
const opts = {
5655
animation: false,
5756
tooltip: {
5857
trigger: 'axis',
@@ -61,18 +60,27 @@
6160
`<div style="height: 8px; width: 8px; border-radius: 50%; background-color: ${color};"></div>`;
6261
const div = document.createElement('div');
6362
64-
const [usage, request, limit] = value;
65-
if (Array.isArray(usage.value) && Array.isArray(request.value)) {
66-
div.innerHTML = `
67-
<div>${format(usage.value.at(0) as number, 'dd/MM/yyyy HH:mm')}</div>
63+
div.innerHTML = `
64+
<div>${format(
65+
Array.isArray(value) && Array.isArray(value[0]?.value)
66+
? (value[0].value[0] as number)
67+
: 0,
68+
'dd/MM/yyyy HH:mm'
69+
)}</div>
6870
<hr style="border: none; height: 1px; background-color: var(--a-border-subtle);" />
6971
<div style="display: grid; grid-template-columns: auto auto; column-gap: 0.5rem;">
70-
<div style="display: flex; align-items: center; gap: 0.25rem;">${dot(color)}${usage.seriesName}:</div><div style="text-align: right;">${valueFormatter(usage.value.at(1) as number)}</div>
71-
<div style="display: flex; align-items: center; gap: 0.25rem;">${dot(requestColor)}${request.seriesName}:</div><div style="text-align: right;">${valueFormatter(request.value.at(1) as number)}</div>
72-
${Array.isArray(limit?.value) ? `<div style="display: flex; align-items: center; gap: 0.25rem;">${dot(limitColor)}${limit.seriesName}:</div><div style="text-align: right;">${valueFormatter(limit.value.at(1) as number)}</div>` : ''}
72+
${value
73+
.map(
74+
(v) =>
75+
`<div style="display: flex; align-items: center; gap: 0.25rem;">${dot(
76+
v.color?.toString() ?? ''
77+
)}${v.seriesName}:</div><div style="text-align: right;">${valueFormatter(
78+
(Array.isArray(v.value) ? v.value[1] : null) as number
79+
)}</div>`
80+
)
81+
.join('')}
7382
</div>
7483
`;
75-
}
7684
return div;
7785
},
7886
axisPointer: {
@@ -105,7 +113,7 @@
105113
}
106114
})),
107115
{
108-
data: safeData.map((d) => [d.timestamp.getTime(), request]),
116+
data: uniqueTimestamps.map((timestamp) => [timestamp, request]),
109117
type: 'line',
110118
name: 'Requested',
111119
showSymbol: false,
@@ -122,30 +130,30 @@
122130
]
123131
}
124132
},
125-
...(limit
126-
? [
127-
{
128-
data: safeData.map((d) => [d.timestamp.getTime(), limit]),
129-
type: 'line',
130-
name: 'Limit',
131-
showSymbol: false,
132-
color: limitColor,
133-
lineStyle: { color: limitColor },
134-
markLine: {
135-
symbol: 'none',
136-
data: [
137-
{
138-
yAxis: limit,
139-
label: { formatter: 'Limit', position: 'end', color: limitColor },
140-
lineStyle: { type: 'solid', color: 'transparent' }
141-
}
142-
]
143-
}
133+
limit
134+
? {
135+
data: uniqueTimestamps.map((timestamp) => [timestamp, limit]),
136+
type: 'line',
137+
name: 'Limit',
138+
showSymbol: false,
139+
color: limitColor,
140+
lineStyle: { color: limitColor },
141+
markLine: {
142+
symbol: 'none',
143+
data: [
144+
{
145+
yAxis: limit,
146+
label: { formatter: 'Limit', position: 'end', color: limitColor },
147+
lineStyle: { type: 'solid', color: 'transparent' }
148+
}
149+
]
144150
}
145-
]
146-
: [])
151+
}
152+
: null
147153
]
148154
} as EChartsOption;
155+
156+
return opts;
149157
}
150158
151159
const limitColor = '#DE2E2E';

0 commit comments

Comments
 (0)