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:
		
				
					committed by
					
						 Thomas Lamprecht
						Thomas Lamprecht
					
				
			
			
				
	
			
			
			
						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, | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user