Add static CPU model and core count to CPU collector
All checks were successful
Build and Release / build-and-release (push) Successful in 1m47s

- Collect CPU model name and core count from /proc/cpuinfo
- Only collect once at startup (check if fields already set)
- Display below C-state row in dashboard CPU section
- Move CPU info collection from NixOS collector to CPU collector
This commit is contained in:
2025-12-01 19:15:57 +01:00
parent 5c3ac8b15e
commit 5bc250a738
6 changed files with 70 additions and 4 deletions

View File

@@ -119,6 +119,34 @@ impl CpuCollector {
utils::parse_u64(content.trim())
}
/// Collect static CPU information from /proc/cpuinfo (only once at startup)
async fn collect_cpu_info(&self, agent_data: &mut AgentData) -> Result<(), CollectorError> {
let content = utils::read_proc_file("/proc/cpuinfo")?;
let mut model_name: Option<String> = None;
let mut core_count: u32 = 0;
for line in content.lines() {
if line.starts_with("model name") {
if let Some(colon_pos) = line.find(':') {
let name = line[colon_pos + 1..].trim().to_string();
if model_name.is_none() {
model_name = Some(name);
}
}
} else if line.starts_with("processor") {
core_count += 1;
}
}
agent_data.system.cpu.model_name = model_name;
if core_count > 0 {
agent_data.system.cpu.core_count = Some(core_count);
}
Ok(())
}
/// Collect CPU C-state (idle depth) and populate AgentData with top 3 C-states by usage
async fn collect_cstate(&self, agent_data: &mut AgentData) -> Result<(), CollectorError> {
// Read C-state usage from first CPU (representative of overall system)
@@ -192,6 +220,11 @@ impl Collector for CpuCollector {
debug!("Collecting CPU metrics");
let start = std::time::Instant::now();
// Collect static CPU info (only once at startup)
if agent_data.system.cpu.model_name.is_none() || agent_data.system.cpu.core_count.is_none() {
self.collect_cpu_info(agent_data).await?;
}
// Collect load averages (always available)
self.collect_load_averages(agent_data).await?;