@@ -1,8 +1,8 @@ |
| 1 | //! Daemon state management | 1 | //! Daemon state management |
| 2 | | 2 | |
| 3 | -use crate::collector::{CpuCollector, DiskCollector, History, MemoryCollector, NetworkCollector, ProcessCollector, TempCollector}; | 3 | +use crate::collector::{CpuCollector, DiskCollector, GpuCollector, 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, TempStats}; | 5 | +use gartop_ipc::{CpuStats, DiskStats, GpuStats, 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 | |
@@ -14,12 +14,14 @@ pub struct DaemonState { |
| 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 temp_collector: TempCollector, |
| | 17 | + pub gpu_collector: GpuCollector, |
| 17 | pub cpu_history: History<CpuStats>, | 18 | pub cpu_history: History<CpuStats>, |
| 18 | pub memory_history: History<MemoryStats>, | 19 | pub memory_history: History<MemoryStats>, |
| 19 | pub network_history: History<Vec<NetworkStats>>, | 20 | pub network_history: History<Vec<NetworkStats>>, |
| 20 | pub disk_history: History<Vec<DiskStats>>, | 21 | pub disk_history: History<Vec<DiskStats>>, |
| 21 | pub processes: Vec<ProcessInfo>, | 22 | pub processes: Vec<ProcessInfo>, |
| 22 | pub temp_stats: Option<TempStats>, | 23 | pub temp_stats: Option<TempStats>, |
| | 24 | + pub gpu_stats: Option<GpuStats>, |
| 23 | pub started: Instant, | 25 | pub started: Instant, |
| 24 | pub sample_interval_ms: u64, | 26 | pub sample_interval_ms: u64, |
| 25 | } | 27 | } |
@@ -34,12 +36,14 @@ impl DaemonState { |
| 34 | disk_collector: DiskCollector::new(), | 36 | disk_collector: DiskCollector::new(), |
| 35 | process_collector: ProcessCollector::new()?, | 37 | process_collector: ProcessCollector::new()?, |
| 36 | temp_collector: TempCollector::new()?, | 38 | temp_collector: TempCollector::new()?, |
| | 39 | + gpu_collector: GpuCollector::new()?, |
| 37 | cpu_history: History::new(history_size), | 40 | cpu_history: History::new(history_size), |
| 38 | memory_history: History::new(history_size), | 41 | memory_history: History::new(history_size), |
| 39 | network_history: History::new(history_size), | 42 | network_history: History::new(history_size), |
| 40 | disk_history: History::new(history_size), | 43 | disk_history: History::new(history_size), |
| 41 | processes: Vec::new(), | 44 | processes: Vec::new(), |
| 42 | temp_stats: None, | 45 | temp_stats: None, |
| | 46 | + gpu_stats: None, |
| 43 | started: Instant::now(), | 47 | started: Instant::now(), |
| 44 | sample_interval_ms, | 48 | sample_interval_ms, |
| 45 | }) | 49 | }) |
@@ -80,6 +84,13 @@ impl DaemonState { |
| 80 | Ok(stats) | 84 | Ok(stats) |
| 81 | } | 85 | } |
| 82 | | 86 | |
| | 87 | + /// Collect GPU stats (no history, just current values). |
| | 88 | + pub fn collect_gpu(&mut self) -> Result<GpuStats> { |
| | 89 | + let stats = self.gpu_collector.collect()?; |
| | 90 | + self.gpu_stats = Some(stats.clone()); |
| | 91 | + Ok(stats) |
| | 92 | + } |
| | 93 | + |
| 83 | /// Collect process list. | 94 | /// Collect process list. |
| 84 | pub fn collect_processes( | 95 | pub fn collect_processes( |
| 85 | &mut self, | 96 | &mut self, |