use crate::device::{ChassisInfo, CpuInfo, GpuInfo, MemoryInfo, ProcessInfo};
use std::collections::HashSet;
pub trait GpuReader: Send + Sync {
fn get_gpu_info(&self) -> Vec<GpuInfo>;
fn get_process_info(&self) -> Vec<ProcessInfo>;
fn get_gpu_processes(&self) -> (Vec<ProcessInfo>, HashSet<u32>) {
let processes = self.get_process_info();
let pids = processes
.iter()
.filter(|p| p.uses_gpu)
.map(|p| p.pid)
.collect();
let gpu_only = processes.into_iter().filter(|p| p.uses_gpu).collect();
(gpu_only, pids)
}
}
pub trait CpuReader: Send + Sync {
fn get_cpu_info(&self) -> Vec<CpuInfo>;
}
pub trait MemoryReader: Send + Sync {
fn get_memory_info(&self) -> Vec<MemoryInfo>;
}
pub trait ChassisReader: Send + Sync {
fn get_chassis_info(&self) -> Option<ChassisInfo>;
}