mirror of
https://github.com/fankes/beszel.git
synced 2025-10-19 09:49:28 +08:00
use promise.allsettled to stop docker chart from populating later
This commit is contained in:
@@ -73,8 +73,8 @@ export default function CpuChart({
|
|||||||
stroke="hsl(var(--chart-1))"
|
stroke="hsl(var(--chart-1))"
|
||||||
isAnimationActive={false}
|
isAnimationActive={false}
|
||||||
// animationEasing="ease-out"
|
// animationEasing="ease-out"
|
||||||
animationDuration={700}
|
// animationDuration={1200}
|
||||||
animateNewValues={true}
|
// animateNewValues={true}
|
||||||
/>
|
/>
|
||||||
</AreaChart>
|
</AreaChart>
|
||||||
</ChartContainer>
|
</ChartContainer>
|
||||||
|
@@ -27,25 +27,32 @@ export default function ServerDetail({ name }: { name: string }) {
|
|||||||
const [ticks, setTicks] = useState([] as number[])
|
const [ticks, setTicks] = useState([] as number[])
|
||||||
const [server, setServer] = useState({} as SystemRecord)
|
const [server, setServer] = useState({} as SystemRecord)
|
||||||
const [systemStats, setSystemStats] = useState([] as SystemStatsRecord[])
|
const [systemStats, setSystemStats] = useState([] as SystemStatsRecord[])
|
||||||
const [dockerCpuChartData, setDockerCpuChartData] = useState<Record<string, number | string>[]>()
|
const [hasDockerStats, setHasDocker] = useState(false)
|
||||||
const [dockerMemChartData, setDockerMemChartData] = useState<Record<string, number | string>[]>()
|
const [dockerCpuChartData, setDockerCpuChartData] = useState<Record<string, number | string>[]>(
|
||||||
const [dockerNetChartData, setDockerNetChartData] =
|
[]
|
||||||
useState<Record<string, number | number[]>[]>()
|
)
|
||||||
|
const [dockerMemChartData, setDockerMemChartData] = useState<Record<string, number | string>[]>(
|
||||||
|
[]
|
||||||
|
)
|
||||||
|
const [dockerNetChartData, setDockerNetChartData] = useState<Record<string, number | number[]>[]>(
|
||||||
|
[]
|
||||||
|
)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = `${name} / Beszel`
|
document.title = `${name} / Beszel`
|
||||||
return () => {
|
return () => {
|
||||||
resetCharts()
|
resetCharts()
|
||||||
$chartTime.set('1h')
|
$chartTime.set('1h')
|
||||||
|
setHasDocker(false)
|
||||||
}
|
}
|
||||||
}, [name])
|
}, [name])
|
||||||
|
|
||||||
const resetCharts = useCallback(() => {
|
function resetCharts() {
|
||||||
setSystemStats([])
|
setSystemStats([])
|
||||||
setDockerCpuChartData(undefined)
|
setDockerCpuChartData([])
|
||||||
setDockerMemChartData(undefined)
|
setDockerMemChartData([])
|
||||||
setDockerNetChartData(undefined)
|
setDockerNetChartData([])
|
||||||
}, [])
|
}
|
||||||
|
|
||||||
useEffect(resetCharts, [chartTime])
|
useEffect(resetCharts, [chartTime])
|
||||||
|
|
||||||
@@ -66,13 +73,8 @@ export default function ServerDetail({ name }: { name: string }) {
|
|||||||
}
|
}
|
||||||
}, [updatedSystem])
|
}, [updatedSystem])
|
||||||
|
|
||||||
// get stats
|
async function getStats<T>(collection: string): Promise<T[]> {
|
||||||
useEffect(() => {
|
return await pb.collection<T>(collection).getFullList({
|
||||||
if (!server.id || !chartTime) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
pb.collection<SystemStatsRecord>('system_stats')
|
|
||||||
.getFullList({
|
|
||||||
filter: pb.filter('system={:id} && created > {:created} && type={:type}', {
|
filter: pb.filter('system={:id} && created > {:created} && type={:type}', {
|
||||||
id: server.id,
|
id: server.id,
|
||||||
created: getPbTimestamp(chartTime),
|
created: getPbTimestamp(chartTime),
|
||||||
@@ -81,12 +83,27 @@ export default function ServerDetail({ name }: { name: string }) {
|
|||||||
fields: 'created,stats',
|
fields: 'created,stats',
|
||||||
sort: 'created',
|
sort: 'created',
|
||||||
})
|
})
|
||||||
.then((records) => {
|
}
|
||||||
// convert created time to ms value
|
|
||||||
for (const record of records) {
|
// get stats
|
||||||
|
useEffect(() => {
|
||||||
|
if (!server.id || !chartTime) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Promise.allSettled([
|
||||||
|
getStats<SystemStatsRecord>('system_stats'),
|
||||||
|
getStats<ContainerStatsRecord>('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()
|
record.created = new Date(record.created).getTime()
|
||||||
}
|
}
|
||||||
setSystemStats(records)
|
setSystemStats(systemStats.value)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}, [server, chartTime])
|
}, [server, chartTime])
|
||||||
|
|
||||||
@@ -100,30 +117,7 @@ export default function ServerDetail({ name }: { name: string }) {
|
|||||||
setTicks(scale.ticks(chartTimeData[chartTime].ticks).map((d) => d.getTime()))
|
setTicks(scale.ticks(chartTimeData[chartTime].ticks).map((d) => d.getTime()))
|
||||||
}, [chartTime, systemStats])
|
}, [chartTime, systemStats])
|
||||||
|
|
||||||
// get container stats
|
// make container stats for charts
|
||||||
useEffect(() => {
|
|
||||||
if (!server.id || !chartTime) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
pb.collection<ContainerStatsRecord>('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
|
|
||||||
const makeContainerData = useCallback((containers: ContainerStatsRecord[]) => {
|
const makeContainerData = useCallback((containers: ContainerStatsRecord[]) => {
|
||||||
// console.log('containers', containers)
|
// console.log('containers', containers)
|
||||||
const dockerCpuData = []
|
const dockerCpuData = []
|
||||||
@@ -221,7 +215,7 @@ export default function ServerDetail({ name }: { name: string }) {
|
|||||||
<CpuChart ticks={ticks} systemData={systemStats} />
|
<CpuChart ticks={ticks} systemData={systemStats} />
|
||||||
</ChartCard>
|
</ChartCard>
|
||||||
|
|
||||||
{dockerCpuChartData && (
|
{hasDockerStats && (
|
||||||
<ChartCard title="Docker CPU Usage" description="CPU utilization of docker containers">
|
<ChartCard title="Docker CPU Usage" description="CPU utilization of docker containers">
|
||||||
<ContainerCpuChart chartData={dockerCpuChartData} ticks={ticks} />
|
<ContainerCpuChart chartData={dockerCpuChartData} ticks={ticks} />
|
||||||
</ChartCard>
|
</ChartCard>
|
||||||
@@ -231,7 +225,7 @@ export default function ServerDetail({ name }: { name: string }) {
|
|||||||
<MemChart ticks={ticks} systemData={systemStats} />
|
<MemChart ticks={ticks} systemData={systemStats} />
|
||||||
</ChartCard>
|
</ChartCard>
|
||||||
|
|
||||||
{dockerMemChartData && (
|
{hasDockerStats && (
|
||||||
<ChartCard title="Docker Memory Usage" description="Memory usage of docker containers">
|
<ChartCard title="Docker Memory Usage" description="Memory usage of docker containers">
|
||||||
<ContainerMemChart chartData={dockerMemChartData} ticks={ticks} />
|
<ContainerMemChart chartData={dockerMemChartData} ticks={ticks} />
|
||||||
</ChartCard>
|
</ChartCard>
|
||||||
@@ -252,7 +246,7 @@ export default function ServerDetail({ name }: { name: string }) {
|
|||||||
<BandwidthChart ticks={ticks} systemData={systemStats} />
|
<BandwidthChart ticks={ticks} systemData={systemStats} />
|
||||||
</ChartCard>
|
</ChartCard>
|
||||||
|
|
||||||
{dockerNetChartData && (
|
{hasDockerStats && (
|
||||||
<ChartCard
|
<ChartCard
|
||||||
title="Docker Network I/O"
|
title="Docker Network I/O"
|
||||||
description="Includes traffic between internal services"
|
description="Includes traffic between internal services"
|
||||||
|
Reference in New Issue
Block a user