use std::collections::HashMap;
#[derive( Debug, Clone, PartialEq )]
pub struct SessionStats
{
pub total_entries : usize,
pub user_entries : usize,
pub assistant_entries : usize,
pub total_input_tokens : u64,
pub total_output_tokens : u64,
pub total_cache_read_tokens : u64,
pub total_cache_creation_tokens : u64,
pub is_agent_session : bool,
pub session_id : String,
pub first_timestamp : Option< String >,
pub last_timestamp : Option< String >,
}
impl SessionStats
{
#[must_use]
#[inline]
pub fn new( session_id : String ) -> Self
{
Self
{
total_entries : 0,
user_entries : 0,
assistant_entries : 0,
total_input_tokens : 0,
total_output_tokens : 0,
total_cache_read_tokens : 0,
total_cache_creation_tokens : 0,
is_agent_session : false,
session_id,
first_timestamp : None,
last_timestamp : None,
}
}
}
#[derive( Debug, Clone, PartialEq )]
pub struct GlobalStats
{
pub total_projects : usize,
pub uuid_projects : usize,
pub path_projects : usize,
pub total_sessions : usize,
pub main_sessions : usize,
pub agent_sessions : usize,
pub total_entries : usize,
pub total_user_entries : usize,
pub total_assistant_entries : usize,
pub total_input_tokens : u64,
pub total_output_tokens : u64,
pub total_cache_read_tokens : u64,
pub total_cache_creation_tokens : u64,
pub project_breakdown : HashMap< String, ProjectStats >,
}
impl GlobalStats
{
#[must_use]
#[inline]
pub fn new() -> Self
{
Self
{
total_projects : 0,
uuid_projects : 0,
path_projects : 0,
total_sessions : 0,
main_sessions : 0,
agent_sessions : 0,
total_entries : 0,
total_user_entries : 0,
total_assistant_entries : 0,
total_input_tokens : 0,
total_output_tokens : 0,
total_cache_read_tokens : 0,
total_cache_creation_tokens : 0,
project_breakdown : HashMap::new(),
}
}
}
impl Default for GlobalStats
{
#[inline]
fn default() -> Self
{
Self::new()
}
}
#[derive( Debug, Clone, PartialEq )]
pub struct ProjectStats
{
pub project_id : String,
pub session_count : usize,
pub main_session_count : usize,
pub agent_session_count : usize,
pub total_entries : usize,
pub total_user_entries : usize,
pub total_assistant_entries : usize,
pub total_input_tokens : u64,
pub total_output_tokens : u64,
}
impl ProjectStats
{
#[must_use]
#[inline]
pub fn new( project_id : String ) -> Self
{
Self
{
project_id,
session_count : 0,
main_session_count : 0,
agent_session_count : 0,
total_entries : 0,
total_user_entries : 0,
total_assistant_entries : 0,
total_input_tokens : 0,
total_output_tokens : 0,
}
}
}