use serde::{Deserialize, Serialize};
pub use roder_usage_analytics::{
SessionSummary, StatsFilter, TokenSummaryRow, ToolSummary, UsageSummary,
};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsQueryParams {
#[serde(default)]
pub filter: StatsFilter,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsSummaryResult {
pub summary: UsageSummary,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsToolsParams {
#[serde(default)]
pub filter: StatsFilter,
#[serde(default)]
pub sort: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsToolsResult {
pub tools: Vec<ToolSummary>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsTokensParams {
#[serde(default)]
pub filter: StatsFilter,
#[serde(default)]
pub group: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsTokensResult {
pub rows: Vec<TokenSummaryRow>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsSessionsResult {
pub sessions: Vec<SessionSummary>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsBackfillParams {
#[serde(default)]
pub rebuild: bool,
#[serde(default)]
pub best_effort: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsBackfillResult {
pub files_scanned: u64,
pub lines_ingested: u64,
pub lines_skipped_by_offset: u64,
pub sessions_enriched: u64,
pub parse_error_count: u64,
pub rollup_rows: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsExportParams {
pub output_path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StatsExportResult {
pub output_path: String,
pub records: u64,
}