Add new alert architecture

This commit is contained in:
Urtzi Alfaro
2025-08-23 10:19:58 +02:00
parent 1a9839240e
commit 4b4268d640
45 changed files with 6518 additions and 1590 deletions

View File

@@ -0,0 +1,126 @@
// frontend/src/types/alerts.ts
/**
* TypeScript types for the unified alert and recommendation system
*/
export type ItemType = 'alert' | 'recommendation';
export type ItemSeverity = 'urgent' | 'high' | 'medium' | 'low';
export type ItemStatus = 'active' | 'acknowledged' | 'resolved';
export interface AlertItem {
id: string;
tenant_id: string;
item_type: ItemType;
type: string; // Specific alert/recommendation type
severity: ItemSeverity;
status: ItemStatus;
service: string;
title: string;
message: string;
actions: string[];
metadata: Record<string, any>;
created_at: string;
acknowledged_at?: string;
acknowledged_by?: string;
resolved_at?: string;
resolved_by?: string;
timestamp: string;
}
export interface SSEEvent {
event: string;
data: string;
id?: string;
}
export interface ItemFilters {
item_type: ItemType | 'all';
severity: ItemSeverity | 'all';
status: ItemStatus | 'all';
service: string | 'all';
search: string;
}
export interface ItemCounts {
total: number;
alerts: {
urgent: number;
high: number;
medium: number;
low: number;
};
recommendations: {
high: number;
medium: number;
low: number;
};
by_status: {
active: number;
acknowledged: number;
resolved: number;
};
}
export interface NotificationSettings {
browser_notifications: boolean;
sound_enabled: boolean;
auto_acknowledge_timeout: number; // minutes
show_recommendations: boolean;
urgent_only: boolean;
}
export interface SSEConnectionState {
status: 'connecting' | 'connected' | 'disconnected' | 'error';
lastConnected?: Date;
reconnectAttempts: number;
latency?: number;
}
// Notification permission states
export type NotificationPermission = 'default' | 'granted' | 'denied';
// UI state
export interface AlertUIState {
filters: ItemFilters;
selectedItems: string[];
sortBy: 'created_at' | 'severity' | 'type';
sortOrder: 'asc' | 'desc';
viewMode: 'list' | 'grid' | 'compact';
sidebarOpen: boolean;
bulkActionsOpen: boolean;
}
// Action types for alert responses
export interface AlertAction {
id: string;
label: string;
type: 'acknowledge' | 'resolve' | 'custom';
icon?: string;
variant?: 'primary' | 'secondary' | 'danger';
requires_confirmation?: boolean;
}
// Metrics for dashboard
export interface AlertMetrics {
response_time_avg: number; // seconds
false_positive_rate: number;
recommendation_adoption_rate: number;
items_last_24h: number;
top_alert_types: Array<{
type: string;
count: number;
}>;
service_health: Record<string, boolean>;
}
// Template for creating new alerts (development/testing)
export interface AlertTemplate {
type: string;
severity: ItemSeverity;
title: string;
message: string;
actions: string[];
metadata?: Record<string, any>;
}