feat: punkt 5 (monitoring) — system dashboard backend+frontend, admin-only, auto-refresh 30s, alerting via notifications
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
/**
|
||||
* System Dashboard API hooks — admin-only system monitoring.
|
||||
*/
|
||||
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { apiGet } from './client';
|
||||
|
||||
// ── Types matching backend responses ──
|
||||
|
||||
export interface SystemDashboardData {
|
||||
overall_status: string;
|
||||
timestamp: string;
|
||||
database: {
|
||||
status: string;
|
||||
connections?: number;
|
||||
table_count?: number;
|
||||
db_size_bytes?: number;
|
||||
db_size_human?: string;
|
||||
error?: string;
|
||||
};
|
||||
redis: {
|
||||
status: string;
|
||||
connections?: number;
|
||||
used_memory?: number;
|
||||
used_memory_human?: string;
|
||||
peak_memory_human?: string;
|
||||
uptime_seconds?: number;
|
||||
error?: string;
|
||||
};
|
||||
worker: {
|
||||
status: string;
|
||||
queue_length?: number;
|
||||
active_workers?: number;
|
||||
error?: string;
|
||||
};
|
||||
api: {
|
||||
total_requests?: number;
|
||||
error_count?: number;
|
||||
error_rate?: number;
|
||||
avg_response_time_ms?: number;
|
||||
error?: string;
|
||||
};
|
||||
plugins: {
|
||||
total_discovered?: number;
|
||||
active_plugins?: Array<{
|
||||
name: string;
|
||||
version: string;
|
||||
is_core: boolean;
|
||||
}>;
|
||||
error_count?: number;
|
||||
errors?: string[];
|
||||
error?: string;
|
||||
};
|
||||
storage: {
|
||||
status: string;
|
||||
path?: string;
|
||||
disk_total_bytes?: number;
|
||||
disk_used_bytes?: number;
|
||||
disk_free_bytes?: number;
|
||||
disk_usage_percent?: number;
|
||||
file_count?: number;
|
||||
error?: string;
|
||||
};
|
||||
llm: {
|
||||
total_tokens: number;
|
||||
estimated_cost: number;
|
||||
last_24h_tokens: number;
|
||||
last_24h_cost: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface SystemAlert {
|
||||
severity: 'critical' | 'warning';
|
||||
type: string;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface SystemAlertsData {
|
||||
alerts: SystemAlert[];
|
||||
alert_count: number;
|
||||
timestamp: string;
|
||||
}
|
||||
|
||||
// ── Hooks ──
|
||||
|
||||
const REFRESH_INTERVAL = 30 * 1000; // 30 seconds
|
||||
|
||||
export function useSystemDashboard() {
|
||||
return useQuery({
|
||||
queryKey: ['system-dashboard'],
|
||||
queryFn: () => apiGet<SystemDashboardData>('/system/dashboard'),
|
||||
refetchInterval: REFRESH_INTERVAL,
|
||||
staleTime: REFRESH_INTERVAL,
|
||||
});
|
||||
}
|
||||
|
||||
export function useSystemAlerts() {
|
||||
return useQuery({
|
||||
queryKey: ['system-alerts'],
|
||||
queryFn: () => apiGet<SystemAlertsData>('/system/alerts'),
|
||||
refetchInterval: REFRESH_INTERVAL,
|
||||
staleTime: REFRESH_INTERVAL,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user