fix: sort disk I/O by original rates instead of readable strings (#1833)

This commit is contained in:
Frederick Zhang 2025-10-10 18:07:34 +11:00 committed by GitHub
parent e1dc3f27e7
commit 256c5aba68
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 20 deletions

View File

@ -9,7 +9,6 @@ use crate::collection::batteries;
use crate::{ use crate::{
app::AppConfigFields, app::AppConfigFields,
collection::{Data, cpu, disks, memory::MemData, network}, collection::{Data, cpu, disks, memory::MemData, network},
dec_bytes_per_second_string,
utils::data_units::DataUnit, utils::data_units::DataUnit,
widgets::{DiskWidgetData, TempWidgetData}, widgets::{DiskWidgetData, TempWidgetData},
}; };
@ -246,21 +245,22 @@ impl StoredData {
} }
}; };
let (mut io_read, mut io_write) = ("N/A".into(), "N/A".into()); let (mut io_read_rate_bytes, mut io_write_rate_bytes) = (None, None);
if let Some(Some(io_device)) = io_device { if let Some(Some(io_device)) = io_device {
if let Some(prev_io) = self.prev_io.get_mut(itx) { if let Some(prev_io) = self.prev_io.get_mut(itx) {
let r_rate = ((io_device.read_bytes.saturating_sub(prev_io.0)) as f64 io_read_rate_bytes = Some(
/ time_since_last_harvest) ((io_device.read_bytes.saturating_sub(prev_io.0)) as f64
.round() as u64; / time_since_last_harvest)
.round() as u64,
);
let w_rate = ((io_device.write_bytes.saturating_sub(prev_io.1)) as f64 io_write_rate_bytes = Some(
/ time_since_last_harvest) ((io_device.write_bytes.saturating_sub(prev_io.1)) as f64
.round() as u64; / time_since_last_harvest)
.round() as u64,
);
*prev_io = (io_device.read_bytes, io_device.write_bytes); *prev_io = (io_device.read_bytes, io_device.write_bytes);
io_read = dec_bytes_per_second_string(r_rate).into();
io_write = dec_bytes_per_second_string(w_rate).into();
} }
} }
@ -276,8 +276,8 @@ impl StoredData {
used_bytes: device.used_space, used_bytes: device.used_space,
total_bytes: device.total_space, total_bytes: device.total_space,
summed_total_bytes, summed_total_bytes,
io_read, io_read_rate_bytes,
io_write, io_write_rate_bytes,
}); });
} }
} }

View File

@ -9,7 +9,10 @@ use crate::{
SortDataTable, SortDataTableProps, SortOrder, SortsRow, SortDataTable, SortDataTableProps, SortOrder, SortsRow,
}, },
options::config::style::Styles, options::config::style::Styles,
utils::{data_units::get_decimal_bytes, general::sort_partial_fn}, utils::{
conversion::dec_bytes_per_second_string, data_units::get_decimal_bytes,
general::sort_partial_fn,
},
}; };
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
@ -20,8 +23,8 @@ pub struct DiskWidgetData {
pub used_bytes: Option<u64>, pub used_bytes: Option<u64>,
pub total_bytes: Option<u64>, pub total_bytes: Option<u64>,
pub summed_total_bytes: Option<u64>, pub summed_total_bytes: Option<u64>,
pub io_read: Cow<'static, str>, pub io_read_rate_bytes: Option<u64>,
pub io_write: Cow<'static, str>, pub io_write_rate_bytes: Option<u64>,
} }
impl DiskWidgetData { impl DiskWidgetData {
@ -79,6 +82,18 @@ impl DiskWidgetData {
None None
} }
} }
fn io_read(&self) -> Cow<'static, str> {
self.io_read_rate_bytes.map_or("N/A".into(), |r_rate| {
dec_bytes_per_second_string(r_rate).into()
})
}
fn io_write(&self) -> Cow<'static, str> {
self.io_write_rate_bytes.map_or("N/A".into(), |w_rate| {
dec_bytes_per_second_string(w_rate).into()
})
}
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -177,8 +192,8 @@ impl DataToCell<DiskColumn> for DiskWidgetData {
DiskColumn::UsedPercent => percent_string(self.used_percent()), DiskColumn::UsedPercent => percent_string(self.used_percent()),
DiskColumn::FreePercent => percent_string(self.free_percent()), DiskColumn::FreePercent => percent_string(self.free_percent()),
DiskColumn::Total => self.total_space(), DiskColumn::Total => self.total_space(),
DiskColumn::IoRead => self.io_read.clone(), DiskColumn::IoRead => self.io_read(),
DiskColumn::IoWrite => self.io_write.clone(), DiskColumn::IoWrite => self.io_write(),
}; };
Some(text) Some(text)
@ -235,10 +250,14 @@ impl SortsRow for DiskColumn {
data.sort_by(|a, b| sort_partial_fn(descending)(&a.total_bytes, &b.total_bytes)); data.sort_by(|a, b| sort_partial_fn(descending)(&a.total_bytes, &b.total_bytes));
} }
DiskColumn::IoRead => { DiskColumn::IoRead => {
data.sort_by(|a, b| sort_partial_fn(descending)(&a.io_read, &b.io_read)); data.sort_by(|a, b| {
sort_partial_fn(descending)(&a.io_read_rate_bytes, &b.io_read_rate_bytes)
});
} }
DiskColumn::IoWrite => { DiskColumn::IoWrite => {
data.sort_by(|a, b| sort_partial_fn(descending)(&a.io_write, &b.io_write)); data.sort_by(|a, b| {
sort_partial_fn(descending)(&a.io_write_rate_bytes, &b.io_write_rate_bytes)
});
} }
} }
} }