use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IndexMetrics {
#[serde(default)]
pub parse_time_ms: u64,
#[serde(default)]
pub build_time_ms: u64,
#[serde(default)]
pub enhance_time_ms: u64,
#[serde(default)]
pub enrich_time_ms: u64,
#[serde(default)]
pub optimize_time_ms: u64,
#[serde(default)]
pub validate_time_ms: u64,
#[serde(default)]
pub split_time_ms: u64,
#[serde(default)]
pub reasoning_index_time_ms: u64,
#[serde(default)]
pub topics_indexed: usize,
#[serde(default)]
pub keywords_indexed: usize,
#[serde(default)]
pub total_tokens_generated: usize,
#[serde(default)]
pub llm_calls: usize,
#[serde(default)]
pub nodes_processed: usize,
#[serde(default)]
pub summaries_generated: usize,
#[serde(default)]
pub nodes_skipped: usize,
#[serde(default)]
pub nodes_merged: usize,
}
impl IndexMetrics {
pub fn new() -> Self {
Self::default()
}
pub fn record_parse(&mut self, duration_ms: u64) {
self.parse_time_ms = duration_ms;
}
pub fn record_build(&mut self, duration_ms: u64) {
self.build_time_ms = duration_ms;
}
pub fn record_enhance(&mut self, duration_ms: u64) {
self.enhance_time_ms = duration_ms;
}
pub fn record_enrich(&mut self, duration_ms: u64) {
self.enrich_time_ms = duration_ms;
}
pub fn record_optimize(&mut self, duration_ms: u64) {
self.optimize_time_ms = duration_ms;
}
pub fn record_validate(&mut self, duration_ms: u64) {
self.validate_time_ms = duration_ms;
}
pub fn record_split(&mut self, duration_ms: u64) {
self.split_time_ms = duration_ms;
}
pub fn record_reasoning_index(&mut self, duration_ms: u64, topics: usize, keywords: usize) {
self.reasoning_index_time_ms = duration_ms;
self.topics_indexed = topics;
self.keywords_indexed = keywords;
}
pub fn increment_llm_calls(&mut self) {
self.llm_calls += 1;
}
pub fn add_tokens_generated(&mut self, tokens: usize) {
self.total_tokens_generated += tokens;
}
pub fn set_nodes_processed(&mut self, count: usize) {
self.nodes_processed = count;
}
pub fn increment_summaries(&mut self) {
self.summaries_generated += 1;
}
pub fn increment_nodes_skipped(&mut self) {
self.nodes_skipped += 1;
}
pub fn increment_nodes_merged(&mut self) {
self.nodes_merged += 1;
}
pub fn total_time_ms(&self) -> u64 {
self.parse_time_ms
+ self.build_time_ms
+ self.validate_time_ms
+ self.split_time_ms
+ self.enhance_time_ms
+ self.enrich_time_ms
+ self.reasoning_index_time_ms
+ self.optimize_time_ms
}
}