use crate::device::{
ChassisInfo, CpuInfo, GpuInfo, MemoryInfo, MigGpuInfo, ProcessInfo, VgpuHostInfo,
};
use std::collections::HashSet;
pub trait GpuReader: Send + Sync {
fn get_gpu_info(&self) -> Vec<GpuInfo>;
fn get_process_info(&self) -> Vec<ProcessInfo>;
#[allow(dead_code)]
fn get_gpu_info_by_uuid(&self, uuid: &str) -> Option<GpuInfo> {
self.get_gpu_info().into_iter().find(|g| g.uuid == uuid)
}
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)
}
fn get_vgpu_info(&self) -> Vec<VgpuHostInfo> {
Vec::new()
}
fn get_mig_info(&self) -> Vec<MigGpuInfo> {
Vec::new()
}
}
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>;
}