summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2022-01-05 10:11:29 +0000
committerLars Wirzenius <liw@liw.fi>2022-01-05 10:11:29 +0000
commitd438cc0b64edf207ad565eede5c0ed829131a27b (patch)
tree287fa286baf0a73b2d4edf8ec407f06c97256fd4
parent5fbd5a2ee98badc71867d2e7fce4d1429189267a (diff)
parentce590b36d53ab69f204350606433eeab47878f63 (diff)
downloadobnam-benchmark-d438cc0b64edf207ad565eede5c0ed829131a27b.tar.gz
Merge branch 'metadata' into 'main'
metadata Closes #13 See merge request obnam/obnam-benchmark!6
-rw-r--r--Cargo.lock65
-rw-r--r--Cargo.toml5
-rw-r--r--src/bin/obnam-benchmark.rs5
-rw-r--r--src/client.rs16
-rw-r--r--src/result.rs46
5 files changed, 129 insertions, 8 deletions
diff --git a/Cargo.lock b/Cargo.lock
index e98169b..f1c7535 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3,6 +3,12 @@
version = 3
[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
name = "aho-corasick"
version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -160,6 +166,15 @@ dependencies = [
]
[[package]]
+name = "crc32fast"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
name = "crossbeam-channel"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -288,6 +303,18 @@ dependencies = [
]
[[package]]
+name = "flate2"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f"
+dependencies = [
+ "cfg-if",
+ "crc32fast",
+ "libc",
+ "miniz_oxide",
+]
+
+[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -423,6 +450,12 @@ dependencies = [
]
[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
name = "humansize"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -562,10 +595,20 @@ dependencies = [
]
[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg",
+]
+
+[[package]]
name = "nix"
-version = "0.23.0"
+version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f305c2c2e4c39a82f7bf0bf65fb557f9070ce06781d4f2454295cc34b1c43188"
+checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
dependencies = [
"bitflags",
"cc",
@@ -614,12 +657,15 @@ name = "obnam-benchmark"
version = "0.1.0"
dependencies = [
"anyhow",
+ "chrono",
"fehler",
+ "git-testament",
"glob",
"lazy_static",
"log",
"nix",
"pretty_env_logger",
+ "procfs",
"rand",
"serde",
"serde_json",
@@ -827,6 +873,21 @@ dependencies = [
]
[[package]]
+name = "procfs"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0941606b9934e2d98a3677759a971756eb821f75764d0e0d26946d08e74d9104"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "chrono",
+ "flate2",
+ "hex",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
name = "pulldown-cmark"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index c5f7c9d..49616d5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,10 +8,13 @@ edition = "2018"
[dependencies]
anyhow = "1.0.51"
+chrono = "0.4.19"
+git-testament = "0.2.1"
lazy_static = "1.4.0"
log = "0.4.14"
-nix = "0.23.0"
+nix = "0.23.1"
pretty_env_logger = "0.4.0"
+procfs = "0.12.0"
rand = "0.8.4"
serde = { version = "1.0.101", features = ["derive"] }
serde_json = "1.0.72"
diff --git a/src/bin/obnam-benchmark.rs b/src/bin/obnam-benchmark.rs
index f079d75..5df2aeb 100644
--- a/src/bin/obnam-benchmark.rs
+++ b/src/bin/obnam-benchmark.rs
@@ -1,6 +1,6 @@
use log::{debug, error, info};
use obnam_benchmark::junk::junk;
-use obnam_benchmark::result::Result;
+use obnam_benchmark::result::SuiteMeasurements;
use obnam_benchmark::specification::Specification;
use obnam_benchmark::suite::Suite;
use std::fs::File;
@@ -71,7 +71,8 @@ impl Run {
info!("running benchmarks from {}", self.spec.display());
let spec = Specification::from_file(&self.spec)?;
let mut suite = Suite::new()?;
- let mut result = Result::default();
+ let obnam_version = obnam_benchmark::client::ObnamClient::version()?;
+ let mut result = SuiteMeasurements::new(obnam_version)?;
for step in spec.steps().iter() {
result.push(suite.execute(step)?);
}
diff --git a/src/client.rs b/src/client.rs
index fb25009..97b4c61 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -39,6 +39,22 @@ impl ObnamClient {
})
}
+ pub fn version() -> Result<String, ObnamClientError> {
+ let output = Command::new("obnam")
+ .arg("--version")
+ .output()
+ .map_err(ObnamClientError::Run)?;
+ if output.status.code() != Some(0) {
+ eprintln!("{}", String::from_utf8_lossy(&output.stdout));
+ eprintln!("{}", String::from_utf8_lossy(&output.stderr));
+ std::process::exit(1);
+ }
+
+ let v = String::from_utf8_lossy(&output.stdout);
+ let v = v.strip_suffix('\n').or(Some(&v)).unwrap().to_string();
+ Ok(v)
+ }
+
pub fn run(&self, args: &[&str]) -> Result<String, ObnamClientError> {
let output = Command::new("obnam")
.arg("--config")
diff --git a/src/result.rs b/src/result.rs
index 9e4119b..4a0277e 100644
--- a/src/result.rs
+++ b/src/result.rs
@@ -1,8 +1,18 @@
+use chrono::prelude::*;
+use git_testament::{git_testament, render_testament};
use serde::Serialize;
-#[derive(Debug, Default, Serialize)]
-pub struct Result {
+git_testament!(TESTAMENT);
+
+#[derive(Debug, Serialize)]
+pub struct SuiteMeasurements {
measurements: Vec<OpMeasurements>,
+ obnam_version: String,
+ obnam_benchmark_version: String,
+ benchmark_started: String,
+ hostname: String,
+ host_cpus: usize,
+ host_ram: u64,
}
#[derive(Debug, Serialize)]
@@ -33,7 +43,37 @@ pub enum Operation {
CompareManiests,
}
-impl Result {
+#[derive(Debug, thiserror::Error)]
+pub enum SuiteMeasurementsError {
+ #[error("failed to get CPU info: {0}")]
+ CpuInfo(procfs::ProcError),
+
+ #[error("failed to get RAM info: {0}")]
+ MemInfo(procfs::ProcError),
+
+ #[error("failed to get hostname: {0}")]
+ Hostname(nix::Error),
+}
+
+impl SuiteMeasurements {
+ pub fn new(obnam_version: String) -> Result<Self, SuiteMeasurementsError> {
+ let cpu = procfs::CpuInfo::new().map_err(SuiteMeasurementsError::CpuInfo)?;
+ let mem = procfs::Meminfo::new().map_err(SuiteMeasurementsError::MemInfo)?;
+ let mut buf = [0u8; 1024];
+ let hostname =
+ nix::unistd::gethostname(&mut buf).map_err(SuiteMeasurementsError::Hostname)?;
+ let hostname = hostname.to_string_lossy();
+ Ok(Self {
+ measurements: vec![],
+ obnam_version,
+ obnam_benchmark_version: render_testament!(TESTAMENT),
+ benchmark_started: Utc::now().to_string(),
+ hostname: hostname.to_string(),
+ host_ram: mem.mem_total,
+ host_cpus: cpu.num_cores(),
+ })
+ }
+
pub fn push(&mut self, m: OpMeasurements) {
self.measurements.push(m);
}