@@ -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, |