use crate::accumulated_time::AccumulatedTime;
use log::info;
#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
pub enum Clock {
RunTime,
GenerationDownload,
GenerationUpload,
}
#[derive(Debug)]
pub struct Performance {
args: Vec<String>,
time: AccumulatedTime<Clock>,
live_files: u64,
files_backed_up: u64,
chunks_uploaded: u64,
chunks_reused: u64,
}
impl Default for Performance {
fn default() -> Self {
Self {
args: std::env::args().collect(),
time: AccumulatedTime::<Clock>::new(),
live_files: 0,
files_backed_up: 0,
chunks_reused: 0,
chunks_uploaded: 0,
}
}
}
impl Performance {
pub fn log(&self) {
info!("Performance measurements for this Obnam run");
for (i, arg) in self.args.iter().enumerate() {
info!("argv[{}]={:?}", i, arg);
}
info!("Live files found: {}", self.live_files);
info!("Files backed up: {}", self.files_backed_up);
info!("Chunks uploaded: {}", self.chunks_uploaded);
info!("Chunks reused: {}", self.chunks_reused);
info!(
"Downloading previous generation (seconds): {}",
self.time.secs(Clock::GenerationDownload)
);
info!(
"Uploading new generation (seconds): {}",
self.time.secs(Clock::GenerationUpload)
);
info!(
"Complete run time (seconds): {}",
self.time.secs(Clock::RunTime)
);
}
pub fn start(&mut self, clock: Clock) {
self.time.start(clock)
}
pub fn stop(&mut self, clock: Clock) {
self.time.stop(clock)
}
pub fn found_live_files(&mut self, n: u64) {
self.live_files += n;
}
pub fn back_up_file(&mut self) {
self.files_backed_up += 1;
}
pub fn reuse_chunk(&mut self) {
self.chunks_reused += 1;
}
pub fn upload_chunk(&mut self) {
self.chunks_uploaded += 1;
}
}