rsiot/executor/
check_capacity.rs

1use tokio::sync::mpsc;
2use tracing::warn;
3
4/// Проверка емкости канала
5pub trait CheckCapacity {
6    /// Проверить емкость канала и выдать предупреждение, если канал заполнен
7    ///
8    /// Возвращает true, если емкость меньше заданного уровня
9    fn check_capacity(&self, threshold: f64, name: &str) -> bool;
10}
11
12impl<T> CheckCapacity for mpsc::Receiver<T> {
13    fn check_capacity(&self, threshold: f64, name: &str) -> bool {
14        let capacity = self.capacity();
15        let max_capacity = self.max_capacity();
16        let free_percent = (capacity as f64) / (max_capacity as f64);
17
18        let warning = free_percent < threshold;
19        if warning {
20            warn!(
21                "Channel capacity too low: {}; channel: {}",
22                free_percent, name
23            );
24        }
25
26        warning
27    }
28}