summaryrefslogtreecommitdiff
path: root/src/client.rs
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2020-12-30 13:33:57 +0200
committerLars Wirzenius <liw@liw.fi>2020-12-30 13:56:20 +0200
commitc492bc19aaf404ab4115b8d7f06eff81a6480b4e (patch)
tree99bb10c1cfc99bded3b7187f18541c9e7c676ead /src/client.rs
parent48639d00710cf945cff7298cf927efc7275364e2 (diff)
downloadobnam2-c492bc19aaf404ab4115b8d7f06eff81a6480b4e.tar.gz
feat! store and show timestamp for each backup generation
This changes the output format of "obnam list".
Diffstat (limited to 'src/client.rs')
-rw-r--r--src/client.rs17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/client.rs b/src/client.rs
index 3149ec5..adca373 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -5,6 +5,8 @@ use crate::chunker::Chunker;
use crate::chunkid::ChunkId;
use crate::chunkmeta::ChunkMeta;
use crate::fsentry::{FilesystemEntry, FilesystemKind};
+use crate::generation::FinishedGeneration;
+use chrono::{DateTime, Local};
use log::{debug, error, info, trace};
use reqwest::blocking::Client;
use serde::Deserialize;
@@ -73,7 +75,7 @@ impl BackupClient {
let ids = self.read_file(filename.to_path_buf(), size)?;
let gen = GenerationChunk::new(ids);
let data = gen.to_data_chunk()?;
- let meta = ChunkMeta::new_generation(&sha256(data.data()), "timestamp");
+ let meta = ChunkMeta::new_generation(&sha256(data.data()), &current_timestamp());
let gen_id = self.upload_gen_chunk(meta, gen)?;
Ok(gen_id)
}
@@ -179,7 +181,7 @@ impl BackupClient {
Ok(chunk_ids)
}
- pub fn list_generations(&self) -> anyhow::Result<Vec<ChunkId>> {
+ pub fn list_generations(&self) -> anyhow::Result<Vec<FinishedGeneration>> {
let url = format!("{}?generation=true", &self.chunks_url());
trace!("list_generations: url={:?}", url);
let req = self.client.get(&url).build()?;
@@ -189,7 +191,11 @@ impl BackupClient {
debug!("list_generationgs: body={:?}", body);
let map: HashMap<String, ChunkMeta> = serde_yaml::from_slice(&body)?;
debug!("list_generations: map={:?}", map);
- Ok(map.keys().into_iter().map(|key| key.into()).collect())
+ let finished = map
+ .iter()
+ .map(|(id, meta)| FinishedGeneration::new(id, meta.ended().map_or("", |s| s)))
+ .collect();
+ Ok(finished)
}
pub fn fetch_chunk(&self, chunk_id: &ChunkId) -> anyhow::Result<DataChunk> {
@@ -222,3 +228,8 @@ impl BackupClient {
Ok(gen)
}
}
+
+fn current_timestamp() -> String {
+ let now: DateTime<Local> = Local::now();
+ format!("{}", now.format("%Y-%m-%d %H:%M:%S %z"))
+}