prometheus-static-metric 0.5.1

Static metric helper utilities for rust-prometheus.
Documentation
// Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0.

/*!

Use metric enums to reuse possible values of a label.

*/

extern crate prometheus;
extern crate prometheus_static_metric;

use prometheus::{CounterVec, IntCounterVec, Opts};
use prometheus_static_metric::make_static_metric;

make_static_metric! {
    pub label_enum Methods {
        post,
        get,
        put,
        delete,
    }

    pub label_enum Products {
        foo,
        bar,
    }

    pub struct MyStaticCounterVec: Counter {
        "method" => Methods,
        "product" => Products,
    }

    pub struct MyAnotherStaticCounterVec: IntCounter {
        "error" => {
            error_1,
            error_2,
        },
        "error_method" => Methods,
    }
}

fn main() {
    let vec = CounterVec::new(Opts::new("foo", "bar"), &["method", "product"]).unwrap();
    let static_counter_vec = MyStaticCounterVec::from(&vec);

    static_counter_vec.post.foo.inc();
    static_counter_vec.delete.bar.inc_by(4.0);
    assert_eq!(static_counter_vec.post.bar.get(), 0.0);
    assert_eq!(vec.with_label_values(&["post", "foo"]).get(), 1.0);
    assert_eq!(vec.with_label_values(&["delete", "bar"]).get(), 4.0);

    // metric enums will expose an enum for type-safe `get()`.
    static_counter_vec.get(Methods::post).foo.inc();
    assert_eq!(static_counter_vec.post.foo.get(), 2.0);

    let vec = IntCounterVec::new(Opts::new("foo", "bar"), &["error", "error_method"]).unwrap();
    let static_counter_vec = MyAnotherStaticCounterVec::from(&vec);

    static_counter_vec.error_1.post.inc();
    static_counter_vec.error_2.delete.inc_by(4);
    assert_eq!(static_counter_vec.error_1.delete.get(), 0);
    assert_eq!(static_counter_vec.error_1.post.get(), 1);
    assert_eq!(vec.with_label_values(&["error_2", "delete"]).get(), 4);
}