near-metrics 0.14.0

A fork of the lighthouse_metrics crate used to implement prometheus
Documentation

A fork of the lighthouse_metrics crate used to implement prometheus

A wrapper around the prometheus crate that provides a global, lazy_static metrics registry and functions to add and use the following components (more info at Prometheus docs):

  • Histogram: used with start_timer() and observe_duration() or observe() method to record durations (e.g., block processing time).
  • IncCounter: used to represent an ideally ever-growing, never-shrinking integer (e.g., number of block processing requests).
  • IntGauge: used to represent an varying integer (e.g., number of attestations per block).

Important

Metrics will fail if two items have the same name. All metrics must have a unique name. Because we use a global registry there is no namespace per crate, it's one big global space.

See the Prometheus naming best practices when choosing metric names.

Example

use once_cell::sync::Lazy;

use near_metrics::*;

// These metrics are "magically" linked to the global registry defined in `lighthouse_metrics`.
pub static RUN_COUNT: Lazy<IntCounter> = Lazy::new(|| {
try_create_int_counter(
"runs_total",
"Total number of runs",
)
.unwrap()
});
pub static CURRENT_VALUE: Lazy<IntGauge> = Lazy::new(|| {
try_create_int_gauge(
"current_value",
"The current value",
)
.unwrap()
});
pub static RUN_TIME: Lazy<Histogram> = Lazy::new(|| {
try_create_histogram(
"run_seconds",
"Time taken (measured to high precision)",
)
.unwrap()
});

fn main() {
for i in 0..100 {
RUN_COUNT.inc();
let timer = RUN_TIME.start_timer();
for j in 0..10 {
CURRENT_VALUE.set(j);
println!("Howdy partner");
}
timer.observe_duration();
}

assert_eq!(100, RUN_COUNT.get());
assert_eq!(9, CURRENT_VALUE.get());
assert_eq!(100, RUN_TIME.get_sample_count());
assert!(0.0 < RUN_TIME.get_sample_sum());
}