1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
// Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0.
use std::thread;
use std::time::Duration;
use prometheus::{Counter, CounterVec, Encoder, Gauge, GaugeVec, Opts, Registry, TextEncoder};
fn main() {
let r = Registry::new();
let counter_opts = Opts::new("test_counter", "test counter help")
.const_label("a", "1")
.const_label("b", "2");
let counter = Counter::with_opts(counter_opts).unwrap();
let counter_vec_opts = Opts::new("test_counter_vec", "test counter vector help")
.const_label("a", "1")
.const_label("b", "2");
let counter_vec = CounterVec::new(counter_vec_opts, &["c", "d"]).unwrap();
r.register(Box::new(counter.clone())).unwrap();
r.register(Box::new(counter_vec.clone())).unwrap();
let gauge_opts = Opts::new("test_gauge", "test gauge help")
.const_label("a", "1")
.const_label("b", "2");
let gauge = Gauge::with_opts(gauge_opts).unwrap();
let gauge_vec_opts = Opts::new("test_gauge_vec", "test gauge vector help")
.const_label("a", "1")
.const_label("b", "2");
let gauge_vec = GaugeVec::new(gauge_vec_opts, &["c", "d"]).unwrap();
r.register(Box::new(gauge.clone())).unwrap();
r.register(Box::new(gauge_vec.clone())).unwrap();
counter.inc();
assert_eq!(counter.get() as u64, 1);
counter.inc_by(42.0);
assert_eq!(counter.get() as u64, 43);
counter_vec.with_label_values(&["3", "4"]).inc();
assert_eq!(counter_vec.with_label_values(&["3", "4"]).get() as u64, 1);
counter_vec.with_label_values(&["3", "4"]).inc_by(42.0);
assert_eq!(counter_vec.with_label_values(&["3", "4"]).get() as u64, 43);
gauge.inc();
assert_eq!(gauge.get() as u64, 1);
gauge.add(42.0);
assert_eq!(gauge.get() as u64, 43);
gauge_vec.with_label_values(&["3", "4"]).inc();
assert_eq!(gauge_vec.with_label_values(&["3", "4"]).get() as u64, 1);
gauge_vec.with_label_values(&["3", "4"]).set(42.0);
assert_eq!(gauge_vec.with_label_values(&["3", "4"]).get() as u64, 42);
let c2 = counter.clone();
let cv2 = counter_vec.clone();
let g2 = gauge.clone();
let gv2 = gauge_vec.clone();
thread::spawn(move || {
for _ in 0..10 {
thread::sleep(Duration::from_millis(500));
c2.inc();
cv2.with_label_values(&["3", "4"]).inc();
g2.inc();
gv2.with_label_values(&["3", "4"]).inc();
}
});
thread::spawn(move || {
for _ in 0..5 {
thread::sleep(Duration::from_secs(1));
counter.inc();
counter_vec.with_label_values(&["3", "4"]).inc();
gauge.dec();
gauge_vec.with_label_values(&["3", "4"]).set(42.0);
}
});
// Choose your writer and encoder.
let mut buffer = Vec::<u8>::new();
let encoder = TextEncoder::new();
for _ in 0..5 {
let metric_families = r.gather();
encoder.encode(&metric_families, &mut buffer).unwrap();
// Output to the standard output.
println!("{}", String::from_utf8(buffer.clone()).unwrap());
buffer.clear();
thread::sleep(Duration::from_secs(1));
}
}
|