mirror of
https://github.com/henrygd/beszel.git
synced 2026-04-20 19:51:49 +02:00
fix(ui): auto-refresh probe stats when system data updates
Pass system record to NetworkProbes component and use it as a dependency in the non-realtime fetch effect, matching the pattern used by system_stats and container_stats in use-system-data.ts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -149,7 +149,7 @@ export default memo(function SystemDetail({ id }: { id: string }) {
|
|||||||
{hasSystemd && <LazySystemdTable systemId={system.id} />}
|
{hasSystemd && <LazySystemdTable systemId={system.id} />}
|
||||||
|
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<NetworkProbes systemId={system.id} chartData={chartData} grid={grid} realtimeProbeStats={probeStats} />
|
<NetworkProbes system={system} chartData={chartData} grid={grid} realtimeProbeStats={probeStats} />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
@@ -199,7 +199,7 @@ export default memo(function SystemDetail({ id }: { id: string }) {
|
|||||||
{pageBottomExtraMargin > 0 && <div style={{ marginBottom: pageBottomExtraMargin }}></div>}
|
{pageBottomExtraMargin > 0 && <div style={{ marginBottom: pageBottomExtraMargin }}></div>}
|
||||||
</div>
|
</div>
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<NetworkProbes systemId={system.id} chartData={chartData} grid={grid} realtimeProbeStats={probeStats} />
|
<NetworkProbes system={system} chartData={chartData} grid={grid} realtimeProbeStats={probeStats} />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { AddProbeDialog } from "./probe-dialog"
|
|||||||
import { ChartCard } from "./chart-card"
|
import { ChartCard } from "./chart-card"
|
||||||
import LineChartDefault, { type DataPoint } from "@/components/charts/line-chart"
|
import LineChartDefault, { type DataPoint } from "@/components/charts/line-chart"
|
||||||
import { pinnedAxisDomain } from "@/components/ui/chart"
|
import { pinnedAxisDomain } from "@/components/ui/chart"
|
||||||
import type { ChartData, NetworkProbeRecord, NetworkProbeStatsRecord } from "@/types"
|
import type { ChartData, NetworkProbeRecord, NetworkProbeStatsRecord, SystemRecord } from "@/types"
|
||||||
|
|
||||||
function probeKey(p: NetworkProbeRecord) {
|
function probeKey(p: NetworkProbeRecord) {
|
||||||
if (p.protocol === "tcp") return `${p.protocol}:${p.target}:${p.port}`
|
if (p.protocol === "tcp") return `${p.protocol}:${p.target}:${p.port}`
|
||||||
@@ -20,16 +20,17 @@ function probeKey(p: NetworkProbeRecord) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function NetworkProbes({
|
export default function NetworkProbes({
|
||||||
systemId,
|
system,
|
||||||
chartData,
|
chartData,
|
||||||
grid,
|
grid,
|
||||||
realtimeProbeStats,
|
realtimeProbeStats,
|
||||||
}: {
|
}: {
|
||||||
systemId: string
|
system: SystemRecord
|
||||||
chartData: ChartData
|
chartData: ChartData
|
||||||
grid: boolean
|
grid: boolean
|
||||||
realtimeProbeStats?: NetworkProbeStatsRecord[]
|
realtimeProbeStats?: NetworkProbeStatsRecord[]
|
||||||
}) {
|
}) {
|
||||||
|
const systemId = system.id
|
||||||
const [probes, setProbes] = useState<NetworkProbeRecord[]>([])
|
const [probes, setProbes] = useState<NetworkProbeRecord[]>([])
|
||||||
const [stats, setStats] = useState<NetworkProbeStatsRecord[]>([])
|
const [stats, setStats] = useState<NetworkProbeStatsRecord[]>([])
|
||||||
const [latestResults, setLatestResults] = useState<Record<string, { avg: number; loss: number }>>({})
|
const [latestResults, setLatestResults] = useState<Record<string, { avg: number; loss: number }>>({})
|
||||||
@@ -119,7 +120,7 @@ export default function NetworkProbes({
|
|||||||
.catch(() => setStats([]))
|
.catch(() => setStats([]))
|
||||||
|
|
||||||
return () => controller.abort()
|
return () => controller.abort()
|
||||||
}, [systemId, chartTime, probes, activeProbeKeys])
|
}, [system, chartTime, probes, activeProbeKeys])
|
||||||
|
|
||||||
const deleteProbe = async (id: string) => {
|
const deleteProbe = async (id: string) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user