tr300-tui 1.4.3

Real-time interactive system diagnostic TUI
Documentation
use sysinfo::System;

#[derive(Debug, Clone, Default)]
pub struct CpuData {
    pub total_usage: f32,
    pub per_core_usage: Vec<f32>,
    pub per_core_frequency: Vec<u64>,
    pub cpu_model: String,
    pub core_count: usize,
    pub thread_count: usize,
}

pub fn collect(sys: &System) -> CpuData {
    let cpus = sys.cpus();
    let total_usage = sys.global_cpu_usage();

    let per_core_usage: Vec<f32> = cpus.iter().map(|c| c.cpu_usage()).collect();
    let per_core_frequency: Vec<u64> = cpus.iter().map(|c| c.frequency()).collect();

    let cpu_model = cpus
        .first()
        .map(|c| c.brand().to_string())
        .unwrap_or_default();

    CpuData {
        total_usage,
        per_core_usage,
        per_core_frequency,
        cpu_model,
        core_count: System::physical_core_count().unwrap_or(0),
        thread_count: cpus.len(),
    }
}