1#[derive(Debug, Clone, serde::Serialize)]
5pub struct SystemMetrics {
6 pub timestamp: chrono::DateTime<chrono::Utc>,
8 pub requests: MonitoringRequestMetrics,
10 pub providers: ProviderMetrics,
12 pub system: SystemResourceMetrics,
14 pub errors: ErrorMetrics,
16 pub performance: PerformanceMetrics,
18}
19
20#[derive(Debug, Clone, serde::Serialize)]
22pub struct MonitoringRequestMetrics {
23 pub total_requests: u64,
25 pub requests_per_second: f64,
27 pub avg_response_time_ms: f64,
29 pub p95_response_time_ms: f64,
31 pub p99_response_time_ms: f64,
33 pub success_rate: f64,
35 pub status_codes: std::collections::HashMap<u16, u64>,
37 pub endpoints: std::collections::HashMap<String, u64>,
39}
40
41#[derive(Debug, Clone, serde::Serialize)]
43pub struct ProviderMetrics {
44 pub total_provider_requests: u64,
46 pub provider_success_rates: std::collections::HashMap<String, f64>,
48 pub provider_response_times: std::collections::HashMap<String, f64>,
50 pub provider_errors: std::collections::HashMap<String, u64>,
52 pub provider_usage: std::collections::HashMap<String, u64>,
54 pub token_usage: std::collections::HashMap<String, u64>,
56 pub costs: std::collections::HashMap<String, f64>,
58}
59
60#[derive(Debug, Clone, serde::Serialize)]
62pub struct SystemResourceMetrics {
63 pub cpu_usage: f64,
65 pub memory_usage: u64,
67 pub memory_usage_percent: f64,
69 pub disk_usage: u64,
71 pub disk_usage_percent: f64,
73 pub network_bytes_in: u64,
75 pub network_bytes_out: u64,
77 pub active_connections: u32,
79 pub database_connections: u32,
81 pub redis_connections: u32,
83}
84
85#[derive(Debug, Clone, serde::Serialize)]
87pub struct ErrorMetrics {
88 pub total_errors: u64,
90 pub error_rate: f64,
92 pub error_types: std::collections::HashMap<String, u64>,
94 pub error_endpoints: std::collections::HashMap<String, u64>,
96 pub critical_errors: u64,
98 pub warnings: u64,
100}
101
102#[derive(Debug, Clone, serde::Serialize)]
104pub struct PerformanceMetrics {
105 pub cache_hit_rate: f64,
107 pub cache_miss_rate: f64,
109 pub avg_db_query_time_ms: f64,
111 pub queue_depth: u32,
113 pub throughput: f64,
115 pub latency_percentiles: LatencyPercentiles,
117}
118
119#[derive(Debug, Clone, serde::Serialize)]
121pub struct LatencyPercentiles {
122 pub p50: f64,
123 pub p90: f64,
124 pub p95: f64,
125 pub p99: f64,
126 pub p999: f64,
127}
128
129#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
131pub enum AlertSeverity {
132 Info,
133 Warning,
134 Critical,
135 Emergency,
136}
137
138impl std::fmt::Display for AlertSeverity {
139 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
140 match self {
141 AlertSeverity::Info => write!(f, "INFO"),
142 AlertSeverity::Warning => write!(f, "WARNING"),
143 AlertSeverity::Critical => write!(f, "CRITICAL"),
144 AlertSeverity::Emergency => write!(f, "EMERGENCY"),
145 }
146 }
147}
148
149#[derive(Debug, Clone, serde::Serialize)]
151pub struct Alert {
152 pub id: String,
154 pub severity: AlertSeverity,
156 pub title: String,
158 pub description: String,
160 pub timestamp: chrono::DateTime<chrono::Utc>,
162 pub source: String,
164 pub metadata: serde_json::Value,
166 pub resolved: bool,
168}
169
170#[cfg(test)]
171#[path = "types_tests.rs"]
172mod tests;