win fixes

This commit is contained in:
Robin Appelman 2023-07-17 21:11:41 +02:00
commit 898737eea8
2 changed files with 24 additions and 16 deletions

View file

@ -60,14 +60,14 @@ pub fn get_metrics(sensors: &Sensors) -> Result<String> {
available: system.available_memory(), available: system.available_memory(),
free: system.free_memory(), free: system.free_memory(),
}; };
memory.write(&mut result, &hostname); memory.write(&mut result, hostname);
for disk in system.disks() { for disk in system.disks() {
let space = DiskUsage { let space = DiskUsage {
name: disk.name().to_string_lossy().into(), name: disk.name().to_string_lossy().into(),
size: disk.total_space(), size: disk.total_space(),
free: disk.available_space(), free: disk.available_space(),
}; };
space.write(&mut result, &hostname); space.write(&mut result, hostname);
} }
for (interface, net) in system.networks() { for (interface, net) in system.networks() {
let usage = NetStats { let usage = NetStats {
@ -75,17 +75,17 @@ pub fn get_metrics(sensors: &Sensors) -> Result<String> {
bytes_received: net.total_received(), bytes_received: net.total_received(),
bytes_sent: net.total_transmitted(), bytes_sent: net.total_transmitted(),
}; };
usage.write(&mut result, &hostname); usage.write(&mut result, hostname);
} }
let cpu = sensors.cpu.lock().unwrap().read()?; let cpu = sensors.cpu.lock().unwrap().read()?;
cpu.write(&mut result, &hostname); cpu.write(&mut result, hostname);
let gpu_mem_used = WMI.with(|wmi| wmi.gpu_mem())?; let gpu_mem_used = WMI.with(|wmi| wmi.gpu_mem())?;
let gpu_mem = GpuMemory { let gpu_mem = GpuMemory {
total: sensors.gpu_mem_total, total: sensors.gpu_mem_total,
free: sensors.gpu_mem_total - gpu_mem_used, free: sensors.gpu_mem_total - gpu_mem_used,
}; };
gpu_mem.write(&mut result, &hostname); gpu_mem.write(&mut result, hostname);
let gpu_engines = WMI.with(|wmi| wmi.gpu_usage())?; let gpu_engines = WMI.with(|wmi| wmi.gpu_usage())?;
for (name, usage) in gpu_engines.into_iter() { for (name, usage) in gpu_engines.into_iter() {
@ -93,14 +93,15 @@ pub fn get_metrics(sensors: &Sensors) -> Result<String> {
system: Cow::Owned(name), system: Cow::Owned(name),
usage, usage,
}; };
gpu_usage.write(&mut result, &hostname); gpu_usage.write(&mut result, hostname);
} }
if let Some(disk_usage) = WMI.with(|wmi| wmi.disk_usage())? { if let Some(disk_usage) = WMI.with(|wmi| wmi.disk_usage())? {
disk_usage.write(&mut result, &hostname); disk_usage.write(&mut result, hostname);
} }
let hwmon_data = WMI.with(|wmi| wmi.hwmon())?; let hwmon_data = WMI.with(|wmi| wmi.hwmon())?;
hwmon_data.temperature.write(&mut result, &hostname); hwmon_data.temperature.write(&mut result, hostname);
hwmon_data.power.write(&mut result, &hostname); hwmon_data.cpu_power.write(&mut result, hostname);
hwmon_data.gpu_power.write(&mut result, hostname);
Ok(result) Ok(result)
} }

View file

@ -1,4 +1,4 @@
use crate::data::{DiskStats, PowerUsage, Temperatures}; use crate::data::{CpuPowerUsage, DiskStats, GpuPowerUsage, Temperatures};
use crate::Result; use crate::Result;
use serde::Deserialize; use serde::Deserialize;
use std::collections::HashMap; use std::collections::HashMap;
@ -53,7 +53,7 @@ impl WmiSensor {
let mut data = HashMap::default(); let mut data = HashMap::default();
for result in results { for result in results {
if let Some(eng_type) = result.name.split("_engtype_").skip(1).next() { if let Some(eng_type) = result.name.split("_engtype_").nth(1) {
let entry = data.entry(eng_type.to_string()).or_default(); let entry = data.entry(eng_type.to_string()).or_default();
*entry += result.usage; *entry += result.usage;
} }
@ -105,7 +105,8 @@ impl WmiSensor {
}; };
Ok(HwMonData { Ok(HwMonData {
temperature, temperature,
power: power(), cpu_power: cpu_power(),
gpu_power: gpu_power(),
}) })
} }
} }
@ -121,7 +122,7 @@ struct Sensor {
} }
fn avg_sensors(sensors: &[Sensor], filter: impl Fn(&Sensor) -> bool) -> f32 { fn avg_sensors(sensors: &[Sensor], filter: impl Fn(&Sensor) -> bool) -> f32 {
let count = sensors.iter().filter(|sensor| filter(*sensor)).count(); let count = sensors.iter().filter(|sensor| filter(sensor)).count();
let total: f32 = sensors let total: f32 = sensors
.iter() .iter()
.filter_map(|sensor| filter(sensor).then_some(sensor.value)) .filter_map(|sensor| filter(sensor).then_some(sensor.value))
@ -131,7 +132,8 @@ fn avg_sensors(sensors: &[Sensor], filter: impl Fn(&Sensor) -> bool) -> f32 {
pub struct HwMonData { pub struct HwMonData {
pub temperature: Temperatures, pub temperature: Temperatures,
pub power: PowerUsage, pub cpu_power: CpuPowerUsage,
pub gpu_power: GpuPowerUsage,
} }
static CPU_POWER_UJ: AtomicU64 = AtomicU64::new(0); static CPU_POWER_UJ: AtomicU64 = AtomicU64::new(0);
@ -175,10 +177,15 @@ pub fn update_power() {
} }
} }
pub fn power() -> PowerUsage { pub fn cpu_power() -> CpuPowerUsage {
PowerUsage { CpuPowerUsage {
cpu_uj: CPU_POWER_UJ.load(Ordering::SeqCst), cpu_uj: CPU_POWER_UJ.load(Ordering::SeqCst),
cpu_packages_uj: Vec::default(), cpu_packages_uj: Vec::default(),
}
}
pub fn gpu_power() -> GpuPowerUsage {
GpuPowerUsage {
gpu_uj: GPU_POWER_UJ.load(Ordering::SeqCst), gpu_uj: GPU_POWER_UJ.load(Ordering::SeqCst),
} }
} }