File size: 887 Bytes
65d68f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"use client";

import { useCallback, useEffect, useState } from "react";
import { isBackendAvailable } from "@/lib/api/client";

export type BackendHealth = "checking" | "online" | "offline";

export function useBackendHealth(pollMs = 30_000) {
  const [health, setHealth] = useState<BackendHealth>("checking");

  const check = useCallback(async () => {
    setHealth("checking");
    const ok = await isBackendAvailable();
    setHealth(ok ? "online" : "offline");
    return ok;
  }, []);

  useEffect(() => {
    let cancelled = false;
    async function run() {
      const ok = await isBackendAvailable();
      if (!cancelled) setHealth(ok ? "online" : "offline");
    }

    void run();
    const timer = setInterval(() => void run(), pollMs);

    return () => {
      cancelled = true;
      clearInterval(timer);
    };
  }, [pollMs]);

  return { health, refresh: check };
}