diff options
Diffstat (limited to 'src/app/data_harvester/memory')
-rw-r--r-- | src/app/data_harvester/memory/heim.rs | 54 | ||||
-rw-r--r-- | src/app/data_harvester/memory/mod.rs | 10 |
2 files changed, 64 insertions, 0 deletions
diff --git a/src/app/data_harvester/memory/heim.rs b/src/app/data_harvester/memory/heim.rs new file mode 100644 index 00000000..5319b1b3 --- /dev/null +++ b/src/app/data_harvester/memory/heim.rs @@ -0,0 +1,54 @@ +//! Data collection for memory via heim. + +#[derive(Debug, Clone)] +pub struct MemHarvest { + pub mem_total_in_kib: u64, + pub mem_used_in_kib: u64, +} + +impl Default for MemHarvest { + fn default() -> Self { + MemHarvest { + mem_total_in_kib: 0, + mem_used_in_kib: 0, + } + } +} + +pub async fn get_mem_data( + actually_get: bool, +) -> ( + crate::utils::error::Result<Option<MemHarvest>>, + crate::utils::error::Result<Option<MemHarvest>>, +) { + use futures::join; + + if !actually_get { + (Ok(None), Ok(None)) + } else { + join!(get_ram_data(), get_swap_data()) + } +} + +pub async fn get_ram_data() -> crate::utils::error::Result<Option<MemHarvest>> { + let memory = heim::memory::memory().await?; + + let mem_total_in_kb = memory.total().get::<heim::units::information::kibibyte>(); + + Ok(Some(MemHarvest { + mem_total_in_kib: mem_total_in_kb, + mem_used_in_kib: mem_total_in_kb + - memory + .available() + .get::<heim::units::information::kibibyte>(), + })) +} + +pub async fn get_swap_data() -> crate::utils::error::Result<Option<MemHarvest>> { + let memory = heim::memory::swap().await?; + + Ok(Some(MemHarvest { + mem_total_in_kib: memory.total().get::<heim::units::information::kibibyte>(), + mem_used_in_kib: memory.used().get::<heim::units::information::kibibyte>(), + })) +} diff --git a/src/app/data_harvester/memory/mod.rs b/src/app/data_harvester/memory/mod.rs new file mode 100644 index 00000000..588a3c3b --- /dev/null +++ b/src/app/data_harvester/memory/mod.rs @@ -0,0 +1,10 @@ +//! Data collection for memory. +//! +//! For Linux, macOS, and Windows, this is handled by Heim. + +cfg_if::cfg_if! { + if #[cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))] { + pub mod heim; + pub use self::heim::*; + } +} |