use std::fs;
use tracing::debug;
pub fn has_sufficient_memory() -> bool {
#[cfg(target_os = "linux")]
{
if let Ok(meminfo) = fs::read_to_string("/proc/meminfo") {
let mut mem_available = 0;
let mut mem_total = 0;
for line in meminfo.lines() {
if line.starts_with("MemAvailable:") {
if let Some(kb_str) = line.split_whitespace().nth(1) {
mem_available = kb_str.parse::<usize>().unwrap_or(0);
}
} else if line.starts_with("MemTotal:") {
if let Some(kb_str) = line.split_whitespace().nth(1) {
mem_total = kb_str.parse::<usize>().unwrap_or(0);
}
}
}
let min_available = 100 * 1024; let min_percent = mem_total / 10; let required = min_available.max(min_percent);
let sufficient = mem_available > required;
debug!(
"Memory check: available={}MB, required={}MB, sufficient={}",
mem_available / 1024,
required / 1024,
sufficient
);
return sufficient;
}
}
true
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_memory_check() {
let _result = has_sufficient_memory();
}
}