api2/node/status: extend node status
to be more on par with pve Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
eb70464839
commit
398636b61c
@ -12,6 +12,16 @@ use crate::api2::types::*;
|
||||
use crate::config::acl::{PRIV_SYS_AUDIT, PRIV_SYS_POWER_MANAGEMENT};
|
||||
use crate::tools::cert::CertInfo;
|
||||
|
||||
impl std::convert::From<procfs::ProcFsCPUInfo> for NodeCpuInformation {
|
||||
fn from(info: procfs::ProcFsCPUInfo) -> Self {
|
||||
Self {
|
||||
model: info.model,
|
||||
sockets: info.sockets,
|
||||
cpus: info.cpus,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[api(
|
||||
input: {
|
||||
properties: {
|
||||
@ -40,13 +50,40 @@ fn get_status(
|
||||
free: meminfo.memfree,
|
||||
};
|
||||
|
||||
let swap = NodeSwapCounters {
|
||||
total: meminfo.swaptotal,
|
||||
used: meminfo.swapused,
|
||||
free: meminfo.swapfree,
|
||||
};
|
||||
|
||||
let kstat: procfs::ProcFsStat = procfs::read_proc_stat()?;
|
||||
let cpu = kstat.cpu;
|
||||
let wait = kstat.iowait_percent;
|
||||
|
||||
let loadavg = procfs::Loadavg::read()?;
|
||||
let loadavg = [loadavg.one(), loadavg.five(), loadavg.fifteen()];
|
||||
|
||||
let cpuinfo = procfs::read_cpuinfo()?;
|
||||
let cpuinfo = cpuinfo.into();
|
||||
|
||||
let uname = nix::sys::utsname::uname();
|
||||
let kversion = format!(
|
||||
"{} {} {}",
|
||||
uname.sysname(),
|
||||
uname.release(),
|
||||
uname.version()
|
||||
);
|
||||
|
||||
Ok(NodeStatus {
|
||||
memory,
|
||||
swap,
|
||||
root: crate::tools::disks::disk_usage(Path::new("/"))?,
|
||||
uptime: procfs::read_proc_uptime()?.0 as u64,
|
||||
loadavg,
|
||||
kversion,
|
||||
cpuinfo,
|
||||
cpu,
|
||||
wait,
|
||||
info: NodeInformation {
|
||||
fingerprint: CertInfo::new()?.fingerprint()?,
|
||||
},
|
||||
|
@ -1520,6 +1520,19 @@ pub struct NodeMemoryCounters {
|
||||
pub free: u64,
|
||||
}
|
||||
|
||||
#[api]
|
||||
#[derive(Serialize, Deserialize, Default)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
/// Node swap usage counters
|
||||
pub struct NodeSwapCounters {
|
||||
/// Total swap
|
||||
pub total: u64,
|
||||
/// Used swap
|
||||
pub used: u64,
|
||||
/// Free swap
|
||||
pub free: u64,
|
||||
}
|
||||
|
||||
#[api]
|
||||
#[derive(Serialize,Deserialize,Default)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
@ -1529,6 +1542,19 @@ pub struct NodeInformation {
|
||||
pub fingerprint: String,
|
||||
}
|
||||
|
||||
#[api]
|
||||
#[derive(Serialize, Deserialize, Default)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
/// Information about the CPU
|
||||
pub struct NodeCpuInformation {
|
||||
/// The CPU model
|
||||
pub model: String,
|
||||
/// The number of CPU sockets
|
||||
pub sockets: usize,
|
||||
/// The number of CPU cores (incl. threads)
|
||||
pub cpus: usize,
|
||||
}
|
||||
|
||||
#[api(
|
||||
properties: {
|
||||
memory: {
|
||||
@ -1537,6 +1563,19 @@ pub struct NodeInformation {
|
||||
root: {
|
||||
type: StorageStatus,
|
||||
},
|
||||
swap: {
|
||||
type: NodeSwapCounters,
|
||||
},
|
||||
loadavg: {
|
||||
type: Array,
|
||||
items: {
|
||||
type: Number,
|
||||
description: "the load",
|
||||
}
|
||||
},
|
||||
cpuinfo: {
|
||||
type: NodeCpuInformation,
|
||||
},
|
||||
info: {
|
||||
type: NodeInformation,
|
||||
}
|
||||
@ -1548,7 +1587,17 @@ pub struct NodeInformation {
|
||||
pub struct NodeStatus {
|
||||
pub memory: NodeMemoryCounters,
|
||||
pub root: StorageStatus,
|
||||
pub swap: NodeSwapCounters,
|
||||
/// The current uptime of the server.
|
||||
pub uptime: u64,
|
||||
/// Load for 1, 5 and 15 minutes.
|
||||
pub loadavg: [f64; 3],
|
||||
/// The current kernel version.
|
||||
pub kversion: String,
|
||||
/// Total CPU usage since last query.
|
||||
pub cpu: f64,
|
||||
/// Total IO wait since last query.
|
||||
pub wait: f64,
|
||||
pub cpuinfo: NodeCpuInformation,
|
||||
pub info: NodeInformation,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user