use crate::telemetry::metrics::{MultiGauge, SimpleGauge};
pub struct GaugeGuard<'a> {
metric: &'a SimpleGauge,
by: f64,
}
impl<'a> GaugeGuard<'a> {
pub fn new(metric: &'a SimpleGauge, by: f64) -> Self {
metric.increment(by);
Self { metric, by }
}
}
impl<'a> Drop for GaugeGuard<'a> {
fn drop(&mut self) {
self.metric.decrement(self.by)
}
}
pub struct MultiGaugeGuard<'a> {
metric: &'a MultiGauge,
labels: &'a [&'a str],
by: f64,
}
impl<'a> MultiGaugeGuard<'a> {
pub fn new(metric: &'a MultiGauge, labels: &'a [&'a str], by: f64) -> Self {
metric.increment(labels, by);
Self { metric, labels, by }
}
}
impl<'a> Drop for MultiGaugeGuard<'a> {
fn drop(&mut self) {
self.metric.decrement(self.labels, self.by)
}
}