use crate::request_rate::{
api::Api,
duration_to_string::duration_to_string,
RequestRate
};
use std::time::Instant;
const LOG_THRESHOLD_MS: u128 = 10;
impl RequestRate {
pub async fn limit_apis(&self, apis: &[Api]) {
let limit_futures: Vec<_> = self
.rate_map
.iter()
.filter(|(key, _)| apis.contains(key))
.map(|(_, val)| val.limit())
.collect();
let start = Instant::now();
futures::future::join_all(limit_futures).await;
let duration = start.elapsed();
if duration.as_millis() > LOG_THRESHOLD_MS {
tracing::trace!(
wait_duration_ms = duration.as_millis(),
wait_duration = %duration_to_string(&duration),
"rate limiter throttled request"
);
}
}
}