git_perf/
measurement_storage.rs

1use anyhow::{Context, Result};
2use itertools::Itertools;
3use std::{
4    collections::HashMap,
5    time::{SystemTime, UNIX_EPOCH},
6};
7
8use chrono::prelude::*;
9
10use crate::{
11    config,
12    data::MeasurementData,
13    git::git_interop::add_note_line_to_head,
14    serialization::{serialize_multiple, serialize_single, DELIMITER},
15};
16
17pub fn add_multiple(
18    measurement: &str,
19    values: &[f64],
20    key_values: &[(String, String)],
21) -> Result<()> {
22    let timestamp = SystemTime::now()
23        .duration_since(UNIX_EPOCH)
24        .context("Failed to get system time")?;
25
26    let timestamp = timestamp.as_secs_f64();
27    let key_values: HashMap<_, _> = key_values.iter().cloned().collect();
28    let epoch = config::determine_epoch_from_config(measurement).unwrap_or(0);
29    let name = measurement.to_owned();
30
31    let mds = values
32        .iter()
33        .map(|&val| MeasurementData {
34            epoch,
35            name: name.clone(),
36            timestamp,
37            val,
38            key_values: key_values.clone(),
39        })
40        .collect_vec();
41
42    let serialized = serialize_multiple(&mds);
43
44    add_note_line_to_head(&serialized)?;
45
46    Ok(())
47}
48
49pub fn add(measurement: &str, value: f64, key_values: &[(String, String)]) -> Result<()> {
50    let timestamp = SystemTime::now()
51        .duration_since(UNIX_EPOCH)
52        .context("Failed to get system time")?;
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),
59        name: measurement.to_owned(),
60        timestamp,
61        val: value,
62        key_values,
63    };
64
65    let serialized = serialize_single(&md, DELIMITER);
66
67    add_note_line_to_head(&serialized)?;
68
69    Ok(())
70}
71
72pub fn remove_measurements_from_commits(older_than: DateTime<Utc>, prune: bool) -> Result<()> {
73    crate::git::git_interop::remove_measurements_from_commits(older_than, prune)
74}