use super::query::{Query, QueryResult};
use super::sample::{Sample, SampleMetrics};
use super::{Aggregation, Btree, Observation};
#[derive(Debug)]
pub struct Trace {
tree: Btree<Sample, SampleMetrics>,
}
impl Trace {
pub fn add_values(&mut self, samples: Vec<Observation<Sample>>) {
for sample in samples {
self.add_sample(sample);
}
}
pub fn add_sample(&mut self, observation: Observation<Sample>) {
self.tree.append_sample(observation);
}
pub fn query(&self, query: Query) -> QueryResult {
let samples = self.tree.query_range(&query.interval, query.amount);
QueryResult {
query,
inner: samples,
}
}
pub fn summary(&self) -> Option<Aggregation<Sample, SampleMetrics>> {
self.tree.summary()
}
pub fn to_vec(&self) -> Vec<Observation<Sample>> {
self.tree.to_vec()
}
pub fn len(&self) -> usize {
self.tree.len()
}
}
impl Default for Trace {
fn default() -> Self {
let tree = Default::default();
Self { tree }
}
}