From c6b9f1ab7719fa52e2546970bc3eba9b4c0b9ad0 Mon Sep 17 00:00:00 2001 From: Henry Dollman Date: Sun, 4 Aug 2024 21:51:11 -0400 Subject: [PATCH] use promise.allsettled to stop docker chart from populating later --- hub/site/src/components/charts/cpu-chart.tsx | 4 +- hub/site/src/components/routes/system.tsx | 96 +++++++++----------- 2 files changed, 47 insertions(+), 53 deletions(-) diff --git a/hub/site/src/components/charts/cpu-chart.tsx b/hub/site/src/components/charts/cpu-chart.tsx index 5edaf40..cbad2c9 100644 --- a/hub/site/src/components/charts/cpu-chart.tsx +++ b/hub/site/src/components/charts/cpu-chart.tsx @@ -73,8 +73,8 @@ export default function CpuChart({ stroke="hsl(var(--chart-1))" isAnimationActive={false} // animationEasing="ease-out" - animationDuration={700} - animateNewValues={true} + // animationDuration={1200} + // animateNewValues={true} /> diff --git a/hub/site/src/components/routes/system.tsx b/hub/site/src/components/routes/system.tsx index 77bae84..36e4a4c 100644 --- a/hub/site/src/components/routes/system.tsx +++ b/hub/site/src/components/routes/system.tsx @@ -27,25 +27,32 @@ export default function ServerDetail({ name }: { name: string }) { const [ticks, setTicks] = useState([] as number[]) const [server, setServer] = useState({} as SystemRecord) const [systemStats, setSystemStats] = useState([] as SystemStatsRecord[]) - const [dockerCpuChartData, setDockerCpuChartData] = useState[]>() - const [dockerMemChartData, setDockerMemChartData] = useState[]>() - const [dockerNetChartData, setDockerNetChartData] = - useState[]>() + const [hasDockerStats, setHasDocker] = useState(false) + const [dockerCpuChartData, setDockerCpuChartData] = useState[]>( + [] + ) + const [dockerMemChartData, setDockerMemChartData] = useState[]>( + [] + ) + const [dockerNetChartData, setDockerNetChartData] = useState[]>( + [] + ) useEffect(() => { document.title = `${name} / Beszel` return () => { resetCharts() $chartTime.set('1h') + setHasDocker(false) } }, [name]) - const resetCharts = useCallback(() => { + function resetCharts() { setSystemStats([]) - setDockerCpuChartData(undefined) - setDockerMemChartData(undefined) - setDockerNetChartData(undefined) - }, []) + setDockerCpuChartData([]) + setDockerMemChartData([]) + setDockerNetChartData([]) + } useEffect(resetCharts, [chartTime]) @@ -66,28 +73,38 @@ export default function ServerDetail({ name }: { name: string }) { } }, [updatedSystem]) + async function getStats(collection: string): Promise { + return await pb.collection(collection).getFullList({ + filter: pb.filter('system={:id} && created > {:created} && type={:type}', { + id: server.id, + created: getPbTimestamp(chartTime), + type: chartTimeData[chartTime].type, + }), + fields: 'created,stats', + sort: 'created', + }) + } + // get stats useEffect(() => { if (!server.id || !chartTime) { return } - pb.collection('system_stats') - .getFullList({ - filter: pb.filter('system={:id} && created > {:created} && type={:type}', { - id: server.id, - created: getPbTimestamp(chartTime), - type: chartTimeData[chartTime].type, - }), - fields: 'created,stats', - sort: 'created', - }) - .then((records) => { - // convert created time to ms value - for (const record of records) { + Promise.allSettled([ + getStats('system_stats'), + getStats('container_stats'), + ]).then(([systemStats, containerStats]) => { + if (containerStats.status === 'fulfilled' && containerStats.value.length) { + setHasDocker(true) + makeContainerData(containerStats.value) + } + if (systemStats.status === 'fulfilled') { + for (const record of systemStats.value) { record.created = new Date(record.created).getTime() } - setSystemStats(records) - }) + setSystemStats(systemStats.value) + } + }) }, [server, chartTime]) useEffect(() => { @@ -100,30 +117,7 @@ export default function ServerDetail({ name }: { name: string }) { setTicks(scale.ticks(chartTimeData[chartTime].ticks).map((d) => d.getTime())) }, [chartTime, systemStats]) - // get container stats - useEffect(() => { - if (!server.id || !chartTime) { - return - } - pb.collection('container_stats') - .getFullList({ - filter: pb.filter('system={:id} && created > {:created} && type={:type}', { - id: server.id, - created: getPbTimestamp(chartTime), - type: chartTimeData[chartTime].type, - }), - fields: 'created,stats', - sort: 'created', - }) - .then((records) => { - if (records.length) { - makeContainerData(records) - } - // setContainers(records) - }) - }, [server, chartTime]) - - // container stats for charts + // make container stats for charts const makeContainerData = useCallback((containers: ContainerStatsRecord[]) => { // console.log('containers', containers) const dockerCpuData = [] @@ -221,7 +215,7 @@ export default function ServerDetail({ name }: { name: string }) { - {dockerCpuChartData && ( + {hasDockerStats && ( @@ -231,7 +225,7 @@ export default function ServerDetail({ name }: { name: string }) { - {dockerMemChartData && ( + {hasDockerStats && ( @@ -252,7 +246,7 @@ export default function ServerDetail({ name }: { name: string }) { - {dockerNetChartData && ( + {hasDockerStats && (