plushuang_metrics/
lib.rs

1
2use sysinfo::{Disks, System};
3
4
5/// 获取本机CPU核数
6/// 
7/// # Examples
8/// 
9/// ```
10/// use sysinfo::{Components, Disks, Networks, System};
11/// let mut sys: System = System::new_all();
12/// assert_eq!(plushuang_metrics::total_num_cpus(&mut sys), Ok(16));
13/// ```
14pub fn total_num_cpus(sys: &mut System) -> Result<usize, String> {
15    sys.refresh_cpu_all();
16    let cpus = sys.cpus();
17    if cpus.is_empty() {
18        Err("无法获取 CPU 信息,可能系统资源不足或数据未初始化".to_string())
19    } else {
20        Ok(cpus.len())
21    }
22}
23
24
25/// 获取本机可用核数
26/// 
27/// # Examples
28/// 
29/// ```
30/// use sysinfo::{Components, Disks, Networks, System};
31/// let mut sys: System = System::new_all();
32/// assert_eq!(plushuang_metrics::used_num_cpus(&mut sys), Ok(16));
33/// ```
34pub fn availabe_num_cpus(sys: &mut System) -> Result<usize, String> {
35    sys.refresh_cpu_all();
36    let cpus = sys.cpus();
37    if cpus.is_empty() {
38        return Err("无法获取 CPU 信息,可能系统资源不足或数据未初始化".to_string());
39    }
40
41    let allocatable_cpus = cpus
42            .iter()
43            .filter(|cpu| cpu.cpu_usage() <= 95.0) // CPU 使用率小于等于 95% 时可用
44        .count();
45
46    Ok(allocatable_cpus)
47}
48
49
50/// 获取本机内存总量,单位字节
51/// 
52/// # Examples
53/// 
54/// ```
55/// use sysinfo::{Components, Disks, Networks, System};
56/// let mut sys: System = System::new_all();
57/// assert_eq!(plushuang_metrics::total_memory(&mut sys), Ok(16));
58/// ```
59pub fn total_memory(sys: &mut System) -> Result<u64, String> {
60    sys.refresh_memory();
61    let total_memory = sys.total_memory();
62    if total_memory == 0 {
63        Err("无法获取总内存信息,可能系统资源不足或数据未初始化".to_string())
64    } else {
65        Ok(total_memory)
66    }
67}
68
69/// 获取本机内存可用量,单位字节
70/// 
71/// # Examples
72/// 
73/// ```
74/// use sysinfo::{Components, Disks, Networks, System};
75/// let mut sys: System = System::new_all();
76/// assert_eq!(plushuang_metrics::available_memory(&mut sys), Ok(7233028096));
77/// ```
78pub fn available_memory(sys: &mut System) -> Result<u64, String> {
79    sys.refresh_memory(); // 刷新内存数据
80    let available_memory = sys.available_memory(); // 获取可用内存
81
82    if available_memory == 0 {
83        Err("无法获取可用内存信息,可能系统资源不足或数据未初始化".to_string())
84    } else {
85        Ok(available_memory)
86    }
87}
88
89
90
91/// 获取本机磁盘总空间,单位字节
92/// 
93/// # Examples
94/// 
95/// ```
96/// use sysinfo::{Components, Disks, Networks, System};
97/// let mut sys: System = System::new_all();
98/// assert_eq!(plushuang_metrics::total_space(&mut sys), Ok(1254954610688));
99/// ```
100
101pub fn total_space(sys: &mut System) -> Result<u64, String> {
102    let disks: Disks = Disks::new_with_refreshed_list();
103
104    if disks.is_empty() {
105        return Err("无法获取磁盘信息,磁盘列表为空".to_string());
106    }
107
108    let total_space = disks.iter().map(|disk| disk.total_space()).sum();
109
110    Ok(total_space)
111}
112
113
114/// 获取本机磁盘可用总空间,单位字节
115/// 
116/// # Examples
117/// 
118/// ```
119/// use sysinfo::{Components, Disks, Networks, System};
120/// let mut sys: System = System::new_all();
121/// assert_eq!(plushuang_metrics::available_space(&mut sys), Ok(866847330304));
122/// ```
123pub fn available_space(sys: &mut System) -> Result<u64, String> {
124    let disks: Disks = Disks::new_with_refreshed_list();
125
126
127    if disks.is_empty() {
128        return Err("无法获取磁盘信息,磁盘列表为空".to_string());
129    }
130
131    let total_available_space: u64 = disks.iter().map(|disk| disk.available_space()).sum();
132
133    Ok(total_available_space)
134}