dipstick 0.9.4

Fast, all-purpose metrics library decoupling instrumentation from reporting backends. Like logging frameworks but with counters, timers and gauges. Supports combined outputs (e.g. log + graphite), sampling, aggregation, scheduled push, etc.
Documentation
//! Print metrics to stderr with custom formatter including a label.

use dipstick::{
    AppLabel, Formatting, Input, InputKind, InputScope, LabelOp, LineFormat, LineOp, LineTemplate,
    MetricName, Stream,
};
use std::thread::sleep;
use std::time::Duration;

/// Generates template like "$METRIC $value $label_value["abc"]\n"
struct MyFormat;

impl LineFormat for MyFormat {
    fn template(&self, name: &MetricName, _kind: InputKind) -> LineTemplate {
        LineTemplate::new(vec![
            LineOp::Literal(format!("{} ", name.join(".")).to_uppercase().into()),
            LineOp::ValueAsText,
            LineOp::Literal(" ".into()),
            LineOp::LabelExists(
                "abc".into(),
                vec![
                    LabelOp::LabelKey,
                    LabelOp::Literal(":".into()),
                    LabelOp::LabelValue,
                ],
            ),
            LineOp::NewLine,
        ])
    }
}

fn main() {
    let counter = Stream::write_to_stderr()
        .formatting(MyFormat)
        .metrics()
        .counter("counter_a");
    AppLabel::set("abc", "xyz");
    loop {
        // report some metric values from our "application" loop
        counter.count(11);
        sleep(Duration::from_millis(500));
    }
}