Skip to content

Commit edc9b3f

Browse files
aw-query: Add simple benchmarks
1 parent 39cccb3 commit edc9b3f

1 file changed

Lines changed: 114 additions & 0 deletions

File tree

aw-query/benches/benchmark.rs

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#![feature(test)]
2+
extern crate test;
3+
4+
extern crate aw_datastore;
5+
extern crate aw_models;
6+
extern crate aw_query;
7+
8+
// TODO: Move me to an appropriate place
9+
#[macro_export]
10+
macro_rules! json_map {
11+
{ $( $key:literal : $value:expr),* } => {{
12+
use serde_json::Value;
13+
use serde_json::map::Map;
14+
#[allow(unused_mut)]
15+
let mut map : Map<String, Value> = Map::new();
16+
$(
17+
map.insert( $key.to_string(), json!($value) );
18+
)*
19+
map
20+
}};
21+
}
22+
23+
#[cfg(test)]
24+
mod query_benchmarks {
25+
use test::Bencher;
26+
27+
use chrono::Duration;
28+
use serde_json::json;
29+
use serde_json::Map;
30+
use serde_json::Value;
31+
32+
use aw_datastore::Datastore;
33+
use aw_models::Bucket;
34+
use aw_models::BucketMetadata;
35+
use aw_models::Event;
36+
use aw_models::TimeInterval;
37+
38+
static TIME_INTERVAL: &str = "1980-01-01T00:00:00Z/2080-01-02T00:00:00Z";
39+
static BUCKET_ID: &str = "testid";
40+
41+
fn setup_datastore_empty() -> Datastore {
42+
return Datastore::new_in_memory(false);
43+
}
44+
45+
fn setup_datastore_with_bucket() -> Datastore {
46+
let ds = setup_datastore_empty();
47+
// Create bucket
48+
let bucket = Bucket {
49+
bid: None,
50+
id: BUCKET_ID.to_string(),
51+
_type: "testtype".to_string(),
52+
client: "testclient".to_string(),
53+
hostname: "testhost".to_string(),
54+
created: Some(chrono::Utc::now()),
55+
data: json_map! {},
56+
metadata: BucketMetadata::default(),
57+
events: None,
58+
last_updated: None,
59+
};
60+
ds.create_bucket(&bucket).unwrap();
61+
return ds;
62+
}
63+
64+
fn setup_datastore_populated() -> Datastore {
65+
let ds = setup_datastore_with_bucket();
66+
67+
let mut possible_data = Vec::<Map<String, Value>>::new();
68+
for i in 0..20 {
69+
possible_data.push(json_map! {"number": i});
70+
}
71+
//
72+
let mut event_list = Vec::new();
73+
for i in 0..3000 {
74+
let e = Event {
75+
id: None,
76+
timestamp: chrono::Utc::now() + Duration::seconds(i),
77+
duration: Duration::seconds(1),
78+
data: possible_data[i as usize % 20].clone(),
79+
};
80+
event_list.push(e);
81+
}
82+
ds.insert_events(&BUCKET_ID, &event_list).unwrap();
83+
84+
return ds;
85+
}
86+
87+
#[bench]
88+
fn bench_assign(b: &mut Bencher) {
89+
let ds = setup_datastore_empty();
90+
let interval = TimeInterval::new_from_string(TIME_INTERVAL).unwrap();
91+
b.iter(|| {
92+
let code = String::from("return a=1;");
93+
match aw_query::query(&code, &interval, &ds).unwrap() {
94+
aw_query::DataType::None() => (),
95+
ref data => panic!("Wrong datatype, {:?}", data),
96+
};
97+
});
98+
}
99+
100+
#[bench]
101+
fn bench_many_events(b: &mut Bencher) {
102+
let ds = setup_datastore_populated();
103+
let interval = TimeInterval::new_from_string(TIME_INTERVAL).unwrap();
104+
b.iter(|| {
105+
let code = String::from(
106+
"
107+
events = query_bucket(\"testid\");
108+
return events;
109+
",
110+
);
111+
aw_query::query(&code, &interval, &ds).unwrap();
112+
});
113+
}
114+
}

0 commit comments

Comments
 (0)