api2: add very basic 'status/usage' endpoint for nodes
For returning the nodes basic "usage status", for now one gets memory and CPU utilization. Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
6060a57578
commit
2337df7b3d
@ -8,12 +8,14 @@ mod dns;
|
||||
mod syslog;
|
||||
mod journal;
|
||||
mod services;
|
||||
mod status;
|
||||
|
||||
pub const SUBDIRS: SubdirMap = &[
|
||||
("dns", &dns::ROUTER),
|
||||
("journal", &journal::ROUTER),
|
||||
("network", &network::ROUTER),
|
||||
("services", &services::ROUTER),
|
||||
("status", &status::ROUTER),
|
||||
("syslog", &syslog::ROUTER),
|
||||
("tasks", &tasks::ROUTER),
|
||||
("time", &time::ROUTER),
|
||||
|
77
src/api2/node/status.rs
Normal file
77
src/api2/node/status.rs
Normal file
@ -0,0 +1,77 @@
|
||||
use failure::*;
|
||||
use serde_json::{json, Value};
|
||||
|
||||
use proxmox::sys::linux::procfs;
|
||||
|
||||
use proxmox::api::{api, ApiMethod, Router, RpcEnvironment, SubdirMap};
|
||||
use proxmox::api::list_subdirs_api_method;
|
||||
|
||||
use crate::api2::types::*;
|
||||
|
||||
#[api(
|
||||
input: {
|
||||
properties: {
|
||||
node: {
|
||||
schema: NODE_SCHEMA,
|
||||
},
|
||||
},
|
||||
},
|
||||
returns: {
|
||||
type: Object,
|
||||
description: "Returns node memory, CPU and (root) disk usage",
|
||||
properties: {
|
||||
memory: {
|
||||
type: Object,
|
||||
description: "node memory usage counters",
|
||||
properties: {
|
||||
total: {
|
||||
description: "total memory",
|
||||
type: Integer,
|
||||
},
|
||||
used: {
|
||||
description: "total memory",
|
||||
type: Integer,
|
||||
},
|
||||
free: {
|
||||
description: "free memory",
|
||||
type: Integer,
|
||||
},
|
||||
},
|
||||
},
|
||||
cpu: {
|
||||
type: Number,
|
||||
description: "Total CPU usage since last query.",
|
||||
optional: true,
|
||||
},
|
||||
}
|
||||
}
|
||||
)]
|
||||
/// Read node memory, CPU and (root) disk usage
|
||||
fn get_usage(
|
||||
_param: Value,
|
||||
_info: &ApiMethod,
|
||||
_rpcenv: &mut dyn RpcEnvironment,
|
||||
) -> Result<Value, Error> {
|
||||
|
||||
let meminfo: procfs::ProcFsMemInfo = procfs::read_meminfo()?;
|
||||
let kstat: procfs::ProcFsStat = procfs::read_proc_stat()?;
|
||||
|
||||
Ok(json!({
|
||||
"memory": {
|
||||
"total": meminfo.memtotal,
|
||||
"used": meminfo.memused,
|
||||
"free": meminfo.memfree,
|
||||
},
|
||||
"cpu": kstat.cpu,
|
||||
}))
|
||||
}
|
||||
|
||||
pub const USAGE_ROUTER: Router = Router::new()
|
||||
.get(&API_METHOD_GET_USAGE);
|
||||
|
||||
pub const SUBDIRS: SubdirMap = &[
|
||||
("usage", &USAGE_ROUTER),
|
||||
];
|
||||
pub const ROUTER: Router = Router::new()
|
||||
.get(&list_subdirs_api_method!(SUBDIRS))
|
||||
.subdirs(SUBDIRS);
|
Loading…
Reference in New Issue
Block a user