use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MachineInfo {
#[serde(default)]
pub common: MachineCommon,
#[serde(default)]
pub hardware: MachineHardware,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MachineCommon {
#[serde(default)]
pub nas_name: String,
#[serde(default)]
pub model: String,
#[serde(default)]
pub model_series: String,
#[serde(default)]
pub product_series: String,
#[serde(default)]
pub serial: String,
#[serde(default)]
pub system_version: String,
#[serde(default)]
pub beta: bool,
#[serde(default)]
pub last_turn_on_time: String,
#[serde(default)]
pub run_time: i64,
#[serde(default)]
pub nas_owner: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MachineHardware {
#[serde(default)]
pub cpu: Vec<CpuInfo>,
#[serde(default)]
pub mem: Vec<MemInfo>,
#[serde(default)]
pub net: Vec<NetInfo>,
#[serde(default)]
pub gpu: Option<Vec<serde_json::Value>>,
#[serde(default)]
pub ups: Option<Vec<serde_json::Value>>,
#[serde(default)]
pub usb: Option<Vec<serde_json::Value>>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CpuInfo {
#[serde(default)]
pub model: String,
#[serde(default)]
pub core: i64,
#[serde(default)]
pub thread: i64,
#[serde(default)]
pub ghz: i64,
#[serde(default)]
pub temperature: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MemInfo {
#[serde(default)]
pub manufacturer: String,
#[serde(default)]
pub model: String,
#[serde(default)]
pub size: i64,
#[serde(default)]
pub mhz: String,
#[serde(default)]
pub is_ecc: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct NetInfo {
#[serde(default)]
pub model: String,
#[serde(default)]
pub ip: String,
#[serde(default)]
pub mac: String,
#[serde(default)]
pub mask: String,
#[serde(default)]
pub mtu: i64,
#[serde(default)]
pub speed: i64,
#[serde(default)]
pub duplex: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SystemStats {
#[serde(default)]
pub cpu: Vec<CpuStat>,
#[serde(default)]
pub mem: Vec<MemStat>,
#[serde(default)]
pub disk: Vec<IoStat>,
#[serde(default)]
pub volume: Vec<IoStat>,
#[serde(default)]
pub net: Vec<NetStat>,
#[serde(default)]
pub cpu_fan: Vec<FanStat>,
#[serde(default)]
pub device_fan: Vec<FanStat>,
#[serde(default)]
pub gpu: Vec<GpuStat>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CpuStat {
#[serde(default)]
pub used_percent: f64,
#[serde(default)]
pub temp: f64,
#[serde(default)]
pub time: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MemStat {
#[serde(default)]
pub used_percent: f64,
#[serde(default)]
pub time: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IoStat {
#[serde(default)]
pub read_rate: f64,
#[serde(default)]
pub write_rate: f64,
#[serde(default)]
pub used_percent: f64,
#[serde(default)]
pub time: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct NetStat {
#[serde(default)]
pub recv_rate: f64,
#[serde(default)]
pub send_rate: f64,
#[serde(default)]
pub time: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FanStat {
#[serde(default)]
pub speed: i64,
#[serde(default)]
pub status: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GpuStat {
#[serde(default)]
pub gpu_name: String,
#[serde(default)]
pub used_percent: f64,
#[serde(default)]
pub temp: f64,
#[serde(default)]
pub mem_used: i64,
#[serde(default)]
pub mem_free: i64,
#[serde(default)]
pub driver_version: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ProcessList {
#[serde(default)]
pub list: Vec<Process>,
#[serde(default)]
pub total_consume: Consumption,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Process {
#[serde(default)]
pub pid: i64,
#[serde(default)]
pub name: String,
#[serde(default)]
pub desc: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub process_status: String,
#[serde(default)]
pub can_be_operated: bool,
#[serde(default)]
pub consume: Consumption,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ServiceList {
#[serde(default)]
pub list: Vec<Service>,
#[serde(default)]
pub total_consume: Consumption,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Service {
#[serde(default)]
pub id: String,
#[serde(default)]
pub appid: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub can_be_operated: bool,
#[serde(default)]
pub consume: Consumption,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Consumption {
#[serde(default)]
pub cpu_used_percent: f64,
#[serde(default)]
pub mem_used: i64,
#[serde(default)]
pub mem_used_percent: f64,
#[serde(default)]
pub disk_read_speed: f64,
#[serde(default)]
pub disk_write_speed: f64,
#[serde(default)]
pub net_recv_speed: f64,
#[serde(default)]
pub net_send_speed: f64,
#[serde(default)]
pub gpu_used_percent: f64,
}