git_perf/
measurement_storage.rs1use 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}