]> git.proxmox.com Git - proxmox-backup.git/blob - pbs-datastore/src/chunk_stat.rs
gc: fix ignoring if `lost+found` can't be accessed
[proxmox-backup.git] / pbs-datastore / src / chunk_stat.rs
1 pub struct ChunkStat {
2 pub size: u64,
3 pub compressed_size: u64,
4 pub disk_size: u64,
5
6 pub chunk_count: usize,
7 pub duplicate_chunks: usize,
8
9 start_time: std::time::SystemTime,
10 }
11
12 impl ChunkStat {
13 pub fn new(size: u64) -> Self {
14 ChunkStat {
15 size,
16 compressed_size: 0,
17 disk_size: 0,
18
19 chunk_count: 0,
20 duplicate_chunks: 0,
21
22 start_time: std::time::SystemTime::now(),
23 }
24 }
25 }
26
27 impl std::fmt::Debug for ChunkStat {
28 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
29 let avg = ((self.size as f64) / (self.chunk_count as f64)) as usize;
30 let compression = (self.compressed_size * 100) / self.size;
31 let rate = (self.disk_size * 100) / self.size;
32
33 let elapsed = self.start_time.elapsed().unwrap();
34 let elapsed = (elapsed.as_secs() as f64) + (elapsed.subsec_millis() as f64) / 1000.0;
35
36 let write_speed = ((self.size as f64) / (1024.0 * 1024.0)) / elapsed;
37
38 write!(f, "Size: {}, average chunk size: {}, compression rate: {}%, disk_size: {} ({}%), speed: {:.2} MB/s",
39 self.size, avg, compression, self.disk_size, rate, write_speed)
40 }
41 }