pub struct RateLimiter { /* private fields */ }Expand description
Rate limiter with per-key token buckets.
Entries are forgotten once their bucket has refilled, which loses nothing:
a full bucket answers exactly as a new one would. That happens in
start_cleanup, and on demand when the table
reaches its cap. crate::vendored::ProxyService starts the cleanup task
when it begins serving; anything else that holds a RateLimiter for long
should start it too.
Implementations§
Source§impl RateLimiter
impl RateLimiter
Sourcepub fn new(defaults: RateLimitDefaults) -> Self
pub fn new(defaults: RateLimitDefaults) -> Self
Create a new rate limiter.
Sourcepub fn check(&self, key: RateLimitKey) -> bool
pub fn check(&self, key: RateLimitKey) -> bool
Check if a request should be allowed, against the configured defaults.
Returns true if the request is allowed, false if rate limited.
Sourcepub fn check_with_config(
&self,
scope: Uuid,
key: RateLimitKey,
rate_per_sec: f64,
burst: u32,
) -> bool
pub fn check_with_config( &self, scope: Uuid, key: RateLimitKey, rate_per_sec: f64, burst: u32, ) -> bool
Check against a limit of rate_per_sec tokens a second and a burst of
burst, in the bucket for key within scope.
scope keeps limits apart: pass the route’s identity, so that one
route’s traffic is not counted against another’s.
Sourcepub fn remaining(&self, key: &RateLimitKey) -> Option<u64>
pub fn remaining(&self, key: &RateLimitKey) -> Option<u64>
Get remaining tokens for a key under the defaults (approximate).
Sourcepub fn tracked_keys(&self) -> usize
pub fn tracked_keys(&self) -> usize
How many buckets are held.
Sourcepub async fn start_cleanup(self: Arc<Self>, cancel_token: CancellationToken)
pub async fn start_cleanup(self: Arc<Self>, cancel_token: CancellationToken)
Start background cleanup task.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for RateLimiter
impl !RefUnwindSafe for RateLimiter
impl Send for RateLimiter
impl Sync for RateLimiter
impl Unpin for RateLimiter
impl UnsafeUnpin for RateLimiter
impl UnwindSafe for RateLimiter
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more