use std::collections::HashMap;
use crate::Window;
pub trait HistogramMetric: Send + Sync + 'static {
fn config(&self) -> histogram::Config;
fn load(&self) -> Option<histogram::Histogram>;
}
pub trait CounterGroupMetric: Send + Sync + 'static {
fn entries(&self) -> usize;
fn counter_value(&self, idx: usize) -> Option<u64>;
fn load_counters(&self) -> Option<Vec<u64>>;
fn load_metadata(&self, idx: usize) -> Option<HashMap<String, String>>;
fn metadata_snapshot(&self) -> Vec<(usize, HashMap<String, String>)>;
fn load_window(&self, _idx: usize) -> Option<Window> {
None
}
fn window_snapshot(&self) -> Vec<(usize, Window)> {
Vec::new()
}
fn load_with_window(&self, idx: usize) -> (Option<u64>, Option<Window>) {
(self.counter_value(idx), self.load_window(idx))
}
}
pub trait GaugeGroupMetric: Send + Sync + 'static {
fn entries(&self) -> usize;
fn gauge_value(&self, idx: usize) -> Option<i64>;
fn load_gauges(&self) -> Option<Vec<i64>>;
fn load_metadata(&self, idx: usize) -> Option<HashMap<String, String>>;
fn metadata_snapshot(&self) -> Vec<(usize, HashMap<String, String>)>;
fn load_window(&self, _idx: usize) -> Option<Window> {
None
}
fn window_snapshot(&self) -> Vec<(usize, Window)> {
Vec::new()
}
fn load_with_window(&self, idx: usize) -> (Option<i64>, Option<Window>) {
(self.gauge_value(idx), self.load_window(idx))
}
}
pub trait HistogramGroupMetric: Send + Sync + 'static {
fn entries(&self) -> usize;
fn config(&self) -> histogram::Config;
fn load_histogram(&self, idx: usize) -> Option<histogram::Histogram>;
fn load_all_histograms(&self) -> Option<Vec<histogram::Histogram>>;
fn load_metadata(&self, idx: usize) -> Option<HashMap<String, String>>;
fn metadata_snapshot(&self) -> Vec<(usize, HashMap<String, String>)>;
fn load_window(&self, _idx: usize) -> Option<Window> {
None
}
fn window_snapshot(&self) -> Vec<(usize, Window)> {
Vec::new()
}
}