1pub enum Kind {
13 Overall,
15 SincePrevious,
17}
18
19#[derive(Debug, Clone)]
21pub struct IoStats {
22 pub transactions: u64,
24 pub reads: u64,
26 pub cache_reads: u64,
28 pub writes: u64,
30 pub bytes_read: u64,
32 pub cache_read_bytes: u64,
34 pub bytes_written: u64,
36 pub started: std::time::Instant,
38 pub span: std::time::Duration,
40}
41
42impl IoStats {
43 pub fn empty() -> Self {
45 Self {
46 transactions: 0,
47 reads: 0,
48 cache_reads: 0,
49 writes: 0,
50 bytes_read: 0,
51 cache_read_bytes: 0,
52 bytes_written: 0,
53 started: std::time::Instant::now(),
54 span: std::time::Duration::default(),
55 }
56 }
57
58 pub fn avg_batch_size(&self) -> f64 {
60 if self.writes == 0 {
61 return 0.0
62 }
63 self.transactions as f64 / self.writes as f64
64 }
65
66 pub fn reads_per_sec(&self) -> f64 {
68 if self.span.as_secs_f64() == 0.0 {
69 return 0.0
70 }
71
72 self.reads as f64 / self.span.as_secs_f64()
73 }
74
75 pub fn byte_reads_per_sec(&self) -> f64 {
76 if self.span.as_secs_f64() == 0.0 {
77 return 0.0
78 }
79
80 self.bytes_read as f64 / self.span.as_secs_f64()
81 }
82
83 pub fn writes_per_sec(&self) -> f64 {
85 if self.span.as_secs_f64() == 0.0 {
86 return 0.0
87 }
88
89 self.writes as f64 / self.span.as_secs_f64()
90 }
91
92 pub fn byte_writes_per_sec(&self) -> f64 {
93 if self.span.as_secs_f64() == 0.0 {
94 return 0.0
95 }
96
97 self.bytes_written as f64 / self.span.as_secs_f64()
98 }
99
100 pub fn ops_per_sec(&self) -> f64 {
102 if self.span.as_secs_f64() == 0.0 {
103 return 0.0
104 }
105
106 (self.writes as f64 + self.reads as f64) / self.span.as_secs_f64()
107 }
108
109 pub fn transactions_per_sec(&self) -> f64 {
111 if self.span.as_secs_f64() == 0.0 {
112 return 0.0
113 }
114
115 (self.transactions as f64) / self.span.as_secs_f64()
116 }
117
118 pub fn avg_transaction_size(&self) -> f64 {
119 if self.transactions == 0 {
120 return 0.0
121 }
122
123 self.bytes_written as f64 / self.transactions as f64
124 }
125
126 pub fn cache_hit_ratio(&self) -> f64 {
127 if self.reads == 0 {
128 return 0.0
129 }
130
131 self.cache_reads as f64 / self.reads as f64
132 }
133}