gardesk/gartop / d583678

Browse files

Add temperature collection to daemon

Authored by espadonne
SHA
d583678e970e9830c7c0f00b7cf740842fa7e324
Parents
9c4da63
Tree
541ec6c

2 changed files

StatusFile+-
M gartop/src/daemon/mod.rs 4 0
M gartop/src/daemon/state.rs 13 2
gartop/src/daemon/mod.rsmodified
@@ -137,6 +137,10 @@ async fn handle_client(
137
                     };
137
                     };
138
                     Response::ok_with_data(data)
138
                     Response::ok_with_data(data)
139
                 }
139
                 }
140
+                Command::GetTemperature => match s.collect_temperature() {
141
+                    Ok(stats) => Response::ok_with_data(stats),
142
+                    Err(e) => Response::err(e.to_string()),
143
+                }
140
                 Command::GetProcesses { sort_by, limit } => {
144
                 Command::GetProcesses { sort_by, limit } => {
141
                     match s.collect_processes(sort_by.unwrap_or_default(), limit) {
145
                     match s.collect_processes(sort_by.unwrap_or_default(), limit) {
142
                         Ok(procs) => Response::ok_with_data(procs),
146
                         Ok(procs) => Response::ok_with_data(procs),
gartop/src/daemon/state.rsmodified
@@ -1,8 +1,8 @@
1
 //! Daemon state management
1
 //! Daemon state management
2
 
2
 
3
-use crate::collector::{CpuCollector, DiskCollector, History, MemoryCollector, NetworkCollector, ProcessCollector};
3
+use crate::collector::{CpuCollector, DiskCollector, History, MemoryCollector, NetworkCollector, ProcessCollector, TempCollector};
4
 use crate::error::Result;
4
 use crate::error::Result;
5
-use gartop_ipc::{CpuStats, DiskStats, MemoryStats, NetworkStats, ProcessInfo, SortField};
5
+use gartop_ipc::{CpuStats, DiskStats, MemoryStats, NetworkStats, ProcessInfo, SortField, TempStats};
6
 use procfs::Current;
6
 use procfs::Current;
7
 use std::time::Instant;
7
 use std::time::Instant;
8
 
8
 
@@ -13,11 +13,13 @@ pub struct DaemonState {
13
     pub network_collector: NetworkCollector,
13
     pub network_collector: NetworkCollector,
14
     pub disk_collector: DiskCollector,
14
     pub disk_collector: DiskCollector,
15
     pub process_collector: ProcessCollector,
15
     pub process_collector: ProcessCollector,
16
+    pub temp_collector: TempCollector,
16
     pub cpu_history: History<CpuStats>,
17
     pub cpu_history: History<CpuStats>,
17
     pub memory_history: History<MemoryStats>,
18
     pub memory_history: History<MemoryStats>,
18
     pub network_history: History<Vec<NetworkStats>>,
19
     pub network_history: History<Vec<NetworkStats>>,
19
     pub disk_history: History<Vec<DiskStats>>,
20
     pub disk_history: History<Vec<DiskStats>>,
20
     pub processes: Vec<ProcessInfo>,
21
     pub processes: Vec<ProcessInfo>,
22
+    pub temp_stats: Option<TempStats>,
21
     pub started: Instant,
23
     pub started: Instant,
22
     pub sample_interval_ms: u64,
24
     pub sample_interval_ms: u64,
23
 }
25
 }
@@ -31,11 +33,13 @@ impl DaemonState {
31
             network_collector: NetworkCollector::new(),
33
             network_collector: NetworkCollector::new(),
32
             disk_collector: DiskCollector::new(),
34
             disk_collector: DiskCollector::new(),
33
             process_collector: ProcessCollector::new()?,
35
             process_collector: ProcessCollector::new()?,
36
+            temp_collector: TempCollector::new()?,
34
             cpu_history: History::new(history_size),
37
             cpu_history: History::new(history_size),
35
             memory_history: History::new(history_size),
38
             memory_history: History::new(history_size),
36
             network_history: History::new(history_size),
39
             network_history: History::new(history_size),
37
             disk_history: History::new(history_size),
40
             disk_history: History::new(history_size),
38
             processes: Vec::new(),
41
             processes: Vec::new(),
42
+            temp_stats: None,
39
             started: Instant::now(),
43
             started: Instant::now(),
40
             sample_interval_ms,
44
             sample_interval_ms,
41
         })
45
         })
@@ -69,6 +73,13 @@ impl DaemonState {
69
         Ok(stats)
73
         Ok(stats)
70
     }
74
     }
71
 
75
 
76
+    /// Collect temperature stats (no history, just current values).
77
+    pub fn collect_temperature(&mut self) -> Result<TempStats> {
78
+        let stats = self.temp_collector.collect()?;
79
+        self.temp_stats = Some(stats.clone());
80
+        Ok(stats)
81
+    }
82
+
72
     /// Collect process list.
83
     /// Collect process list.
73
     pub fn collect_processes(
84
     pub fn collect_processes(
74
         &mut self,
85
         &mut self,