From f5783321e102ade9a60a8a95eac226f0e52d0f11 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 21 Apr 2022 18:27:17 +0300 Subject: feat: change "show-generation" output to JSON This is more friendly towards anyone wanting to use the output in a script. Sponsored-by: author --- src/cmd/show_gen.rs | 38 ++++++++++++++++++++++++++++++++++---- src/generation.rs | 3 ++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/cmd/show_gen.rs b/src/cmd/show_gen.rs index 970a165..6641d3c 100644 --- a/src/cmd/show_gen.rs +++ b/src/cmd/show_gen.rs @@ -5,7 +5,9 @@ use crate::client::BackupClient; use crate::config::ClientConfig; use crate::error::ObnamError; use crate::fsentry::FilesystemKind; +use crate::generation::GenId; use indicatif::HumanBytes; +use serde::Serialize; use structopt::StructOpt; use tempfile::NamedTempFile; use tokio::runtime::Runtime; @@ -51,11 +53,39 @@ impl ShowGeneration { }); let total_bytes = total_bytes?; - println!("generation-id: {}", gen_id); - println!("file-count: {}", gen.file_count()?); - println!("file-bytes: {}", HumanBytes(total_bytes)); - println!("file-bytes-raw: {}", total_bytes); + let output = Output::new(gen_id) + .file_count(gen.file_count()?) + .file_bytes(total_bytes); + serde_json::to_writer_pretty(std::io::stdout(), &output)?; Ok(()) } } + +#[derive(Debug, Default, Serialize)] +struct Output { + generation_id: String, + file_count: u64, + file_bytes: String, + file_bytes_raw: u64, +} + +impl Output { + fn new(gen_id: GenId) -> Self { + Self { + generation_id: format!("{}", gen_id), + ..Self::default() + } + } + + fn file_count(mut self, n: u64) -> Self { + self.file_count = n; + self + } + + fn file_bytes(mut self, n: u64) -> Self { + self.file_bytes_raw = n; + self.file_bytes = HumanBytes(n).to_string(); + self + } +} diff --git a/src/generation.rs b/src/generation.rs index 0a0fc77..180efbe 100644 --- a/src/generation.rs +++ b/src/generation.rs @@ -8,11 +8,12 @@ use crate::fsentry::FilesystemEntry; use crate::genmeta::{GenerationMeta, GenerationMetaError}; use crate::label::LabelChecksumKind; use crate::schema::{SchemaVersion, VersionComponent}; +use serde::Serialize; use std::fmt; use std::path::{Path, PathBuf}; /// An identifier for a generation. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize)] pub struct GenId { id: ChunkId, } -- cgit v1.2.1 From d2cc05cd7a0997c16687642d9a6814a506711e41 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 21 Apr 2022 18:32:48 +0300 Subject: feat: show-generation shows size of the generation's SQLite db Sponsored-by: author --- src/cmd/show_gen.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cmd/show_gen.rs b/src/cmd/show_gen.rs index 6641d3c..98c57fc 100644 --- a/src/cmd/show_gen.rs +++ b/src/cmd/show_gen.rs @@ -54,6 +54,7 @@ impl ShowGeneration { let total_bytes = total_bytes?; let output = Output::new(gen_id) + .db_bytes(temp.path().metadata()?.len()) .file_count(gen.file_count()?) .file_bytes(total_bytes); serde_json::to_writer_pretty(std::io::stdout(), &output)?; @@ -68,6 +69,8 @@ struct Output { file_count: u64, file_bytes: String, file_bytes_raw: u64, + db_bytes: String, + db_bytes_raw: u64, } impl Output { @@ -88,4 +91,10 @@ impl Output { self.file_bytes = HumanBytes(n).to_string(); self } + + fn db_bytes(mut self, n: u64) -> Self { + self.db_bytes_raw = n; + self.db_bytes = HumanBytes(n).to_string(); + self + } } -- cgit v1.2.1