use std::sync::mpsc;
use std::thread;
use std::time::Duration;
use log::info;
use prometheus_client::encoding::text::encode;
use prometheus_client::metrics::counter::Counter;
use prometheus_client::registry::Registry;
use metrics_server::MetricsServer;
fn main() {
env_logger::init();
let (send, recv) = mpsc::channel();
ctrlc::set_handler(move || {
info!("Stopping metrics server");
send.send(()).unwrap();
})
.unwrap();
let server = MetricsServer::http("localhost:8001");
info!("Starting metrics server: http://localhost:8001/metrics");
thread::scope(|s| {
let handle = s.spawn(move || {
let mut registry = Registry::default();
let counter: Counter = Counter::default();
registry.register("some_count", "Number of random counts", counter.clone());
loop {
counter.inc();
let mut encoded = String::new();
encode(&mut encoded, ®istry).unwrap();
server.update(encoded.into());
if recv.recv_timeout(Duration::from_secs(5)).is_ok() {
server.stop().unwrap();
break;
}
}
});
handle.join().unwrap();
});
}