Skip to main content

bctx_cloud_core/dashboard/
mod.rs

1pub 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}