use crate::human::human_bytes_base_1k;
pub struct MemoryStats {
pub physical_memory_str: String,
pub physical_memory_bytes: i64,
}
pub fn parse_memory(line: String) -> MemoryStats {
let tokens: Vec<&str> = line.split(' ').collect();
let physical_raw: &str = tokens[4];
let tokens_for_ram: Vec<&str> = physical_raw.split('(').collect();
let total_ram_string = tokens_for_ram[0].trim_end_matches('k');
let total_ram_k = total_ram_string.parse::<i64>().unwrap();
let total_ram_bytes = total_ram_k * 1000;
let total_ram = human_bytes_base_1k(total_ram_bytes);
MemoryStats {
physical_memory_str: format!("Total System RAM: {total_ram}"),
physical_memory_bytes: total_ram_bytes,
}
}
pub fn parse_jdk_stats(line: String) -> String {
line
}
#[cfg(test)]
mod tests {
use super::parse_memory;
#[test]
fn test_parse_memory() {
let line =
"Memory: 4k page, physical 128000000k(127996468k free), swap 0k(0k free)".to_string();
let result = parse_memory(line);
assert_eq!(result.physical_memory_str, "Total System RAM: 128.00 gb");
assert_eq!(result.physical_memory_bytes, 128000000 * 1000)
}
}