fix(beszel): improve live subscription error handling and cleanup

- Surface subscription errors in useLiveStats via onError + error state
- Show error UI in live mode when SSE connection fails
- Abort SSE reader on subscribeTopic failure instead of silent log
- Guard mock realtime against pre-aborted signal to prevent interval leak
- Remove dead includeDocker from subscription input schema
This commit is contained in:
Thomas Camlong committed 2026-06-15 15:49:14 +02:00
1 parent 2d4832dc96
commit a68eee24eb
5 files changed
+28 -7

No files matched your search

@@ -14,14 +14,17 @@ interface LiveStatsData {
export const useLiveStats = (integrationIds: string[], systemId: string, enabled: boolean) => {
const [data, setData] = useState<LiveStatsData | null>(null);
const [error, setError] = useState<Error | null>(null);
const integrationKey = integrationIds.join(",");
useEffect(() => {
setData(null);
setError(null);
}, [systemId, enabled, integrationKey]);
const onData = useCallback(
(incoming: { stats: BeszelSystemStatsRecord; containerStats: BeszelContainerStatsRecord | null }) => {
setError(null);
setData((prev) => {
const systemStats = [...(prev?.systemStats ?? []), incoming.stats].slice(-MAX_BUFFER);
const containerStats = incoming.containerStats
@@ -33,10 +36,14 @@ export const useLiveStats = (integrationIds: string[], systemId: string, enabled
[],
);
const onError = useCallback((err: unknown) => {
setError(err instanceof Error ? err : new Error(String(err)));
}, []);
clientApi.widget.beszel.subscribeSystemStats.useSubscription(
{ integrationIds, systemId },
{ enabled: enabled && systemId !== "", onData },
{ enabled: enabled && systemId !== "", onData, onError },
);
return data;
return { data, error };
};