mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-08-16 20:32:42 +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 proxmox_schema::*;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@ -38,6 +40,40 @@ pub struct NodeInformation {
|
|||||||
pub fingerprint: String,
|
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]
|
#[api]
|
||||||
#[derive(Serialize, Deserialize, Copy, Clone)]
|
#[derive(Serialize, Deserialize, Copy, Clone)]
|
||||||
@ -111,7 +147,9 @@ pub struct NodeStatus {
|
|||||||
pub uptime: u64,
|
pub uptime: u64,
|
||||||
/// Load for 1, 5 and 15 minutes.
|
/// Load for 1, 5 and 15 minutes.
|
||||||
pub loadavg: [f64; 3],
|
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,
|
pub kversion: String,
|
||||||
/// Total CPU usage since last query.
|
/// Total CPU usage since last query.
|
||||||
pub cpu: f64,
|
pub cpu: f64,
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
use std::os::unix::ffi::OsStrExt;
|
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
use anyhow::{bail, format_err, Error};
|
use anyhow::{bail, format_err, Error};
|
||||||
@ -11,8 +10,8 @@ use proxmox_router::{ApiMethod, Permission, Router, RpcEnvironment};
|
|||||||
use proxmox_schema::api;
|
use proxmox_schema::api;
|
||||||
|
|
||||||
use pbs_api_types::{
|
use pbs_api_types::{
|
||||||
BootModeInformation, NodePowerCommand, StorageStatus, NODE_SCHEMA, PRIV_SYS_AUDIT,
|
BootModeInformation, KernelVersionInformation, NodePowerCommand, StorageStatus, NODE_SCHEMA,
|
||||||
PRIV_SYS_POWER_MANAGEMENT,
|
PRIV_SYS_AUDIT, PRIV_SYS_POWER_MANAGEMENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
use pbs_api_types::{
|
use pbs_api_types::{
|
||||||
@ -92,11 +91,11 @@ async fn get_status(
|
|||||||
let cpuinfo = procfs_to_node_cpu_info(cpuinfo);
|
let cpuinfo = procfs_to_node_cpu_info(cpuinfo);
|
||||||
|
|
||||||
let uname = nix::sys::utsname::uname()?;
|
let uname = nix::sys::utsname::uname()?;
|
||||||
let kversion = format!(
|
let kernel_version = KernelVersionInformation::from_uname_parts(
|
||||||
"{} {} {}",
|
uname.sysname(),
|
||||||
std::str::from_utf8(uname.sysname().as_bytes())?,
|
uname.release(),
|
||||||
std::str::from_utf8(uname.release().as_bytes())?,
|
uname.version(),
|
||||||
std::str::from_utf8(uname.version().as_bytes())?
|
uname.machine(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let disk = crate::tools::fs::fs_info_static(proxmox_lang::c_str!("/")).await?;
|
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,
|
uptime: procfs::read_proc_uptime()?.0 as u64,
|
||||||
loadavg,
|
loadavg,
|
||||||
kversion,
|
kversion: kernel_version.get_legacy(),
|
||||||
|
current_kernel: kernel_version,
|
||||||
cpuinfo,
|
cpuinfo,
|
||||||
cpu,
|
cpu,
|
||||||
wait,
|
wait,
|
||||||
|
Loading…
Reference in New Issue
Block a user