From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 754C7748D6 for ; Mon, 19 Apr 2021 13:02:10 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7213614FA5 for ; Mon, 19 Apr 2021 13:02:10 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 1A58714F52 for ; Mon, 19 Apr 2021 13:02:08 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id D622045AFE for ; Mon, 19 Apr 2021 13:02:07 +0200 (CEST) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Mon, 19 Apr 2021 13:02:03 +0200 Message-Id: <20210419110206.28498-4-d.csapak@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210419110206.28498-1-d.csapak@proxmox.com> References: <20210419110206.28498-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.158 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox-backup 3/6] api2/node/status: extend node status X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Apr 2021 11:02:10 -0000 to be more on par with pve Signed-off-by: Dominik Csapak --- src/api2/node/status.rs | 37 +++++++++++++++++++++++++++++++ src/api2/types/mod.rs | 49 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/src/api2/node/status.rs b/src/api2/node/status.rs index d5df05ff..a82c0c8a 100644 --- a/src/api2/node/status.rs +++ b/src/api2/node/status.rs @@ -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 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()?, }, diff --git a/src/api2/types/mod.rs b/src/api2/types/mod.rs index ac4957ac..aa161fee 100644 --- a/src/api2/types/mod.rs +++ b/src/api2/types/mod.rs @@ -1517,6 +1517,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")] @@ -1526,6 +1539,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: { @@ -1534,6 +1560,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, } @@ -1545,7 +1584,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, } -- 2.20.1