Skip to content

Commit 392b637

Browse files
committed
Provide a method to clear a histogram
Signed-off-by: Zak Cutner <[email protected]>
1 parent bf196d7 commit 392b637

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/encoding/protobuf.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,35 @@ mod tests {
739739
);
740740
assert_eq!(1, value.count);
741741
assert_eq!(11, value.buckets.len());
742+
assert_eq!(1u64, value.buckets.iter().map(|bucket| bucket.count).sum());
743+
}
744+
_ => panic!("wrong value type"),
745+
}
746+
747+
histogram.clear();
748+
749+
let metric_set = encode(&registry).unwrap();
750+
751+
let family = metric_set.metric_families.first().unwrap();
752+
assert_eq!("my_histogram", family.name);
753+
assert_eq!("My histogram.", family.help);
754+
755+
assert_eq!(
756+
openmetrics_data_model::MetricType::Histogram as i32,
757+
extract_metric_type(&metric_set)
758+
);
759+
760+
match extract_metric_point_value(&metric_set) {
761+
openmetrics_data_model::metric_point::Value::HistogramValue(value) => {
762+
assert_eq!(
763+
Some(openmetrics_data_model::histogram_value::Sum::DoubleValue(
764+
0.0
765+
)),
766+
value.sum
767+
);
768+
assert_eq!(0, value.count);
769+
assert_eq!(11, value.buckets.len());
770+
assert_eq!(0u64, value.buckets.iter().map(|bucket| bucket.count).sum());
742771
}
743772
_ => panic!("wrong value type"),
744773
}

src/metrics/histogram.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,17 @@ impl Histogram {
101101
}
102102
}
103103

104+
/// Clears all observations.
105+
pub fn clear(&self) {
106+
let mut inner = self.inner.write();
107+
inner.sum = Default::default();
108+
inner.count = Default::default();
109+
110+
for (_, value) in &mut inner.buckets {
111+
*value = 0;
112+
}
113+
}
114+
104115
pub(crate) fn get(&self) -> (f64, u64, MappedRwLockReadGuard<Vec<(f64, u64)>>) {
105116
let inner = self.inner.read();
106117
let sum = inner.sum;
@@ -149,6 +160,7 @@ mod tests {
149160
fn histogram() {
150161
let histogram = Histogram::new(exponential_buckets(1.0, 2.0, 10));
151162
histogram.observe(1.0);
163+
histogram.clear();
152164
}
153165

154166
#[test]

0 commit comments

Comments
 (0)