From 7fcab1c46e4b5165a6bddea90fe67693b359e887 Mon Sep 17 00:00:00 2001 From: Jerome Gravel-Niquet Date: Tue, 17 Dec 2019 20:08:37 +0000 Subject: [PATCH] Adds increment and decrement methods to Gauge (#64) * Adds increment and decrement methods to Gauge. --- metrics-runtime/src/common.rs | 18 +++++++++++++++++- metrics-runtime/src/data/gauge.rs | 10 ++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/metrics-runtime/src/common.rs b/metrics-runtime/src/common.rs index f55214c..70828a9 100644 --- a/metrics-runtime/src/common.rs +++ b/metrics-runtime/src/common.rs @@ -164,6 +164,20 @@ impl ValueHandle { } } + pub fn increment_gauge(&self, value: i64) { + match self.state.deref() { + ValueState::Gauge(inner) => inner.fetch_add(value, Ordering::Release), + _ => unreachable!("tried to access as gauge, not a gauge"), + }; + } + + pub fn decrement_gauge(&self, value: i64) { + match self.state.deref() { + ValueState::Gauge(inner) => inner.fetch_sub(value, Ordering::Release), + _ => unreachable!("tried to access as gauge, not a gauge"), + }; + } + pub fn update_histogram(&self, value: u64) { match self.state.deref() { ValueState::Histogram(inner) => inner.record(value), @@ -313,8 +327,10 @@ mod tests { let gauge = ValueHandle::gauge(); gauge.update_gauge(23); + gauge.increment_gauge(20); + gauge.decrement_gauge(1); match gauge.snapshot() { - ValueSnapshot::Single(Measurement::Gauge(value)) => assert_eq!(value, 23), + ValueSnapshot::Single(Measurement::Gauge(value)) => assert_eq!(value, 42), _ => panic!("incorrect value snapshot type for gauge"), } diff --git a/metrics-runtime/src/data/gauge.rs b/metrics-runtime/src/data/gauge.rs index e947581..2c35f64 100644 --- a/metrics-runtime/src/data/gauge.rs +++ b/metrics-runtime/src/data/gauge.rs @@ -13,6 +13,16 @@ impl Gauge { pub fn record(&self, value: i64) { self.handle.update_gauge(value); } + + /// Increments the gauge's value + pub fn increment(&self, value: i64) { + self.handle.increment_gauge(value); + } + + /// Decrements the gauge's value + pub fn decrement(&self, value: i64) { + self.handle.decrement_gauge(value); + } } impl From for Gauge {