use super::handle::{make_handle, TsDbHandle};
use super::query::{Query, QueryResult};
use super::sample::{Sample, SampleMetrics};
use super::trace::Trace;
use super::{Aggregation, Observation};
use std::collections::HashMap;
#[derive(Debug)]
pub struct TsDb {
path: String,
pub data: HashMap<String, Trace>,
}
impl std::fmt::Display for TsDb {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "TsDb {} with {} traces", self.path, self.data.len())
}
}
impl TsDb {
pub fn new() -> Self {
let path = "x".to_string();
let data = HashMap::new();
Self { path, data }
}
pub fn into_handle(self) -> TsDbHandle {
make_handle(self)
}
pub fn add_values(&mut self, name: &str, samples: Vec<Observation<Sample>>) {
let trace = self.data.get_mut(name).unwrap();
trace.add_values(samples);
}
pub fn new_trace(&mut self, name: &str) {
let trace = Trace::default();
self.data.insert(name.to_string(), trace);
}
pub fn add_value(&mut self, name: &str, observation: Observation<Sample>) {
self.data.get_mut(name).unwrap().add_sample(observation);
}
pub fn query(&self, name: &str, query: Query) -> QueryResult {
self.data.get(name).unwrap().query(query)
}
pub fn summary(&self, name: &str) -> Option<Aggregation<Sample, SampleMetrics>> {
self.data.get(name).unwrap().summary()
}
}