rin_sys/
ram.rs

1use std::fs;
2
3fn parse_str(sl: &str, prefix: &str) -> usize {
4    sl.strip_prefix(prefix)
5        .unwrap()
6        .strip_suffix("kB")
7        .unwrap()
8        .trim()
9        .parse::<usize>()
10        .unwrap()
11}
12
13#[derive(Default, Debug)]
14pub struct RamInfo {
15    pub mem_used: usize,
16    pub mem_free: usize,
17    pub mem_total: usize,
18    pub percent_free: f32,
19    pub percent_used: f32,
20}
21
22impl RamInfo {
23    fn fetch(&mut self) {
24        let rawdata = fs::read_to_string("/proc/meminfo").expect("error reading /proc/meminfo");
25
26        let mut data = rawdata.lines();
27
28        let memtotal = parse_str(data.nth(0).unwrap(), "MemTotal:");
29        let memfree = parse_str(data.nth(0).unwrap(), "MemFree:");
30
31        self.mem_free = memfree;
32        self.mem_total = memtotal;
33        self.mem_used = memtotal - memfree;
34
35        self.percent_used = (self.mem_used as f32 / self.mem_total as f32) * 100.;
36        self.percent_free = 100. - self.percent_used;
37    }
38
39    pub fn new() -> Self {
40        let mut r = RamInfo::default();
41        r.fetch();
42
43        r
44    }
45}