diff options
| author | mustafa salih <mustafasalih1991@gmail.com> | 2020-12-21 13:29:45 +0300 |
|---|---|---|
| committer | mustafa salih <mustafasalih1991@gmail.com> | 2020-12-21 13:29:45 +0300 |
| commit | f7b750580cab658b6f6f725608a15a8e75423a97 (patch) | |
| tree | 10ec77645d9d35f05fe1ce164893e9a2e36edffd /src/mem.rs | |
init commit
Diffstat (limited to 'src/mem.rs')
| -rw-r--r-- | src/mem.rs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/mem.rs b/src/mem.rs new file mode 100644 index 0000000..ac0f0ae --- /dev/null +++ b/src/mem.rs @@ -0,0 +1,66 @@ +use std::fs::File; +use std::io::Read; +//MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable +pub fn mem() -> Result<String, std::io::Error> { + let mut buf = String::new(); + + File::open("/proc/meminfo")?.read_to_string(&mut buf)?; + + let mut mem_total: u32 = 0; + let mut shmem: u32 = 0; + let mut mem_free: u32 = 0; + let mut mem_buffers: u32 = 0; + let mut mem_cached: u32 = 0; + let mut mem_srecl: u32 = 0; + + for line in buf.lines() { + if mem_total > 0 + && shmem > 0 + && mem_free > 0 + && mem_buffers > 0 + && mem_cached > 0 + && mem_srecl > 0 + { + break; + } + if line.starts_with("MemTotal") { + assign_val(line, &mut mem_total); + } + if line.starts_with("SReclaimable") { + assign_val(line, &mut mem_srecl) + } + if line.starts_with("Cached") { + assign_val(line, &mut mem_cached) + } + + if line.starts_with("Shmem") { + assign_val(line, &mut shmem); + } + + if line.starts_with("MemFree") { + assign_val(line, &mut mem_free); + } + if line.starts_with("Buffers") { + assign_val(line, &mut mem_buffers); + } + } + + let mem_used = (mem_total + shmem - mem_free - mem_buffers - mem_cached - mem_srecl) / 1024; + let result: String; + if mem_used > 1000 { + result = format!(" ▦ {:.1}G │", mem_used as f32 / 1000.0); + } else { + result = format!(" ▦ {}M │", mem_used); + } + Ok(result) +} + +fn assign_val(line: &str, assignable: &mut u32) { + let parsed: u32 = line.split(':').collect::<Vec<&str>>()[1] + .trim() + .split(' ') + .collect::<Vec<&str>>()[0] + .parse() + .unwrap(); + *assignable = parsed; +} |
