import { useState, useEffect } from "react"; export interface ActivityData { hour: string; commands: number; transactions: number; } interface UseActivityStatsResult { data: ActivityData[]; loading: boolean; error: string | null; refresh: () => Promise; } /** * Custom hook to fetch hourly activity data for charts. * Data is cached on the server for 5 minutes. */ export function useActivityStats(): UseActivityStatsResult { const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const fetchActivity = async () => { setLoading(true); try { const token = (window as any).AURORA_ENV?.ADMIN_TOKEN; const response = await fetch("/api/stats/activity", { headers: { "Authorization": `Bearer ${token}` } }); if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); const jsonData = await response.json(); setData(jsonData); setError(null); } catch (err) { console.error("Failed to fetch activity stats:", err); setError(err instanceof Error ? err.message : "Failed to fetch activity"); } finally { setLoading(false); } }; useEffect(() => { fetchActivity(); // Refresh every 5 minutes to match server cache const interval = setInterval(fetchActivity, 5 * 60 * 1000); return () => clearInterval(interval); }, []); return { data, loading, error, refresh: fetchActivity }; }