mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-24 08:51:16 -05:00
Implement ML Anomaly Detection
Introduce statistical anomaly detection for metrics via edge function, hooks, and UI components. Adds detection algorithms (z-score, moving average, rate of change), anomaly storage, auto-alerts, and dashboard rendering of detected anomalies with run-once trigger and scheduling guidance.
This commit is contained in:
@@ -6,6 +6,7 @@ import { SystemHealthStatus } from '@/components/admin/SystemHealthStatus';
|
||||
import { GroupedAlertsPanel } from '@/components/admin/GroupedAlertsPanel';
|
||||
import { CorrelatedAlertsPanel } from '@/components/admin/CorrelatedAlertsPanel';
|
||||
import { IncidentsPanel } from '@/components/admin/IncidentsPanel';
|
||||
import { AnomalyDetectionPanel } from '@/components/admin/AnomalyDetectionPanel';
|
||||
import { MonitoringQuickStats } from '@/components/admin/MonitoringQuickStats';
|
||||
import { RecentActivityTimeline } from '@/components/admin/RecentActivityTimeline';
|
||||
import { MonitoringNavCards } from '@/components/admin/MonitoringNavCards';
|
||||
@@ -13,6 +14,7 @@ import { useSystemHealth } from '@/hooks/useSystemHealth';
|
||||
import { useGroupedAlerts } from '@/hooks/admin/useGroupedAlerts';
|
||||
import { useCorrelatedAlerts } from '@/hooks/admin/useCorrelatedAlerts';
|
||||
import { useIncidents } from '@/hooks/admin/useIncidents';
|
||||
import { useAnomalyDetections } from '@/hooks/admin/useAnomalyDetection';
|
||||
import { useRecentActivity } from '@/hooks/admin/useRecentActivity';
|
||||
import { useDatabaseHealth } from '@/hooks/admin/useDatabaseHealth';
|
||||
import { useModerationHealth } from '@/hooks/admin/useModerationHealth';
|
||||
@@ -30,6 +32,7 @@ export default function MonitoringOverview() {
|
||||
const groupedAlerts = useGroupedAlerts({ includeResolved: false });
|
||||
const correlatedAlerts = useCorrelatedAlerts();
|
||||
const incidents = useIncidents('open');
|
||||
const anomalies = useAnomalyDetections();
|
||||
const recentActivity = useRecentActivity(3600000); // 1 hour
|
||||
const dbHealth = useDatabaseHealth();
|
||||
const moderationHealth = useModerationHealth();
|
||||
@@ -40,6 +43,7 @@ export default function MonitoringOverview() {
|
||||
groupedAlerts.isLoading ||
|
||||
correlatedAlerts.isLoading ||
|
||||
incidents.isLoading ||
|
||||
anomalies.isLoading ||
|
||||
recentActivity.isLoading ||
|
||||
dbHealth.isLoading ||
|
||||
moderationHealth.isLoading ||
|
||||
@@ -74,6 +78,10 @@ export default function MonitoringOverview() {
|
||||
queryKey: queryKeys.monitoring.incidents(),
|
||||
refetchType: 'active'
|
||||
});
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: queryKeys.monitoring.anomalyDetections(),
|
||||
refetchType: 'active'
|
||||
});
|
||||
};
|
||||
|
||||
// Calculate error count for nav card (from recent activity)
|
||||
@@ -136,6 +144,12 @@ export default function MonitoringOverview() {
|
||||
isLoading={incidents.isLoading}
|
||||
/>
|
||||
|
||||
{/* ML Anomaly Detection */}
|
||||
<AnomalyDetectionPanel
|
||||
anomalies={anomalies.data}
|
||||
isLoading={anomalies.isLoading}
|
||||
/>
|
||||
|
||||
{/* Quick Stats Grid */}
|
||||
<MonitoringQuickStats
|
||||
systemHealth={systemHealth.data ?? undefined}
|
||||
|
||||
Reference in New Issue
Block a user