add experimental rrd api to get cpu stats
This commit is contained in:
parent
eaeda365e0
commit
a2f862eed6
@ -9,11 +9,13 @@ mod syslog;
|
||||
mod journal;
|
||||
mod services;
|
||||
mod status;
|
||||
mod rrd;
|
||||
|
||||
pub const SUBDIRS: SubdirMap = &[
|
||||
("dns", &dns::ROUTER),
|
||||
("journal", &journal::ROUTER),
|
||||
("network", &network::ROUTER),
|
||||
("rrd", &rrd::ROUTER),
|
||||
("services", &services::ROUTER),
|
||||
("status", &status::ROUTER),
|
||||
("syslog", &syslog::ROUTER),
|
||||
|
34
src/api2/node/rrd.rs
Normal file
34
src/api2/node/rrd.rs
Normal file
@ -0,0 +1,34 @@
|
||||
use anyhow::Error;
|
||||
use serde_json::Value;
|
||||
|
||||
use proxmox::api::{api, Router};
|
||||
|
||||
use crate::api2::types::*;
|
||||
|
||||
#[api(
|
||||
input: {
|
||||
properties: {
|
||||
node: {
|
||||
schema: NODE_SCHEMA,
|
||||
},
|
||||
timeframe: {
|
||||
type: RRDTimeFrameResolution,
|
||||
},
|
||||
cf: {
|
||||
type: RRDMode,
|
||||
},
|
||||
},
|
||||
},
|
||||
)]
|
||||
/// Read CPU stats
|
||||
fn get_cpu_stats(
|
||||
timeframe: RRDTimeFrameResolution,
|
||||
cf: RRDMode,
|
||||
_param: Value,
|
||||
) -> Result<Value, Error> {
|
||||
|
||||
crate::rrd::extract_data("host/cpu", timeframe, cf)
|
||||
}
|
||||
|
||||
pub const ROUTER: Router = Router::new()
|
||||
.get(&API_METHOD_GET_CPU_STATS);
|
@ -878,3 +878,31 @@ fn test_proxmox_user_id_schema() -> Result<(), anyhow::Error> {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[api()]
|
||||
#[derive(Copy, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "UPPERCASE")]
|
||||
pub enum RRDMode {
|
||||
/// Maximum
|
||||
Max,
|
||||
/// Average
|
||||
Average,
|
||||
}
|
||||
|
||||
|
||||
#[api()]
|
||||
#[repr(u64)]
|
||||
#[derive(Copy, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum RRDTimeFrameResolution {
|
||||
/// 1 min => last 70 minutes
|
||||
Hour = 60,
|
||||
/// 30 min => last 35 hours
|
||||
Day = 60*30,
|
||||
/// 3 hours => about 8 days
|
||||
Week = 60*180,
|
||||
/// 12 hours => last 35 days
|
||||
Month = 60*720,
|
||||
/// 1 week => last 490 days
|
||||
Year = 60*10080,
|
||||
}
|
||||
|
@ -9,6 +9,8 @@ use serde_json::Value;
|
||||
|
||||
use proxmox::tools::fs::{create_path, CreateOptions};
|
||||
|
||||
use crate::api2::types::{RRDMode, RRDTimeFrameResolution};
|
||||
|
||||
use super::*;
|
||||
|
||||
const PBS_RRD_BASEDIR: &str = "/var/lib/proxmox-backup/rrdb";
|
||||
|
@ -4,23 +4,10 @@ use std::path::Path;
|
||||
use anyhow::{bail, Error};
|
||||
use serde_json::{json, Value};
|
||||
|
||||
use crate::api2::types::{RRDMode, RRDTimeFrameResolution};
|
||||
|
||||
const RRD_DATA_ENTRIES: usize = 70;
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
pub enum RRDMode {
|
||||
Max,
|
||||
Average,
|
||||
}
|
||||
|
||||
#[repr(u64)]
|
||||
#[derive(Copy, Clone)]
|
||||
pub enum RRDTimeFrameResolution {
|
||||
Hour = 60, // 1 min => last 70 minutes
|
||||
Day = 60*30, // 30 min => last 35 hours
|
||||
Week = 60*180, // 3 hours => about 8 days
|
||||
Month = 60*720, // 12 hours => last 35 days
|
||||
Year = 60*10080, // 1 week => last 490 days
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Default, Copy, Clone)]
|
||||
|
Loading…
Reference in New Issue
Block a user