tauri_plugin_system_info/utils/
sysinfo.rs1use crate::model::{Battery, Component, Cpu, Disk, Network, Process};
2use std::sync::Mutex;
3use sysinfo::{
4 Components, CpuRefreshKind, Disks, Networks, Pid, ProcessRefreshKind, RefreshKind, System,
5};
6
7pub fn get_sys() -> System {
8 System::new_all()
9}
10pub struct SysInfoState {
11 pub sysinfo: Mutex<SysInfo>,
12}
13pub struct SysInfo {
15 pub sys: System,
16}
17
18impl Default for SysInfoState {
19 fn default() -> SysInfoState {
20 SysInfoState {
21 sysinfo: Mutex::new(SysInfo {
22 sys: System::new_all(),
23 }),
24 }
25 }
26}
27
28impl SysInfo {
30 pub fn refresh_all(&mut self) {
32 self.sys.refresh_all();
33 }
34 pub fn refresh_memory(&mut self) {
35 self.sys.refresh_memory();
36 }
37 pub fn refresh_cpu(&mut self) {
38 self.sys.refresh_cpu();
39 }
40 pub fn refresh_processes(&mut self) {
41 self.sys.refresh_processes();
42 }
43 pub fn refresh_process(&mut self, pid: Pid) {
44 self.sys.refresh_process(pid);
45 }
46 pub fn refresh_specifics(&mut self, refreshes: RefreshKind) {
47 self.sys.refresh_specifics(refreshes);
48 }
49 pub fn refresh_cpu_specifics(&mut self, refresh_kind: CpuRefreshKind) {
50 self.sys.refresh_cpu_specifics(refresh_kind);
51 }
52 pub fn refresh_processes_specifics(&mut self, refresh_kind: ProcessRefreshKind) {
53 self.sys.refresh_processes_specifics(refresh_kind);
54 }
55 pub fn refresh_process_specifics(&mut self, pid: Pid, refresh_kind: ProcessRefreshKind) {
56 self.sys.refresh_process_specifics(pid, refresh_kind);
57 }
58
59 pub fn hostname(&self) -> Option<String> {
61 System::host_name()
62 }
63 pub fn kernel_version(&self) -> Option<String> {
64 System::kernel_version()
65 }
66 pub fn os_version(&self) -> Option<String> {
67 System::os_version()
68 }
69 pub fn name(&self) -> Option<String> {
70 System::name()
71 }
72
73 pub fn total_memory(&mut self) -> u64 {
75 self.refresh_memory();
76 self.sys.total_memory()
77 }
78 pub fn used_memory(&mut self) -> u64 {
79 self.refresh_memory();
80 self.sys.used_memory()
81 }
82 pub fn total_swap(&mut self) -> u64 {
83 self.refresh_memory();
84 self.sys.total_swap()
85 }
86 pub fn used_swap(&mut self) -> u64 {
87 self.refresh_memory();
88 self.sys.used_swap()
89 }
90
91 pub fn cpus(&self) -> Vec<Cpu> {
93 self.sys.cpus().iter().map(|cpu| cpu.into()).collect()
94 }
95
96 pub fn cpu_count(&self) -> usize {
97 self.sys.cpus().len()
98 }
99
100 pub fn disks(&mut self) -> Vec<Disk> {
102 let disks = Disks::new_with_refreshed_list();
103 disks.iter().map(|disk| disk.into()).collect()
104 }
105
106 pub fn networks(&self) -> Vec<Network> {
108 let networks = Networks::new_with_refreshed_list();
109 networks
110 .into_iter()
111 .map(|(name, data)| Network::new(name, data))
112 .collect()
113 }
114 pub fn components(&self) -> Vec<Component> {
115 let components = Components::new_with_refreshed_list();
116 components
117 .iter()
118 .map(|component| component.into())
119 .collect()
120 }
121 pub fn processes(&self) -> Vec<Process> {
122 self.sys
123 .processes()
124 .iter()
125 .map(|(_, process)| process.into())
126 .collect()
127 }
128 pub fn batteries(&self) -> Result<Vec<Battery>, starship_battery::Error> {
129 let manager = starship_battery::Manager::new()?;
130 Ok(manager
131 .batteries()?
132 .filter_map(|maybe_battery| match maybe_battery {
133 Ok(battery) => Some(battery.into()),
134 Err(_) => None,
135 })
136 .collect())
137 }
138}