tof_control/cpu_control/
cpu_info.rs1use sysinfo::{System, SystemExt, DiskExt, CpuExt, RefreshKind, CpuRefreshKind};
2use 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 [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 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 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() {
140 let mut sys = System::new_with_specifics(RefreshKind::new().with_cpu(CpuRefreshKind::everything()));
144 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 }
158 }
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}