import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts' import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, } from '@/components/ui/chart' import { useMemo, useRef } from 'react' import { chartTimeData, formatShortDate, useYaxisWidth } from '@/lib/utils' import Spinner from '../spinner' import { useStore } from '@nanostores/react' import { $chartTime } from '@/lib/stores' export default function ContainerCpuChart({ chartData, ticks, }: { chartData: Record[] ticks: number[] }) { const chartRef = useRef(null) const yAxisWidth = useYaxisWidth(chartRef) const chartTime = useStore($chartTime) const chartConfig = useMemo(() => { let config = {} as Record< string, { label: string color: string } > const totalUsage = {} as Record for (let stats of chartData) { for (let key in stats) { if (key === 'time') { continue } if (!(key in totalUsage)) { totalUsage[key] = 0 } // @ts-ignore totalUsage[key] += stats[key] } } let keys = Object.keys(totalUsage) keys.sort((a, b) => (totalUsage[a] > totalUsage[b] ? -1 : 1)) const length = keys.length for (let i = 0; i < length; i++) { const key = keys[i] const hue = ((i * 360) / length) % 360 config[key] = { label: key, color: `hsl(${hue}, 60%, 55%)`, } } return config satisfies ChartConfig }, [chartData]) if (!chartData.length || !ticks.length) { return } return (
Math.max(Math.ceil(max), 0.4)]} width={yAxisWidth} tickLine={false} axisLine={false} unit={'%'} tickFormatter={(x) => (x % 1 === 0 ? x : x.toFixed(1))} /> formatShortDate(data[0].payload.time)} // @ts-ignore itemSorter={(a, b) => b.value - a.value} content={} /> {Object.keys(chartConfig).map((key) => ( ))}
) }