From a17a0e7a9f9a8d67f09ba29b9c785e40636f7811 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 6 Aug 2019 10:56:21 +0200 Subject: [PATCH] src/api2/admin/datastore.rs: extract backup size from index.json --- src/api2/admin/datastore.rs | 19 ++++++++++++++++--- src/bin/proxmox-backup-client.rs | 15 ++++++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs index b0c74419..2e929ac1 100644 --- a/src/api2/admin/datastore.rs +++ b/src/api2/admin/datastore.rs @@ -172,15 +172,28 @@ fn list_snapshots ( if let Some(backup_type) = backup_type { if backup_type != group.backup_type() { continue; } } - if let Some(backup_id) = backup_id { + if let Some(backup_id) = backup_id { if backup_id != group.backup_id() { continue; } } - snapshots.push(json!({ + + let mut result_item = json!({ "backup-type": group.backup_type(), "backup-id": group.backup_id(), "backup-time": info.backup_dir.backup_time().timestamp(), "files": info.files, - })); + }); + + if let Ok(index) = read_backup_index(&datastore, &info.backup_dir) { + let mut backup_size = 0; + for item in index.as_array().unwrap().iter() { + if let Some(item_size) = item["size"].as_u64() { + backup_size += item_size; + } + } + result_item["size"] = backup_size.into(); + } + + snapshots.push(result_item); } Ok(json!(snapshots)) diff --git a/src/bin/proxmox-backup-client.rs b/src/bin/proxmox-backup-client.rs index 907e6d7f..7ef1511d 100644 --- a/src/bin/proxmox-backup-client.rs +++ b/src/bin/proxmox-backup-client.rs @@ -335,14 +335,23 @@ fn list_snapshots( .map(|v| strip_server_file_expenstion(v.as_str().unwrap())).collect(); if output_format == "text" { - println!("{} | {}", path, tools::join(&files, ' ')); + let size_str = if let Some(size) = item["size"].as_u64() { + size.to_string() + } else { + String::from("-") + }; + println!("{} | {} | {}", path, size_str, tools::join(&files, ' ')); } else { - result.push(json!({ + let mut data = json!({ "backup-type": btype, "backup-id": id, "backup-time": epoch, "files": files, - })); + }); + if let Some(size) = item["size"].as_u64() { + data["size"] = size.into(); + } + result.push(data); } }