metrics_distributor 0.2.4

Ingest logs and forward aggregated data to APIs/services.
#![feature(test)]

extern crate metrics_distributor;
extern crate test;

use metrics_distributor::parsers::log_line::*;
use metrics_distributor::store::BaseStore;
use test::Bencher;

#[bench]
fn bench_heroku_log_line_reader(b: &mut Bencher) {
    let lines = vec![
        "2016-02-26 21:34:59.429615+00:00 heroku web.2 - - source=web.2 dyno=heroku.123.XYZ sample#load_avg_1m=0.56 sample#load_avg_5m=0.26 sample#load_avg_15m=0.17\n",
        "2016-02-26 21:50:36.352129+00:00 heroku router - - sock=backend at=error code=H18 desc=\"Server Request Interrupted\" method=GET path=\"/\" host=www.example.com request_id=XYZ fwd=\"1.2.3.4\" dyno=web.5 connect=0ms service=495ms status=503 bytes=1648\n",
        "2016-02-26 21:34:59.370813+00:00 heroku router - - at=info method=PUT path=\"/\" host=www.example.com request_id=XYZ fwd=\"1.2.3.4\" dyno=web.1 connect=0ms service=39ms status=200 bytes=1627\n",
    ];

    b.iter(|| {
        lines.iter().map(|line| {
            HerokuLogLineReader.read(line)
        }).collect::<Vec<_>>()
    })
}

#[bench]
fn bench_insert_and_aggregate(b: &mut Bencher) {
    use metrics_distributor::metrics::Metric::*;

    let metrics = vec![
        Count("a".to_owned(), 1),
        Count("a".to_owned(), 2),
        Count("a".to_owned(), 3),
        Measure("b".to_owned(), 0.1),
        Measure("b".to_owned(), 0.2),
        Measure("b".to_owned(), 0.3),
        Sample("c".to_owned(), 0.4),
        Sample("c".to_owned(), 0.5),
        Sample("c".to_owned(), 0.6),
    ];

    b.iter(|| {
        let mut store = BaseStore::new();

        store.record(metrics.clone());

        store.flush()
    })
}