mi6_core/model/event/
stats.rs1use chrono::{DateTime, Utc};
4
5#[derive(Debug, Clone, Default)]
7pub struct ApiStats {
8 pub session_id: String,
10 pub request_count: i64,
12 pub tokens_input: i64,
14 pub tokens_output: i64,
16 pub tokens_cache_read: i64,
18 pub tokens_cache_write: i64,
20 pub cost_usd: f64,
22 pub first_request_ts: Option<DateTime<Utc>>,
24 pub last_request_ts: Option<DateTime<Utc>>,
26 pub context_latest: i64,
28 pub context_peak: i64,
30}
31
32impl ApiStats {
33 pub fn total_tokens(&self) -> i64 {
35 self.tokens_input + self.tokens_output + self.tokens_cache_read + self.tokens_cache_write
36 }
37
38 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}