1use super::handle::{make_handle, TsDbHandle};
4use super::query::{Query, QueryResult};
5use super::sample::{Sample, SampleMetrics};
6use super::trace::Trace;
7use super::{Aggregation, Observation};
8use std::collections::HashMap;
9
10#[derive(Debug)]
14pub struct TsDb {
15 path: String,
16 pub data: HashMap<String, Trace>,
17}
18
19impl std::fmt::Display for TsDb {
20 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 write!(f, "TsDb {} with {} traces", self.path, self.data.len())
22 }
23}
24
25impl TsDb {
27 pub fn new() -> Self {
28 let path = "x".to_string();
29 let data = HashMap::new();
30 Self { path, data }
31 }
32
33 pub fn into_handle(self) -> TsDbHandle {
34 make_handle(self)
35 }
36
37 pub fn add_values(&mut self, name: &str, samples: Vec<Observation<Sample>>) {
39 let trace = self.data.get_mut(name).unwrap();
40 trace.add_values(samples);
41 }
42
43 pub fn new_trace(&mut self, name: &str) {
44 let trace = Trace::default();
45 self.data.insert(name.to_string(), trace);
46 }
48
49 pub fn add_value(&mut self, name: &str, observation: Observation<Sample>) {
50 self.data.get_mut(name).unwrap().add_sample(observation);
51 }
52
53 pub fn query(&self, name: &str, query: Query) -> QueryResult {
55 self.data.get(name).unwrap().query(query)
56 }
57
58 pub fn summary(&self, name: &str) -> Option<Aggregation<Sample, SampleMetrics>> {
60 self.data.get(name).unwrap().summary()
61 }
62}