reorganized web-app

This commit is contained in:
Boki 2025-06-23 16:55:29 -04:00
parent 5c87f068d6
commit b67fe48f72
31 changed files with 1781 additions and 431 deletions

View file

@ -4,7 +4,15 @@
import { useState, useEffect, useCallback } from 'react';
import { monitoringApi } from '../services/monitoringApi';
import type { SystemHealth, CacheStats, QueueStats, DatabaseStats } from '../types';
import type {
SystemHealth,
CacheStats,
QueueStats,
DatabaseStats,
ServiceStatus,
ProxyStats,
SystemOverview
} from '../types';
export function useSystemHealth(refreshInterval: number = 5000) {
const [data, setData] = useState<SystemHealth | null>(null);
@ -119,5 +127,92 @@ export function useDatabaseStats(refreshInterval: number = 5000) {
}
}, [fetchData, refreshInterval]);
return { data, loading, error, refetch: fetchData };
}
export function useServiceStatus(refreshInterval: number = 5000) {
const [data, setData] = useState<ServiceStatus[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const fetchData = useCallback(async () => {
try {
const result = await monitoringApi.getServiceStatus();
setData(result.services);
setError(null);
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to fetch service status');
} finally {
setLoading(false);
}
}, []);
useEffect(() => {
fetchData();
if (refreshInterval > 0) {
const interval = setInterval(fetchData, refreshInterval);
return () => clearInterval(interval);
}
}, [fetchData, refreshInterval]);
return { data, loading, error, refetch: fetchData };
}
export function useProxyStats(refreshInterval: number = 5000) {
const [data, setData] = useState<ProxyStats | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const fetchData = useCallback(async () => {
try {
const stats = await monitoringApi.getProxyStats();
setData(stats);
setError(null);
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to fetch proxy stats');
} finally {
setLoading(false);
}
}, []);
useEffect(() => {
fetchData();
if (refreshInterval > 0) {
const interval = setInterval(fetchData, refreshInterval);
return () => clearInterval(interval);
}
}, [fetchData, refreshInterval]);
return { data, loading, error, refetch: fetchData };
}
export function useSystemOverview(refreshInterval: number = 5000) {
const [data, setData] = useState<SystemOverview | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const fetchData = useCallback(async () => {
try {
const overview = await monitoringApi.getSystemOverview();
setData(overview);
setError(null);
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to fetch system overview');
} finally {
setLoading(false);
}
}, []);
useEffect(() => {
fetchData();
if (refreshInterval > 0) {
const interval = setInterval(fetchData, refreshInterval);
return () => clearInterval(interval);
}
}, [fetchData, refreshInterval]);
return { data, loading, error, refetch: fetchData };
}