metriken 0.9.2

A fast and lightweight metrics library
Documentation
use metriken::*;

fn custom_formatter(metric: &MetricEntry, format: Format) -> String {
    match format {
        Format::Simple => {
            format!(
                "{}_instance_{}",
                metric.name(),
                metric.metadata().get("instance").unwrap_or("unknown")
            )
        }
        _ => metriken::default_formatter(metric, format),
    }
}

#[metric(name = "metric", formatter = custom_formatter)]
static METRIC: Counter = Counter::new();

#[metric(name = "metric", metadata = { instance = "a"}, formatter = custom_formatter)]
static METRIC_A: Counter = Counter::new();

#[metric(name = "metric", metadata = { instance = "b"}, formatter = custom_formatter)]
static METRIC_B: Counter = Counter::new();

#[test]
fn no_metadata() {
    let metrics = metrics().static_metrics();
    let metric = metrics //
        .iter()
        .find(|entry| entry.is(&METRIC))
        .unwrap();

    assert_eq!(metrics.len(), 3);
    assert_eq!(metric.name(), "metric");
    assert_eq!(metric.formatted(Format::Simple), "metric_instance_unknown");
    assert_eq!(metric.formatted(Format::Prometheus), "metric");
}

#[test]
fn instance_a() {
    let metrics = metrics().static_metrics();
    let metric = metrics //
        .iter()
        .find(|entry| entry.is(&METRIC_A))
        .unwrap();

    assert_eq!(metrics.len(), 3);
    assert_eq!(metric.name(), "metric");
    assert_eq!(metric.formatted(Format::Simple), "metric_instance_a");
    assert_eq!(
        metric.formatted(Format::Prometheus),
        "metric{instance=\"a\"}"
    );
}

#[test]
fn instance_b() {
    let metrics = metrics().static_metrics();
    let metric = metrics.iter().find(|entry| entry.is(&METRIC_B)).unwrap();

    assert_eq!(metrics.len(), 3);
    assert_eq!(metric.name(), "metric");
    assert_eq!(metric.formatted(Format::Simple), "metric_instance_b");
    assert_eq!(
        metric.formatted(Format::Prometheus),
        "metric{instance=\"b\"}"
    );
}