yjshen commented on a change in pull request #1682: URL: https://github.com/apache/arrow-datafusion/pull/1682#discussion_r792544773
########## File path: datafusion/src/physical_plan/metrics/value.rs ########## @@ -77,6 +77,62 @@ impl Count { } } +/// A gauge is the simplest metrics type. It just returns a value. +/// For example, you can easily expose current memory consumption with a gauge. +/// +/// Note `clone`ing gauge update the same underlying metrics +#[derive(Debug, Clone)] +pub struct Gauge { + /// value of the metric counter + value: std::sync::Arc<AtomicUsize>, +} + +impl PartialEq for Gauge { + fn eq(&self, other: &Self) -> bool { + self.value().eq(&other.value()) + } +} + +impl Display for Gauge { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{}", self.value()) + } +} + +impl Default for Gauge { + fn default() -> Self { + Self::new() + } +} + +impl Gauge { + /// create a new gauge + pub fn new() -> Self { + Self { + value: Arc::new(AtomicUsize::new(0)), + } + } + + /// Add `n` to the metric's value + pub fn add(&self, n: usize) { Review comment: We discussed this previously in https://github.com/apache/arrow-datafusion/issues/1569. I will create a new issue later. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org