mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-08-16 08:50:55 +00:00
node: status: declutter kernel-version
Return a struct with all the components of the kernel version like it has been done in pve. Also return the legacy `kversion` to keep backwards compat. Signed-off-by: Gabriel Goller <g.goller@proxmox.com> Tested-by: Lukas Wagner <l.wagner@proxmox.com>
This commit is contained in:
parent
220f3c1cd9
commit
de99031e49
@ -1,3 +1,5 @@
|
||||
use std::ffi::OsStr;
|
||||
|
||||
use proxmox_schema::*;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@ -38,6 +40,40 @@ pub struct NodeInformation {
|
||||
pub fingerprint: String,
|
||||
}
|
||||
|
||||
#[api]
|
||||
#[derive(Serialize, Deserialize, Default)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
/// The current kernel version (output of `uname`)
|
||||
pub struct KernelVersionInformation {
|
||||
/// The systemname/nodename
|
||||
pub sysname: String,
|
||||
/// The kernel release number
|
||||
pub release: String,
|
||||
/// The kernel version
|
||||
pub version: String,
|
||||
/// The machine architecture
|
||||
pub machine: String,
|
||||
}
|
||||
|
||||
impl KernelVersionInformation {
|
||||
pub fn from_uname_parts(
|
||||
sysname: &OsStr,
|
||||
release: &OsStr,
|
||||
version: &OsStr,
|
||||
machine: &OsStr,
|
||||
) -> Self {
|
||||
KernelVersionInformation {
|
||||
sysname: sysname.to_str().map(String::from).unwrap_or_default(),
|
||||
release: release.to_str().map(String::from).unwrap_or_default(),
|
||||
version: version.to_str().map(String::from).unwrap_or_default(),
|
||||
machine: machine.to_str().map(String::from).unwrap_or_default(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_legacy(&self) -> String {
|
||||
format!("{} {} {}", self.sysname, self.release, self.version)
|
||||
}
|
||||
}
|
||||
|
||||
#[api]
|
||||
#[derive(Serialize, Deserialize, Copy, Clone)]
|
||||
@ -111,7 +147,9 @@ pub struct NodeStatus {
|
||||
pub uptime: u64,
|
||||
/// Load for 1, 5 and 15 minutes.
|
||||
pub loadavg: [f64; 3],
|
||||
/// The current kernel version.
|
||||
/// The current kernel version (NEW struct type).
|
||||
pub current_kernel: KernelVersionInformation,
|
||||
/// The current kernel version (LEGACY string type).
|
||||
pub kversion: String,
|
||||
/// Total CPU usage since last query.
|
||||
pub cpu: f64,
|
||||
|
@ -1,4 +1,3 @@
|
||||
use std::os::unix::ffi::OsStrExt;
|
||||
use std::process::Command;
|
||||
|
||||
use anyhow::{bail, format_err, Error};
|
||||
@ -11,8 +10,8 @@ use proxmox_router::{ApiMethod, Permission, Router, RpcEnvironment};
|
||||
use proxmox_schema::api;
|
||||
|
||||
use pbs_api_types::{
|
||||
BootModeInformation, NodePowerCommand, StorageStatus, NODE_SCHEMA, PRIV_SYS_AUDIT,
|
||||
PRIV_SYS_POWER_MANAGEMENT,
|
||||
BootModeInformation, KernelVersionInformation, NodePowerCommand, StorageStatus, NODE_SCHEMA,
|
||||
PRIV_SYS_AUDIT, PRIV_SYS_POWER_MANAGEMENT,
|
||||
};
|
||||
|
||||
use pbs_api_types::{
|
||||
@ -92,11 +91,11 @@ async fn get_status(
|
||||
let cpuinfo = procfs_to_node_cpu_info(cpuinfo);
|
||||
|
||||
let uname = nix::sys::utsname::uname()?;
|
||||
let kversion = format!(
|
||||
"{} {} {}",
|
||||
std::str::from_utf8(uname.sysname().as_bytes())?,
|
||||
std::str::from_utf8(uname.release().as_bytes())?,
|
||||
std::str::from_utf8(uname.version().as_bytes())?
|
||||
let kernel_version = KernelVersionInformation::from_uname_parts(
|
||||
uname.sysname(),
|
||||
uname.release(),
|
||||
uname.version(),
|
||||
uname.machine(),
|
||||
);
|
||||
|
||||
let disk = crate::tools::fs::fs_info_static(proxmox_lang::c_str!("/")).await?;
|
||||
@ -113,7 +112,8 @@ async fn get_status(
|
||||
},
|
||||
uptime: procfs::read_proc_uptime()?.0 as u64,
|
||||
loadavg,
|
||||
kversion,
|
||||
kversion: kernel_version.get_legacy(),
|
||||
current_kernel: kernel_version,
|
||||
cpuinfo,
|
||||
cpu,
|
||||
wait,
|
||||
|
Loading…
Reference in New Issue
Block a user