From 67c8f9dec0dc9203c1f76b98b2a8d99237cbedde Mon Sep 17 00:00:00 2001 From: Herbert Wolverson Date: Wed, 8 Mar 2023 16:38:19 +0000 Subject: [PATCH] Worst 10 stats are no longer stored globally in lqos_node_manager. Instead, they are only calculated when requested. Slightly higher utilization with lots of people using the node manager, and no bus traffic during the 99% of the time when its idle. --- .../src/tracker/cache/lqosd_stats.rs | 5 ++--- .../src/tracker/cache_manager.rs | 4 ---- src/rust/lqos_node_manager/src/tracker/mod.rs | 18 +++++++++++++----- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/rust/lqos_node_manager/src/tracker/cache/lqosd_stats.rs b/src/rust/lqos_node_manager/src/tracker/cache/lqosd_stats.rs index 9f67a2a8..c0994f3b 100644 --- a/src/rust/lqos_node_manager/src/tracker/cache/lqosd_stats.rs +++ b/src/rust/lqos_node_manager/src/tracker/cache/lqosd_stats.rs @@ -1,12 +1,11 @@ -use lqos_bus::IpStats; use once_cell::sync::Lazy; use std::sync::RwLock; //pub static TOP_10_DOWNLOADERS: Lazy>> = // Lazy::new(|| RwLock::new(Vec::with_capacity(10))); -pub static WORST_10_RTT: Lazy>> = - Lazy::new(|| RwLock::new(Vec::with_capacity(10))); +//pub static WORST_10_RTT: Lazy>> = +// Lazy::new(|| RwLock::new(Vec::with_capacity(10))); pub static RTT_HISTOGRAM: Lazy>> = Lazy::new(|| RwLock::new(Vec::with_capacity(100))); diff --git a/src/rust/lqos_node_manager/src/tracker/cache_manager.rs b/src/rust/lqos_node_manager/src/tracker/cache_manager.rs index c7602259..14749131 100644 --- a/src/rust/lqos_node_manager/src/tracker/cache_manager.rs +++ b/src/rust/lqos_node_manager/src/tracker/cache_manager.rs @@ -129,16 +129,12 @@ fn watch_for_shaped_devices_changing() -> Result<()> { async fn get_data_from_server() -> Result<()> { // Send request to lqosd let requests = vec![ - BusRequest::GetWorstRtt { start: 0, end: 10 }, BusRequest::RttHistogram, BusRequest::AllUnknownIps, ]; for r in bus_request(requests).await?.iter() { match r { - BusResponse::WorstRtt(stats) => { - *WORST_10_RTT.write().unwrap() = stats.clone(); - } BusResponse::RttHistogram(stats) => { *RTT_HISTOGRAM.write().unwrap() = stats.clone(); } diff --git a/src/rust/lqos_node_manager/src/tracker/mod.rs b/src/rust/lqos_node_manager/src/tracker/mod.rs index 31cbc2bd..b9247c28 100644 --- a/src/rust/lqos_node_manager/src/tracker/mod.rs +++ b/src/rust/lqos_node_manager/src/tracker/mod.rs @@ -2,7 +2,7 @@ mod cache; mod cache_manager; use self::cache::{ CPU_USAGE, HOST_COUNTS, NUM_CPUS, RAM_USED, RTT_HISTOGRAM, - TOTAL_RAM, WORST_10_RTT, + TOTAL_RAM, }; use crate::{auth_guard::AuthGuard, cache_control::NoCache}; pub use cache::{SHAPED_DEVICES, UNKNOWN_DEVICES}; @@ -123,10 +123,18 @@ pub async fn top_10_downloaders(_auth: AuthGuard) -> NoCache Json> { - let tt: Vec = - WORST_10_RTT.read().unwrap().iter().map(|tt| tt.into()).collect(); - Json(tt) +pub async fn worst_10_rtt(_auth: AuthGuard) -> NoCache>> { + if let Ok(messages) = bus_request(vec![BusRequest::GetWorstRtt { start: 0, end: 10 }]).await + { + for msg in messages { + if let BusResponse::WorstRtt(stats) = msg { + let result = stats.iter().map(|tt| tt.into()).collect(); + return NoCache::new(Json(result)); + } + } + } + + NoCache::new(Json(Vec::new())) } #[get("/api/rtt_histogram")]