mi6_core/model/event/
stats.rs

1//! Aggregated statistics for API requests in a session.
2
3use chrono::{DateTime, Utc};
4
5/// Aggregated statistics for API requests in a session
6#[derive(Debug, Clone, Default)]
7pub struct ApiStats {
8    /// Session ID
9    pub session_id: String,
10    /// Total API requests
11    pub request_count: i64,
12    /// Total input tokens
13    pub tokens_input: i64,
14    /// Total output tokens
15    pub tokens_output: i64,
16    /// Total cache read tokens
17    pub tokens_cache_read: i64,
18    /// Total cache write tokens
19    pub tokens_cache_write: i64,
20    /// Total cost in USD
21    pub cost_usd: f64,
22    /// First request timestamp
23    pub first_request_ts: Option<DateTime<Utc>>,
24    /// Last request timestamp
25    pub last_request_ts: Option<DateTime<Utc>>,
26    /// Context size of most recent request (input + cache_read + cache_write)
27    pub context_latest: i64,
28    /// Maximum context size across all requests
29    pub context_peak: i64,
30}
31
32impl ApiStats {
33    /// Total tokens across all categories
34    pub fn total_tokens(&self) -> i64 {
35        self.tokens_input + self.tokens_output + self.tokens_cache_read + self.tokens_cache_write
36    }
37
38    /// Duration from first to last request
39    pub fn duration(&self) -> Option<chrono::Duration> {
40        match (self.first_request_ts, self.last_request_ts) {
41            (Some(first), Some(last)) => Some(last - first),
42            _ => None,
43        }
44    }
45}