inlyne 0.5.1-beta

Introducing Inlyne, a GPU powered yet browserless tool to help you quickly view markdown files in the blink of an eye.
use super::{Metric, Unit, SPAN_LEVEL};

use metrics::{GaugeFn, Key};
use parking_lot::Mutex;
use tracing::{debug, span};

pub struct Handle(pub Mutex<Metric<f64>>);

impl Handle {
    pub fn new(key: Key, unit: Option<Unit>) -> Self {
        Self(Metric::new(key, 0.0, unit))
    }
}

impl GaugeFn for Handle {
    fn increment(&self, value: f64) {
        let mut gauge = self.0.lock();
        gauge.value += value;

        let key = gauge.key.name();
        let unit = gauge.unit.as_canonical_label();
        let gauge_value = gauge.value;
        let span = span!(SPAN_LEVEL, "gauge", %key);
        let _enter = span.enter();
        debug!("incremented by {value}{unit} to {gauge_value}{unit}",);
    }

    fn decrement(&self, value: f64) {
        let mut gauge = self.0.lock();
        gauge.value -= value;

        let key = gauge.key.name();
        let unit = gauge.unit.as_canonical_label();
        let gauge_value = gauge.value;
        let span = span!(SPAN_LEVEL, "gauge", %key);
        let _enter = span.enter();
        debug!("decremented by {value}{unit} to {gauge_value}{unit}",);
    }

    fn set(&self, value: f64) {
        let mut gauge = self.0.lock();
        gauge.value = value;

        let key = gauge.key.name();
        let unit = gauge.unit.as_canonical_label();
        let span = span!(SPAN_LEVEL, "gauge", %key);
        let _enter = span.enter();
        debug!("set to {value}{unit}",);
    }
}