git_perf/
measurement_storage.rs1use anyhow::Result;
2use itertools::Itertools;
3use std::{
4 collections::HashMap,
5 time::{SystemTime, UNIX_EPOCH},
6};
7
8use crate::{
9 config,
10 data::MeasurementData,
11 git_interop::add_note_line_to_head,
12 serialization::{serialize_multiple, serialize_single},
13};
14
15pub fn add_multiple(
16 measurement: &str,
17 values: &[f64],
18 key_values: &[(String, String)],
19) -> Result<()> {
20 let timestamp = SystemTime::now()
21 .duration_since(UNIX_EPOCH)
22 .expect("TODO(kaihowl)");
23
24 let timestamp = timestamp.as_secs_f64();
25 let key_values: HashMap<_, _> = key_values.iter().cloned().collect();
26
27 let mds = values
29 .iter()
30 .map(|v| MeasurementData {
31 epoch: config::determine_epoch_from_config(measurement).unwrap_or(0),
33 name: measurement.to_owned(),
34 timestamp,
35 val: *v,
36 key_values: key_values.clone(),
37 })
38 .collect_vec();
39
40 let serialized = serialize_multiple(&mds);
41
42 add_note_line_to_head(&serialized)?;
43
44 Ok(())
45}
46
47pub fn add(measurement: &str, value: f64, key_values: &[(String, String)]) -> Result<()> {
48 let timestamp = SystemTime::now()
51 .duration_since(UNIX_EPOCH)
52 .expect("TODO(kaihowl)");
53
54 let timestamp = timestamp.as_secs_f64();
55 let key_values: HashMap<_, _> = key_values.iter().cloned().collect();
56
57 let md = MeasurementData {
58 epoch: config::determine_epoch_from_config(measurement).unwrap_or(0),
60 name: measurement.to_owned(),
61 timestamp,
62 val: value,
63 key_values,
64 };
65
66 let serialized = serialize_single(&md);
67
68 add_note_line_to_head(&serialized)?;
69
70 Ok(())
71}