summaryrefslogtreecommitdiffstats
path: root/src/app
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2023-06-11 05:35:16 +0000
committerGitHub <noreply@github.com>2023-06-11 01:35:16 -0400
commit2a354f772f827ae81086af058b23fd9c31b61746 (patch)
tree08f711a3f33baed08211414d58412d7865919815 /src/app
parent2ba7394ac203988e56eaecc508bb5c75d93295d3 (diff)
other: remaining changes needed to get android to build (#1199)
* other: remaining changes needed to get android to build * update changelog * simplify disk os-specific code
Diffstat (limited to 'src/app')
-rw-r--r--src/app/data_harvester.rs17
-rw-r--r--src/app/data_harvester/disks.rs4
-rw-r--r--src/app/data_harvester/disks/freebsd.rs9
-rw-r--r--src/app/data_harvester/disks/other.rs53
-rw-r--r--src/app/data_harvester/disks/unix.rs8
-rw-r--r--src/app/data_harvester/disks/windows.rs19
6 files changed, 76 insertions, 34 deletions
diff --git a/src/app/data_harvester.rs b/src/app/data_harvester.rs
index 0ea6e3e9..17ca95e4 100644
--- a/src/app/data_harvester.rs
+++ b/src/app/data_harvester.rs
@@ -407,22 +407,7 @@ impl DataCollector {
#[inline]
fn update_disks(&mut self) {
if self.widgets_to_harvest.use_disk {
- #[cfg(any(target_os = "freebsd", target_os = "linux", target_os = "macos"))]
- {
- let disk_filter = &self.filters.disk_filter;
- let mount_filter = &self.filters.mount_filter;
- self.data.disks = disks::get_disk_usage(disk_filter, mount_filter).ok();
- }
-
- #[cfg(target_os = "windows")]
- {
- self.data.disks = Some(disks::get_disk_usage(
- &self.sys,
- &self.filters.disk_filter,
- &self.filters.mount_filter,
- ));
- }
-
+ self.data.disks = disks::get_disk_usage(self).ok();
self.data.io = disks::get_io_usage().ok();
}
}
diff --git a/src/app/data_harvester/disks.rs b/src/app/data_harvester/disks.rs
index 6f98d3f2..ddb07073 100644
--- a/src/app/data_harvester/disks.rs
+++ b/src/app/data_harvester/disks.rs
@@ -18,8 +18,10 @@ cfg_if! {
} else if #[cfg(target_os = "macos")] {
mod unix;
pub(crate) use self::unix::*;
+ } else {
+ mod other;
+ pub(crate) use self::other::*;
}
- // TODO: Add dummy impls here for other OSes?
}
#[derive(Debug, Clone, Default)]
diff --git a/src/app/data_harvester/disks/freebsd.rs b/src/app/data_harvester/disks/freebsd.rs
index 5755fc75..aa127ef6 100644
--- a/src/app/data_harvester/disks/freebsd.rs
+++ b/src/app/data_harvester/disks/freebsd.rs
@@ -5,7 +5,8 @@ use std::io;
use serde::Deserialize;
use super::{keep_disk_entry, DiskHarvest, IoHarvest};
-use crate::{app::Filter, data_harvester::deserialize_xo, utils::error};
+
+use crate::{app::data_harvester::DataCollector, data_harvester::deserialize_xo, utils::error};
#[derive(Deserialize, Debug, Default)]
#[serde(rename_all = "kebab-case")]
@@ -35,9 +36,9 @@ pub fn get_io_usage() -> error::Result<IoHarvest> {
Ok(io_harvest)
}
-pub fn get_disk_usage(
- disk_filter: &Option<Filter>, mount_filter: &Option<Filter>,
-) -> error::Result<Vec<DiskHarvest>> {
+pub fn get_disk_usage(collector: &DataCollector) -> error::Result<Vec<DiskHarvest>> {
+ let disk_filter = &collector.filters.disk_filter;
+ let mount_filter = &collector.filters.mount_filter;
let vec_disks: Vec<DiskHarvest> = get_disk_info().map(|storage_system_information| {
storage_system_information
.filesystem
diff --git a/src/app/data_harvester/disks/other.rs b/src/app/data_harvester/disks/other.rs
new file mode 100644
index 00000000..2cd1e2e3
--- /dev/null
+++ b/src/app/data_harvester/disks/other.rs
@@ -0,0 +1,53 @@
+//! Fallback disk info using sysinfo.
+
+use sysinfo::{DiskExt, System, SystemExt};
+
+use crate::app::data_harvester::DataCollector;
+
+use super::{keep_disk_entry, DiskHarvest};
+
+pub(crate) fn get_disk_usage(collector: &DataCollector) -> anyhow::Result<Vec<DiskHarvest>> {
+ let disks = collector.sys.disks();
+ let disk_filter = &collector.filters.disk_filter;
+ let mount_filter = &collector.filters.mount_filter;
+
+ Ok(disks
+ .iter()
+ .filter_map(|disk| {
+ let name = {
+ let name = disk.name();
+
+ if name.is_empty() {
+ "No Name".to_string()
+ } else {
+ name.to_os_string()
+ .into_string()
+ .unwrap_or_else(|_| "Name Unavailable".to_string())
+ }
+ };
+
+ let mount_point = disk
+ .mount_point()
+ .as_os_str()
+ .to_os_string()
+ .into_string()
+ .unwrap_or_else(|_| "Mount Unavailable".to_string());
+
+ if keep_disk_entry(&name, &mount_point, disk_filter, mount_filter) {
+ let free_space = disk.available_space();
+ let total_space = disk.total_space();
+ let used_space = total_space - free_space;
+
+ Some(DiskHarvest {
+ name,
+ mount_point,
+ free_space: Some(free_space),
+ used_space: Some(used_space),
+ total_space: Some(total_space),
+ })
+ } else {
+ None
+ }
+ })
+ .collect())
+}
diff --git a/src/app/data_harvester/disks/unix.rs b/src/app/data_harvester/disks/unix.rs
index 93668b7c..e8ebaeeb 100644
--- a/src/app/data_harvester/disks/unix.rs
+++ b/src/app/data_harvester/disks/unix.rs
@@ -25,12 +25,12 @@ cfg_if::cfg_if! {
}
use super::{keep_disk_entry, DiskHarvest};
-use crate::app::Filter;
+use crate::app::data_harvester::DataCollector;
/// Returns the disk usage of the mounted (and for now, physical) disks.
-pub fn get_disk_usage(
- disk_filter: &Option<Filter>, mount_filter: &Option<Filter>,
-) -> anyhow::Result<Vec<DiskHarvest>> {
+pub fn get_disk_usage(collector: &DataCollector) -> anyhow::Result<Vec<DiskHarvest>> {
+ let disk_filter = &collector.filters.disk_filter;
+ let mount_filter = &collector.filters.mount_filter;
let mut vec_disks: Vec<DiskHarvest> = Vec::new();
for partition in physical_partitions()? {
diff --git a/src/app/data_harvester/disks/windows.rs b/src/app/data_harvester/disks/windows.rs
index b5708494..2dfd59dc 100644
--- a/src/app/data_harvester/disks/windows.rs
+++ b/src/app/data_harvester/disks/windows.rs
@@ -1,11 +1,11 @@
//! Disk stats via sysinfo.
use itertools::Itertools;
-use sysinfo::{DiskExt, System, SystemExt};
+use sysinfo::{DiskExt, SystemExt};
use super::{keep_disk_entry, DiskHarvest};
-use crate::app::data_harvester::disks::IoCounters;
-use crate::app::filter::Filter;
+
+use crate::app::data_harvester::{disks::IoCounters, DataCollector};
mod bindings;
use bindings::*;
@@ -26,11 +26,12 @@ pub(crate) fn io_stats() -> anyhow::Result<Vec<anyhow::Result<IoCounters>>> {
.collect::<Vec<_>>())
}
-pub(crate) fn get_disk_usage(
- sys: &System, disk_filter: &Option<Filter>, mount_filter: &Option<Filter>,
-) -> Vec<DiskHarvest> {
- let disks = sys.disks();
- disks
+pub(crate) fn get_disk_usage(collector: &DataCollector) -> anyhow::Result<Vec<DiskHarvest>> {
+ let disks = collector.sys.disks();
+ let disk_filter = &collector.filters.disk_filter;
+ let mount_filter = &collector.filters.mount_filter;
+
+ Ok(disks
.iter()
.filter_map(|disk| {
let name = {
@@ -71,5 +72,5 @@ pub(crate) fn get_disk_usage(
None
}
})
- .collect()
+ .collect())
}