2 use serde_json
::{Value, json}
;
4 use proxmox
::api
::{api, Permission, Router}
;
6 use crate::api2
::types
::*;
7 use crate::config
::acl
::PRIV_SYS_AUDIT
;
8 use crate::rrd
::{extract_cached_data, RRD_DATA_ENTRIES}
;
10 pub fn create_value_from_rrd(
13 timeframe
: RRDTimeFrameResolution
,
15 ) -> Result
<Value
, Error
> {
17 let mut result
= Vec
::new();
18 let now
= proxmox
::tools
::time
::epoch_f64();
21 let (start
, reso
, list
) = match extract_cached_data(basedir
, name
, now
, timeframe
, cf
) {
22 Some(result
) => result
,
27 for index
in 0..RRD_DATA_ENTRIES
{
28 if result
.len() <= index
{
29 if let Some(value
) = list
[index
] {
30 result
.push(json
!({ "time": t, *name: value }
));
32 result
.push(json
!({ "time": t }
));
34 } else if let Some(value
) = list
[index
] {
35 result
[index
][name
] = value
.into();
51 type: RRDTimeFrameResolution
,
59 permission
: &Permission
::Privilege(&["system", "status"], PRIV_SYS_AUDIT
, false),
64 timeframe
: RRDTimeFrameResolution
,
67 ) -> Result
<Value
, Error
> {
69 create_value_from_rrd(
73 "memtotal", "memused",
74 "swaptotal", "swapused",
78 "read_ios", "read_bytes",
79 "write_ios", "write_bytes",
87 pub const ROUTER
: Router
= Router
::new()
88 .get(&API_METHOD_GET_NODE_STATS
);