add experimental rrd api to get cpu stats

This commit is contained in:
Dietmar Maurer 2020-05-23 11:10:02 +02:00
parent eaeda365e0
commit a2f862eed6
5 changed files with 68 additions and 15 deletions

View File

@ -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
View 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);

View File

@ -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,
}

View File

@ -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";

View File

@ -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)]