pub enum Kind {
Overall,
SincePrevious,
}
#[derive(Debug, Clone)]
pub struct IoStats {
pub transactions: u64,
pub reads: u64,
pub cache_reads: u64,
pub writes: u64,
pub bytes_read: u64,
pub cache_read_bytes: u64,
pub bytes_written: u64,
pub started: std::time::Instant,
pub span: std::time::Duration,
}
impl IoStats {
pub fn empty() -> Self {
Self {
transactions: 0,
reads: 0,
cache_reads: 0,
writes: 0,
bytes_read: 0,
cache_read_bytes: 0,
bytes_written: 0,
started: std::time::Instant::now(),
span: std::time::Duration::default(),
}
}
pub fn avg_batch_size(&self) -> f64 {
if self.writes == 0 {
return 0.0
}
self.transactions as f64 / self.writes as f64
}
pub fn reads_per_sec(&self) -> f64 {
if self.span.as_secs_f64() == 0.0 {
return 0.0
}
self.reads as f64 / self.span.as_secs_f64()
}
pub fn byte_reads_per_sec(&self) -> f64 {
if self.span.as_secs_f64() == 0.0 {
return 0.0
}
self.bytes_read as f64 / self.span.as_secs_f64()
}
pub fn writes_per_sec(&self) -> f64 {
if self.span.as_secs_f64() == 0.0 {
return 0.0
}
self.writes as f64 / self.span.as_secs_f64()
}
pub fn byte_writes_per_sec(&self) -> f64 {
if self.span.as_secs_f64() == 0.0 {
return 0.0
}
self.bytes_written as f64 / self.span.as_secs_f64()
}
pub fn ops_per_sec(&self) -> f64 {
if self.span.as_secs_f64() == 0.0 {
return 0.0
}
(self.writes as f64 + self.reads as f64) / self.span.as_secs_f64()
}
pub fn transactions_per_sec(&self) -> f64 {
if self.span.as_secs_f64() == 0.0 {
return 0.0
}
(self.transactions as f64) / self.span.as_secs_f64()
}
pub fn avg_transaction_size(&self) -> f64 {
if self.transactions == 0 {
return 0.0
}
self.bytes_written as f64 / self.transactions as f64
}
pub fn cache_hit_ratio(&self) -> f64 {
if self.reads == 0 {
return 0.0
}
self.cache_reads as f64 / self.reads as f64
}
}