pub use prometheus::{
Counter, Encoder, Gauge, GaugeVec, Histogram, HistogramOpts, HistogramVec, IntCounter,
IntCounterVec, IntGauge, IntGaugeVec, Opts, Result, TextEncoder,
};
pub fn gather() -> Vec<prometheus::proto::MetricFamily> {
prometheus::gather()
}
pub fn try_create_int_counter(name: &str, help: &str) -> Result<IntCounter> {
let opts = Opts::new(name, help);
let counter = IntCounter::with_opts(opts)?;
prometheus::register(Box::new(counter.clone()))?;
Ok(counter)
}
pub fn try_create_int_counter_vec(
name: &str,
help: &str,
labels: &[&str],
) -> Result<IntCounterVec> {
let opts = Opts::new(name, help);
let counter = IntCounterVec::new(opts, labels)?;
prometheus::register(Box::new(counter.clone()))?;
Ok(counter)
}
pub fn try_create_counter(name: &str, help: &str) -> Result<Counter> {
let opts = Opts::new(name, help);
let counter = Counter::with_opts(opts)?;
prometheus::register(Box::new(counter.clone()))?;
Ok(counter)
}
pub fn do_create_int_counter_vec(name: &str, help: &str, labels: &[&str]) -> IntCounterVec {
if let Ok(value) = try_create_int_counter_vec(name, help, labels) {
return value;
}
let mut suffix = 0;
loop {
if let Ok(value) =
try_create_int_counter_vec(format!("{}_{}", name, suffix).as_str(), help, labels)
{
return value;
}
suffix += 1;
}
}
pub fn try_create_int_gauge(name: &str, help: &str) -> Result<IntGauge> {
let opts = Opts::new(name, help);
let gauge = IntGauge::with_opts(opts)?;
prometheus::register(Box::new(gauge.clone()))?;
Ok(gauge)
}
pub fn try_create_int_gauge_vec(name: &str, help: &str, labels: &[&str]) -> Result<IntGaugeVec> {
let opts = Opts::new(name, help);
let gauge = IntGaugeVec::new(opts, labels)?;
prometheus::register(Box::new(gauge.clone()))?;
Ok(gauge)
}
pub fn try_create_gauge(name: &str, help: &str) -> Result<Gauge> {
let opts = Opts::new(name, help);
let gauge = Gauge::with_opts(opts)?;
prometheus::register(Box::new(gauge.clone()))?;
Ok(gauge)
}
pub fn try_create_gauge_vec(name: &str, help: &str, labels: &[&str]) -> Result<GaugeVec> {
let opts = Opts::new(name, help);
let gauge = GaugeVec::new(opts, labels)?;
prometheus::register(Box::new(gauge.clone()))?;
Ok(gauge)
}
pub fn try_create_histogram(name: &str, help: &str) -> Result<Histogram> {
let opts = HistogramOpts::new(name, help);
let histogram = Histogram::with_opts(opts)?;
prometheus::register(Box::new(histogram.clone()))?;
Ok(histogram)
}
pub fn try_create_histogram_vec(
name: &str,
help: &str,
labels: &[&str],
buckets: Option<Vec<f64>>,
) -> Result<HistogramVec> {
let mut opts = HistogramOpts::new(name, help);
if let Some(buckets) = buckets {
opts = opts.buckets(buckets);
}
let histogram = HistogramVec::new(opts, labels)?;
prometheus::register(Box::new(histogram.clone()))?;
Ok(histogram)
}