2 use serde
::{Deserialize, Serialize}
;
4 use proxmox_router
::{Router, RpcEnvironment, Permission}
;
5 use proxmox_schema
::api
;
8 TrafficControlRule
, PRIV_SYS_AUDIT
,
11 use crate::TRAFFIC_CONTROL_CACHE
;
16 type: TrafficControlRule
,
20 #[derive(Serialize, Deserialize)]
21 #[serde(rename_all="kebab-case")]
22 /// Traffic control rule config with current rates
23 pub struct TrafficControlCurrentRate
{
25 config
: TrafficControlRule
,
26 /// Current ingress rate in bytes/second
28 /// Current egress rate in bytes/second
37 description
: "Show current traffic control rates.",
40 type: TrafficControlCurrentRate
,
44 permission
: &Permission
::Privilege(&[], PRIV_SYS_AUDIT
, false),
47 /// Show current traffic for all traffic control rules.
48 pub fn show_current_traffic(
49 mut rpcenv
: &mut dyn RpcEnvironment
,
50 ) -> Result
<Vec
<TrafficControlCurrentRate
>, Error
> {
52 let (config
, digest
) = pbs_config
::traffic_control
::config()?
;
54 let rules
: Vec
<TrafficControlRule
> = config
.convert_to_typed_array("rule")?
;
56 let cache
= TRAFFIC_CONTROL_CACHE
.lock().unwrap();
58 let mut list
= Vec
::new();
61 let (cur_rate_in
, cur_rate_out
) = match cache
.current_rate_map().get(&config
.name
) {
63 Some(state
) => (state
.rate_in
, state
.rate_out
),
65 list
.push(TrafficControlCurrentRate {config, cur_rate_in, cur_rate_out}
);
68 // also return the configuration digest
69 rpcenv
["digest"] = hex
::encode(&digest
).into();
74 pub const ROUTER
: Router
= Router
::new()
75 .get(&API_METHOD_SHOW_CURRENT_TRAFFIC
);