bctx_cloud_core/dashboard/
mod.rs1pub mod gauge;
2pub mod history;
3
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, Serialize, Deserialize, Default)]
8pub struct DashboardData {
9 pub tokens_used: u64,
10 pub tokens_saved: u64,
11 pub cost_usd_avoided: f64,
12 pub period_days: u32,
13 pub daily_buckets: Vec<DailyBucket>,
14 pub project_breakdown: Vec<ProjectBreakdown>,
15 pub skill_usage: HashMap<String, u64>,
16 pub top_lens: String,
17}
18
19impl DashboardData {
20 pub fn savings_pct(&self) -> f64 {
21 let total = self.tokens_used + self.tokens_saved;
22 if total == 0 {
23 return 0.0;
24 }
25 self.tokens_saved as f64 / total as f64 * 100.0
26 }
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct DailyBucket {
31 pub date: String,
32 pub tokens_sent: u64,
33 pub tokens_saved: u64,
34 pub cost_usd_avoided: f64,
35 pub skills_used: HashMap<String, u64>,
36 pub top_lens: String,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct ProjectBreakdown {
41 pub project_hash: String,
42 pub name: String,
43 pub total_tokens: u64,
44 pub savings_pct: f64,
45 pub last_active: String,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct ModelAttribution {
50 pub model_id: String,
51 pub tokens_charged: u64,
52 pub cost_usd: f64,
53 pub period: String,
54}