import { useState, useEffect } from "react"; import { BACKEND_URL, APP_CONFIG } from "../constants"; interface BackendHealthCheckProps { checkInterval?: number; } export function BackendHealthCheck({ checkInterval = APP_CONFIG.HEALTH_CHECK_INTERVAL, }: BackendHealthCheckProps) { const [backendStatus, setBackendStatus] = useState< "loading" | "online" | "offline" >("loading"); const [showTooltip, setShowTooltip] = useState(false); const [copied, setCopied] = useState(false); const healthCheckUrl = `${BACKEND_URL}/api/health`; useEffect(() => { const checkBackendHealth = async () => { try { const response = await fetch(healthCheckUrl); if (response.ok) { const data = await response.json(); if (data.status === "ok") { setBackendStatus("online"); } else { setBackendStatus("offline"); } } else { setBackendStatus("offline"); } } catch { setBackendStatus("offline"); } }; checkBackendHealth(); // Check health at specified interval const interval = setInterval(checkBackendHealth, checkInterval); return () => clearInterval(interval); }, [healthCheckUrl, checkInterval]); const handleCopyCode = async () => { const codeText = `cd backend/\nmake install\nmake backend`; try { await navigator.clipboard.writeText(codeText); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { console.error("Failed to copy text: ", err); } }; const getStatusColor = () => { switch (backendStatus) { case "online": return "bg-green-500"; case "offline": return "bg-red-500"; case "loading": return "bg-yellow-500"; default: return "bg-gray-500"; } }; const getStatusText = () => { switch (backendStatus) { case "online": return "Backend Online"; case "offline": return "Backend Offline"; case "loading": return "Checking Backend..."; default: return "Unknown Status"; } }; return (
cd backend/
make install
make backend