aboutsummaryrefslogtreecommitdiff
path: root/src/mem.rs
diff options
context:
space:
mode:
authormustafa salih <mustafasalih1991@gmail.com>2020-12-21 13:29:45 +0300
committermustafa salih <mustafasalih1991@gmail.com>2020-12-21 13:29:45 +0300
commitf7b750580cab658b6f6f725608a15a8e75423a97 (patch)
tree10ec77645d9d35f05fe1ce164893e9a2e36edffd /src/mem.rs
init commit
Diffstat (limited to 'src/mem.rs')
-rw-r--r--src/mem.rs66
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;
+}