kaizen/store/sqlite/
report_windows.rs1use super::*;
2
3impl Store {
4 pub fn session_costs_usd_e6_in_window(
6 &self,
7 workspace: &str,
8 start_ms: u64,
9 end_ms: u64,
10 ) -> Result<HashMap<String, i64>> {
11 let mut stmt = self.conn.prepare(
12 "SELECT e.session_id, SUM(COALESCE(e.cost_usd_e6, 0))
13 FROM events e
14 JOIN sessions s ON s.id = e.session_id
15 WHERE s.workspace = ?1
16 AND (
17 (e.ts_ms >= ?2 AND e.ts_ms <= ?3)
18 OR (e.ts_ms < ?4 AND s.started_at_ms >= ?2 AND s.started_at_ms <= ?3)
19 )
20 GROUP BY e.session_id",
21 )?;
22 let rows: Vec<(String, i64)> = stmt
23 .query_map(
24 params![
25 workspace,
26 start_ms as i64,
27 end_ms as i64,
28 SYNTHETIC_TS_CEILING_MS,
29 ],
30 |r| Ok((r.get(0)?, r.get(1)?)),
31 )?
32 .filter_map(|r| r.ok())
33 .collect();
34 Ok(rows.into_iter().collect())
35 }
36}