rsiot/executor/
check_capacity.rs1use tokio::sync::mpsc;
2use tracing::warn;
3
4pub trait CheckCapacity {
6 fn check_capacity(&self, threshold: f64, name: &str) -> &Self;
10}
11
12impl<T> CheckCapacity for mpsc::Receiver<T> {
13 fn check_capacity(&self, threshold: f64, name: &str) -> &Self {
14 let capacity = self.capacity();
15 let max_capacity = self.max_capacity();
16 check_capacity(threshold, name, capacity, max_capacity);
17 self
18 }
19}
20
21impl<T> CheckCapacity for mpsc::Sender<T> {
22 fn check_capacity(&self, threshold: f64, name: &str) -> &Self {
23 let capacity = self.capacity();
24 let max_capacity = self.max_capacity();
25 check_capacity(threshold, name, capacity, max_capacity);
26 self
27 }
28}
29
30fn check_capacity(threshold: f64, name: &str, capacity: usize, max_capacity: usize) {
31 let free_percent = (capacity as f64) / (max_capacity as f64);
32
33 let warning = free_percent < threshold;
34 if warning {
35 warn!(
36 "Channel capacity too low: {}; channel: {}",
37 free_percent, name
38 );
39 }
40}