Add new alert architecture
This commit is contained in:
126
frontend/src/types/alerts.ts
Normal file
126
frontend/src/types/alerts.ts
Normal 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>;
|
||||
}
|
||||
Reference in New Issue
Block a user