pub struct DMSCRateLimiter { /* private fields */ }Expand description
Token bucket based rate limiter implementation.
This struct implements the token bucket algorithm for rate limiting, allowing for both steady-state rate limiting and temporary bursts of requests.
Implementations§
Source§impl DMSCRateLimiter
impl DMSCRateLimiter
Sourcepub fn new(config: DMSCRateLimitConfig) -> Self
pub fn new(config: DMSCRateLimitConfig) -> Self
Sourcepub async fn check_request(&self, request: &DMSCGatewayRequest) -> bool
pub async fn check_request(&self, request: &DMSCGatewayRequest) -> bool
Sourcepub fn check_rate_limit(&self, key: &str, tokens: usize) -> bool
pub fn check_rate_limit(&self, key: &str, tokens: usize) -> bool
Checks if a request with a custom key should be allowed based on rate limiting.
This method attempts to consume tokens from the bucket associated with the given key. If no bucket exists for the key, a new one is created.
§Parameters
key: The key to use for rate limiting (e.g., client IP, API key)tokens: Number of tokens to consume for this request
§Returns
true if the request should be allowed, false otherwise
Sourcepub fn get_stats(&self, key: &str) -> Option<DMSCRateLimitStats>
pub fn get_stats(&self, key: &str) -> Option<DMSCRateLimitStats>
Sourcepub fn get_remaining(&self, key: &str) -> Option<f64>
pub fn get_remaining(&self, key: &str) -> Option<f64>
Gets the remaining tokens for a specific key.
Sourcepub fn get_all_stats(&self) -> HashMap<String, DMSCRateLimitStats>
pub fn get_all_stats(&self) -> HashMap<String, DMSCRateLimitStats>
Gets rate limit statistics for all keys.
§Returns
A HashMap<String, DMSCRateLimitStats> with statistics for all keys
Sourcepub fn reset_bucket(&self, key: &str)
pub fn reset_bucket(&self, key: &str)
Resets the rate limit bucket for a specific key.
This method removes the bucket for the given key, effectively resetting the rate limit.
§Parameters
key: The key to reset the bucket for
Sourcepub fn clear_all_buckets(&self)
pub fn clear_all_buckets(&self)
Clears all rate limit buckets.
This method removes all buckets, effectively resetting rate limits for all keys.
Sourcepub fn get_config(&self) -> DMSCRateLimitConfig
pub fn get_config(&self) -> DMSCRateLimitConfig
Sourcepub async fn update_config(&mut self, config: DMSCRateLimitConfig)
pub async fn update_config(&mut self, config: DMSCRateLimitConfig)
Updates the rate limit configuration.
This method updates the configuration and resets all buckets with the new settings.
§Parameters
config: The new rate limit configuration
pub async fn check_multi(&self, keys: &[String], tokens: usize) -> Vec<bool>
pub async fn get_keys(&self) -> Vec<String>
pub fn bucket_count(&self) -> usize
Trait Implementations§
Source§impl<'py> IntoPyObject<'py> for DMSCRateLimiter
impl<'py> IntoPyObject<'py> for DMSCRateLimiter
Source§type Target = DMSCRateLimiter
type Target = DMSCRateLimiter
Source§type Output = Bound<'py, <DMSCRateLimiter as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <DMSCRateLimiter as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for DMSCRateLimiter
impl PyClass for DMSCRateLimiter
Source§impl PyClassImpl for DMSCRateLimiter
impl PyClassImpl for DMSCRateLimiter
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = c"Token bucket based rate limiter implementation.\n\nThis struct implements the token bucket algorithm for rate limiting, allowing\nfor both steady-state rate limiting and temporary bursts of requests.\x00"
const RAW_DOC: &'static CStr = c"Token bucket based rate limiter implementation.\n\nThis struct implements the token bucket algorithm for rate limiting, allowing\nfor both steady-state rate limiting and temporary bursts of requests.\x00"
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<DMSCRateLimiter>
type ThreadChecker = SendablePyClass<DMSCRateLimiter>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyTypeInfo for DMSCRateLimiter
impl PyTypeInfo for DMSCRateLimiter
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.impl DerefToPyAny for DMSCRateLimiter
impl ExtractPyClassWithClone for DMSCRateLimiter
Auto Trait Implementations§
impl !Freeze for DMSCRateLimiter
impl !RefUnwindSafe for DMSCRateLimiter
impl Send for DMSCRateLimiter
impl Sync for DMSCRateLimiter
impl Unpin for DMSCRateLimiter
impl !UnwindSafe for DMSCRateLimiter
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more