2 use serde_json
::{Value, json}
;
4 use proxmox
::api
::{api, Permission, Router}
;
7 NODE_SCHEMA
, RRDMode
, RRDTimeFrameResolution
, PRIV_SYS_AUDIT
,
10 use proxmox_rrd
::rrd
::RRD_DATA_ENTRIES
;
14 pub fn create_value_from_rrd(
17 timeframe
: RRDTimeFrameResolution
,
19 ) -> Result
<Value
, Error
> {
21 let mut result
= Vec
::new();
22 let now
= proxmox
::tools
::time
::epoch_f64();
25 let (start
, reso
, list
) = match RRD_CACHE
.extract_cached_data(basedir
, name
, now
, timeframe
, cf
) {
26 Some(result
) => result
,
31 for index
in 0..RRD_DATA_ENTRIES
{
32 if result
.len() <= index
{
33 if let Some(value
) = list
[index
] {
34 result
.push(json
!({ "time": t, *name: value }
));
36 result
.push(json
!({ "time": t }
));
38 } else if let Some(value
) = list
[index
] {
39 result
[index
][name
] = value
.into();
55 type: RRDTimeFrameResolution
,
63 permission
: &Permission
::Privilege(&["system", "status"], PRIV_SYS_AUDIT
, false),
68 timeframe
: RRDTimeFrameResolution
,
71 ) -> Result
<Value
, Error
> {
73 create_value_from_rrd(
77 "memtotal", "memused",
78 "swaptotal", "swapused",
82 "read_ios", "read_bytes",
83 "write_ios", "write_bytes",
91 pub const ROUTER
: Router
= Router
::new()
92 .get(&API_METHOD_GET_NODE_STATS
);