summaryrefslogtreecommitdiffstats
path: root/src/app/data_harvester/memory
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/data_harvester/memory')
-rw-r--r--src/app/data_harvester/memory/heim.rs54
-rw-r--r--src/app/data_harvester/memory/mod.rs10
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::*;
+ }
+}