tof_control/cpu_control/
cpu_info.rs

1use sysinfo::{System, SystemExt, DiskExt, CpuExt, RefreshKind, CpuRefreshKind};
2// use std::{thread, time::Duration};
3
4use crate::helper::cpu_type::{CPUInfo, CPUInfoDebug};
5
6impl CPUInfo {
7    pub fn new() -> Self {
8        let cpu_info = Self::read_info();
9
10        cpu_info
11    }
12    pub fn read_info() -> CPUInfo {
13        let mut sys = System::new_all();
14
15        let uptime = Self::read_uptime(&mut sys);
16        let cpu_freq = Self::read_cpu_freq(&mut sys);
17        let disk_usage = Self::read_disk_usage(&mut sys);
18        let root_usage = disk_usage[0];
19        let tofdata_usage = disk_usage[1];
20
21        CPUInfo {
22            uptime,
23            cpu_freq,
24            root_usage,
25            tofdata_usage,
26        }
27    }
28    pub fn read_uptime(sys: &System) -> u32 {
29        let uptime = sys.uptime() as u32;
30
31        uptime
32    }
33    pub fn read_cpu_freq(sys: &System) -> [u32; 4] {
34        let mut cpu0_freq: u32 = Default::default();
35        let mut cpu1_freq: u32 = Default::default();
36        let mut cpu2_freq: u32 = Default::default();
37        let mut cpu3_freq: u32 = Default::default();
38        for cpu in sys.cpus() {
39            let cpu_name = cpu.name();
40            match cpu_name {
41                "cpu0" => {
42                    cpu0_freq = cpu.frequency() as u32;
43                }
44                "cpu1" => {
45                    cpu1_freq = cpu.frequency() as u32;
46                }
47                "cpu2" => {
48                    cpu2_freq = cpu.frequency() as u32;
49                }
50                "cpu3" => {
51                    cpu3_freq = cpu.frequency() as u32;
52                }
53                _ => {}
54            }
55        }
56
57        let cpu_freq = [cpu0_freq, cpu1_freq, cpu2_freq, cpu3_freq];
58
59        cpu_freq
60    }
61    pub fn read_ram_usage(sys: &System) {
62        let used_ram = sys.used_memory();
63        let total_ram = sys.total_memory();
64        let memory_usage = (used_ram as f32 / total_ram as f32) * 100.0;
65        println!("Used RAM: {}MB", used_ram/1000000);
66        println!("Total RAM: {}MB", total_ram/1000000);
67        println!("Memory Usage: {}%", memory_usage);
68    }
69    pub fn read_disk_usage(sys: &System) -> [u8; 2] {
70        let mut root_usage: u32 = Default::default();
71        let mut tofdata_usage: u32 = Default::default();
72        for disk in sys.disks() {
73            let mut usage = 1.0 - disk.available_space() as f32 / disk.total_space() as f32;
74            usage = usage * 100.0;
75            let mounted_point = disk.mount_point().as_os_str();
76            if mounted_point == "/" {
77                root_usage = usage as u32;
78            } else if mounted_point == "/tofdata" {
79                tofdata_usage = usage as u32;
80            } else if mounted_point == "/tpool/tofdata" {
81                tofdata_usage = usage as u32;
82            }
83        }
84
85        // println!("/ Usage: {:?}%", root_usage);
86        // println!("/tofdata Usage: {:?}%", tofdata_usage);
87
88        // let disk_usage: f32 = (1.0 - (available_space as f32 / total_space as f32)) * 100.0;
89        // println!("{}", disk_usage);
90        // disk_usage as u8
91        [root_usage as u8, tofdata_usage as u8]
92    }
93    
94}
95
96impl CPUInfoDebug {
97    pub fn new() -> Self {
98        let cpu_info = Self::read_info();
99
100        cpu_info
101    }
102    pub fn read_info() -> CPUInfoDebug {
103        let mut sys = System::new_all();
104
105        let uptime = Self::read_uptime(&mut sys);
106        let disk_usage = Self::read_disk_usage(&mut sys);
107        // Self::read_cpu_load(&mut sys);
108        // Self::read_cpu_load();
109        // sys.refresh_cpu();
110        let cpu_freq = Self::read_cpu_freq(&mut sys);
111
112        CPUInfoDebug {
113            uptime,
114            disk_usage,
115            cpu_freq,
116        }
117    }
118    pub fn read_uptime(sys: &System) -> u32 {
119        let uptime = sys.uptime() as u32;
120
121        uptime
122    }
123    // FIXME - hardcoded mountpoint for tofdata (data drive)
124    pub fn read_disk_usage(sys: &System) -> u8 {
125        let mut available_space = Default::default();
126        let mut total_space = Default::default();
127        for disk in sys.disks() {
128            if disk.mount_point().as_os_str() == "/tofdata" {
129                available_space = disk.available_space();
130                total_space = disk.total_space();
131            }
132        }
133
134        let disk_usage: f32 = (1.0 - (available_space as f32 / total_space as f32)) * 100.0;
135
136        disk_usage as u8
137    }
138    // pub fn read_cpu_load(sys: &mut System) {
139    pub fn read_cpu_load() {
140        // println!("{:?}", sys.cpus());
141        // println!("Load Average: {:?}", sys.load_average());
142        // let cpu0_load = sys.load_average();
143        let mut sys = System::new_with_specifics(RefreshKind::new().with_cpu(CpuRefreshKind::everything()));
144        // sys.refresh_cpu_specifics(CpuRefreshKind::everything());
145        // for cpu in sys.cpus() {
146        //     cpu.cpu_usage();
147        // }
148        let mut l = 0;
149        while l < 4 {
150            sys.refresh_cpu_specifics(CpuRefreshKind::everything());
151            for cpu in sys.cpus() {
152                println!("Usage: {:?}", cpu.cpu_usage());
153                println!("Frequency: {:?}", cpu.frequency());
154            }
155            l += 1;
156            // thread::sleep(Duration::from_millis(1000));
157        }
158        // sys.refresh_cpu_specifics(CpuRefreshKind::everything());
159        // for cpu in sys.cpus() {
160        //     println!("Usage: {:?}", cpu.cpu_usage());
161        //     println!("Frequency: {:?}", cpu.frequency());
162        // }
163    }
164    pub fn read_cpu_freq(sys: &System) -> [u32; 4] {
165        let mut cpu0_freq: u32 = Default::default();
166        let mut cpu1_freq: u32 = Default::default();
167        let mut cpu2_freq: u32 = Default::default();
168        let mut cpu3_freq: u32 = Default::default();
169        for cpu in sys.cpus() {
170            let cpu_name = cpu.name();
171            match cpu_name {
172                "cpu0" => {
173                    cpu0_freq = cpu.frequency() as u32;
174                }
175                "cpu1" => {
176                    cpu1_freq = cpu.frequency() as u32;
177                }
178                "cpu2" => {
179                    cpu2_freq = cpu.frequency() as u32;
180                }
181                "cpu3" => {
182                    cpu3_freq = cpu.frequency() as u32;
183                }
184                _ => {}
185            }
186        }
187
188        let cpu_freq = [cpu0_freq, cpu1_freq, cpu2_freq, cpu3_freq];
189
190        cpu_freq
191    }
192}