refactoring the futures to be more readable
This commit is contained in:
		
							
								
								
									
										59
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								src/main.rs
									
									
									
									
									
								
							@ -1,20 +1,25 @@
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate serde_derive;
 | 
			
		||||
extern crate toml;
 | 
			
		||||
extern crate hyper;
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate lazy_static;
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate prometheus;
 | 
			
		||||
extern crate futures;
 | 
			
		||||
extern crate tokio;
 | 
			
		||||
extern crate env_logger;
 | 
			
		||||
 | 
			
		||||
use hyper::header::CONTENT_TYPE;
 | 
			
		||||
use hyper::{Body, Request, Response, Server};
 | 
			
		||||
use hyper::rt::Future;
 | 
			
		||||
use hyper::service::service_fn_ok;
 | 
			
		||||
 | 
			
		||||
use prometheus::{Counter, Encoder, Gauge, HistogramVec, TextEncoder};
 | 
			
		||||
use lazy_static::lazy_static;
 | 
			
		||||
 | 
			
		||||
use prometheus::{Counter, Encoder, Gauge, HistogramVec, TextEncoder};
 | 
			
		||||
use prometheus::*;
 | 
			
		||||
 | 
			
		||||
use futures::future::lazy;
 | 
			
		||||
 | 
			
		||||
//TODO: Replace with useful metrics, these are beyond useless
 | 
			
		||||
lazy_static! {
 | 
			
		||||
    static ref HTTP_COUNTER: Counter = register_counter!(opts!(
 | 
			
		||||
        "example_http_requests_total",
 | 
			
		||||
@ -36,16 +41,11 @@ lazy_static! {
 | 
			
		||||
    .unwrap();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    //TODO: Add service that does the pinging, based on oping and the example over at https://tokio.rs/docs/futures/spawning/
 | 
			
		||||
    //TODO: Clean this shameful mess up!
 | 
			
		||||
    //TODO: Ivestigate why all samples end up in all histogram buckets.
 | 
			
		||||
    //TODO: Do config reading etc
 | 
			
		||||
fn start_serving_metrics() {
 | 
			
		||||
    let serve_metrics = || {
 | 
			
		||||
        service_fn_ok(|_req| {
 | 
			
		||||
            HTTP_COUNTER.inc();
 | 
			
		||||
            let timer = HTTP_REQ_HISTOGRAM.with_label_values(&["all"]).start_timer();
 | 
			
		||||
 | 
			
		||||
            let metric_families = prometheus::gather();
 | 
			
		||||
            let mut buffer = vec![];
 | 
			
		||||
            let encoder = TextEncoder::new();
 | 
			
		||||
@ -58,19 +58,28 @@ fn main() {
 | 
			
		||||
        })
 | 
			
		||||
    };
 | 
			
		||||
    println!("listening addr 127.0.0.1:9898");
 | 
			
		||||
    let server = Server::bind(&([127, 0, 0, 1], 9898).into()).serve(serve_metrics);
 | 
			
		||||
 | 
			
		||||
    // Prepare some signal for when the server should start
 | 
			
		||||
    // shutting down...
 | 
			
		||||
    let (tx, rx) = futures::sync::oneshot::channel::<()>();
 | 
			
		||||
 | 
			
		||||
    let graceful = server.with_graceful_shutdown(rx).map_err(|err| {
 | 
			
		||||
        eprintln!("server error: {}", err)
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Spawn `server` onto an Executor...
 | 
			
		||||
    hyper::rt::run(graceful);
 | 
			
		||||
 | 
			
		||||
    // And later, trigger the signal by calling `tx.send(())`.
 | 
			
		||||
    let _ = tx.send(());
 | 
			
		||||
    let server = Server::bind(&([127, 0, 0, 1], 9898).into())
 | 
			
		||||
        .serve(serve_metrics)
 | 
			
		||||
        .map_err(|err| eprintln!("server error: {}", err));
 | 
			
		||||
    tokio::spawn(server);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn start_pinging_hosts() {
 | 
			
		||||
    tokio::spawn(lazy(|| {
 | 
			
		||||
        //TODO: Implement the pinging, based on oping and the example over at
 | 
			
		||||
        //      https://tokio.rs/docs/futures/spawning/
 | 
			
		||||
        Ok(())
 | 
			
		||||
    }));
 | 
			
		||||
}
 | 
			
		||||
    //TODO: Clean this shameful mess up!
 | 
			
		||||
    //TODO: Do config reading, cli args, logging etc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    env_logger::init();
 | 
			
		||||
    tokio::run(lazy(|| {
 | 
			
		||||
        start_serving_metrics();
 | 
			
		||||
        start_pinging_hosts();
 | 
			
		||||
        Ok(())
 | 
			
		||||
    }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user