#prometheus #prometheus-metrics #derive #macro-derive #macro

macro derive-prom-metrics

Build Prometheus metrics declaratively as structs

1 unstable release

0.1.0 Nov 18, 2024

#880 in Rust patterns

Download history 197/week @ 2024-11-18 9/week @ 2024-11-25 42/week @ 2024-12-02 38/week @ 2024-12-09

286 downloads per month

MIT/Apache

17KB
260 lines

derive-prom-metrics

Crates.io Docs.rs CI Rust GitHub Template

Build Prometheus metrics declaratively as structs.

This crate is in the very early stages of development.

Example

use derive_prom_metrics::Metrics;
use prometheus::{linear_buckets, Gauge};

#[derive(Metrics, Debug)]
struct Metrics {
    /// A simple counter.
    counter: prometheus::Counter,

    /// A simple gauge.
    /// Is this in the same line? No.
    ///
    /// This will make it into the help text.
    gauge: Gauge,

    /**
     * My help
     *
     * This will make it into the help text, as well as all of the leading asterisks.
     */
    int_counter: prometheus::IntCounter,

    /// An integer gauge.
    int_gauge: prometheus::IntGauge,

    /// A histogram.
    #[prometheus(buckets = linear_buckets(0.005, 0.005, 999)?)]
    histogram: prometheus::Histogram,

    /// A vector of counters, one for each label.
    #[prometheus(label_names = &["label"])]
    counter_vec: prometheus::CounterVec,

    /// A vector of gauges, one for each label.
    #[prometheus(label_names = &["label"])]
    gauge_vec: prometheus::GaugeVec,

    /// A vector of integer counters, one for each label.
    #[prometheus(label_names = &["label"])]
    int_counter_vec: prometheus::IntCounterVec,

    /// A vector of integer gauges, one for each label.
    #[prometheus(label_names = &["label"])]
    int_gauge_vec: prometheus::GaugeVec,

    /// A vector of histograms, one for each label.
    #[prometheus(
        buckets = linear_buckets(0.005, 0.005, 999)?,
        label_names = &["label"],
    )]
    histogram_vec: prometheus::HistogramVec,
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

See CONTRIBUTING.md.

Credits

Created using https://rust-github.github.io/.

Dependencies

~1–1.4MB
~31K SLoC