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(),
free: system.free_memory(),
};
memory.write(&mut result, &hostname);
memory.write(&mut result, hostname);
for disk in system.disks() {
let space = DiskUsage {
name: disk.name().to_string_lossy().into(),
size: disk.total_space(),
free: disk.available_space(),
};
space.write(&mut result, &hostname);
space.write(&mut result, hostname);
}
for (interface, net) in system.networks() {
let usage = NetStats {
@ -75,17 +75,17 @@ pub fn get_metrics(sensors: &Sensors) -> Result<String> {
bytes_received: net.total_received(),
bytes_sent: net.total_transmitted(),
};
usage.write(&mut result, &hostname);
usage.write(&mut result, hostname);
}
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 = GpuMemory {
total: sensors.gpu_mem_total,
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())?;
for (name, usage) in gpu_engines.into_iter() {
@ -93,14 +93,15 @@ pub fn get_metrics(sensors: &Sensors) -> Result<String> {
system: Cow::Owned(name),
usage,
};
gpu_usage.write(&mut result, &hostname);
gpu_usage.write(&mut result, hostname);
}
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())?;
hwmon_data.temperature.write(&mut result, &hostname);
hwmon_data.power.write(&mut result, &hostname);
hwmon_data.temperature.write(&mut result, hostname);
hwmon_data.cpu_power.write(&mut result, hostname);
hwmon_data.gpu_power.write(&mut result, hostname);
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 serde::Deserialize;
use std::collections::HashMap;
@ -53,7 +53,7 @@ impl WmiSensor {
let mut data = HashMap::default();
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();
*entry += result.usage;
}
@ -105,7 +105,8 @@ impl WmiSensor {
};
Ok(HwMonData {
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 {
let count = sensors.iter().filter(|sensor| filter(*sensor)).count();
let count = sensors.iter().filter(|sensor| filter(sensor)).count();
let total: f32 = sensors
.iter()
.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 temperature: Temperatures,
pub power: PowerUsage,
pub cpu_power: CpuPowerUsage,
pub gpu_power: GpuPowerUsage,
}
static CPU_POWER_UJ: AtomicU64 = AtomicU64::new(0);
@ -175,10 +177,15 @@ pub fn update_power() {
}
}
pub fn power() -> PowerUsage {
PowerUsage {
pub fn cpu_power() -> CpuPowerUsage {
CpuPowerUsage {
cpu_uj: CPU_POWER_UJ.load(Ordering::SeqCst),
cpu_packages_uj: Vec::default(),
}
}
pub fn gpu_power() -> GpuPowerUsage {
GpuPowerUsage {
gpu_uj: GPU_POWER_UJ.load(Ordering::SeqCst),
}
}