git_perf/
measurement_storage.rs

1use 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    // TODO(kaihowl) inefficient recopying
28    let mds = values
29        .iter()
30        .map(|v| MeasurementData {
31            // TODO(hoewelmk)
32            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    // TODO(kaihowl) configure path
49    // TODO(kaihowl) configure
50    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        // TODO(hoewelmk)
59        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}