Skip to main content

litellm_rs/monitoring/
types.rs

1//! Type definitions for monitoring metrics and alerts
2
3/// System metrics snapshot
4#[derive(Debug, Clone, serde::Serialize)]
5pub struct SystemMetrics {
6    /// Timestamp of the snapshot
7    pub timestamp: chrono::DateTime<chrono::Utc>,
8    /// Request metrics
9    pub requests: MonitoringRequestMetrics,
10    /// Provider metrics
11    pub providers: ProviderMetrics,
12    /// System resource metrics
13    pub system: SystemResourceMetrics,
14    /// Error metrics
15    pub errors: ErrorMetrics,
16    /// Performance metrics
17    pub performance: PerformanceMetrics,
18}
19
20/// Request-related metrics
21#[derive(Debug, Clone, serde::Serialize)]
22pub struct MonitoringRequestMetrics {
23    /// Total requests processed
24    pub total_requests: u64,
25    /// Requests per second (current)
26    pub requests_per_second: f64,
27    /// Average response time in milliseconds
28    pub avg_response_time_ms: f64,
29    /// 95th percentile response time
30    pub p95_response_time_ms: f64,
31    /// 99th percentile response time
32    pub p99_response_time_ms: f64,
33    /// Success rate (percentage)
34    pub success_rate: f64,
35    /// Requests by status code
36    pub status_codes: std::collections::HashMap<u16, u64>,
37    /// Requests by endpoint
38    pub endpoints: std::collections::HashMap<String, u64>,
39}
40
41/// Provider-related metrics
42#[derive(Debug, Clone, serde::Serialize)]
43pub struct ProviderMetrics {
44    /// Total provider requests
45    pub total_provider_requests: u64,
46    /// Provider success rates
47    pub provider_success_rates: std::collections::HashMap<String, f64>,
48    /// Provider response times
49    pub provider_response_times: std::collections::HashMap<String, f64>,
50    /// Provider error counts
51    pub provider_errors: std::collections::HashMap<String, u64>,
52    /// Provider usage distribution
53    pub provider_usage: std::collections::HashMap<String, u64>,
54    /// Token usage by provider
55    pub token_usage: std::collections::HashMap<String, u64>,
56    /// Cost by provider
57    pub costs: std::collections::HashMap<String, f64>,
58}
59
60/// System resource metrics
61#[derive(Debug, Clone, serde::Serialize)]
62pub struct SystemResourceMetrics {
63    /// CPU usage percentage
64    pub cpu_usage: f64,
65    /// Memory usage in bytes
66    pub memory_usage: u64,
67    /// Memory usage percentage
68    pub memory_usage_percent: f64,
69    /// Disk usage in bytes
70    pub disk_usage: u64,
71    /// Disk usage percentage
72    pub disk_usage_percent: f64,
73    /// Network bytes received
74    pub network_bytes_in: u64,
75    /// Network bytes sent
76    pub network_bytes_out: u64,
77    /// Active connections
78    pub active_connections: u32,
79    /// Database connections
80    pub database_connections: u32,
81    /// Redis connections
82    pub redis_connections: u32,
83}
84
85/// Error-related metrics
86#[derive(Debug, Clone, serde::Serialize)]
87pub struct ErrorMetrics {
88    /// Total errors
89    pub total_errors: u64,
90    /// Error rate (errors per second)
91    pub error_rate: f64,
92    /// Errors by type
93    pub error_types: std::collections::HashMap<String, u64>,
94    /// Errors by endpoint
95    pub error_endpoints: std::collections::HashMap<String, u64>,
96    /// Critical errors
97    pub critical_errors: u64,
98    /// Warning count
99    pub warnings: u64,
100}
101
102/// Performance-related metrics
103#[derive(Debug, Clone, serde::Serialize)]
104pub struct PerformanceMetrics {
105    /// Cache hit rate
106    pub cache_hit_rate: f64,
107    /// Cache miss rate
108    pub cache_miss_rate: f64,
109    /// Database query time (average)
110    pub avg_db_query_time_ms: f64,
111    /// Queue depth
112    pub queue_depth: u32,
113    /// Throughput (requests per second)
114    pub throughput: f64,
115    /// Latency percentiles
116    pub latency_percentiles: LatencyPercentiles,
117}
118
119/// Latency percentile metrics
120#[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/// Alert severity levels
130#[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/// Alert information
150#[derive(Debug, Clone, serde::Serialize)]
151pub struct Alert {
152    /// Alert ID
153    pub id: String,
154    /// Alert severity
155    pub severity: AlertSeverity,
156    /// Alert title
157    pub title: String,
158    /// Alert description
159    pub description: String,
160    /// Alert timestamp
161    pub timestamp: chrono::DateTime<chrono::Utc>,
162    /// Alert source
163    pub source: String,
164    /// Alert metadata
165    pub metadata: serde_json::Value,
166    /// Whether the alert is resolved
167    pub resolved: bool,
168}
169
170#[cfg(test)]
171#[path = "types_tests.rs"]
172mod tests;