Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::leaky_bucket_limiter Class Reference

Leaky bucket rate limiter implementation. More...

#include <resource_manager.h>

Inheritance diagram for kcenon::monitoring::leaky_bucket_limiter:
Inheritance graph
Collaboration diagram for kcenon::monitoring::leaky_bucket_limiter:
Collaboration graph

Public Types

using clock = std::chrono::steady_clock
 

Public Member Functions

 leaky_bucket_limiter (const std::string &name, double rate, size_t capacity)
 
bool try_acquire (size_t count=1) override
 Try to acquire tokens.
 
const std::string & get_name () const override
 Get the name of this rate limiter.
 
- Public Member Functions inherited from kcenon::monitoring::rate_limiter
virtual ~rate_limiter ()=default
 
template<typename Func >
auto execute (Func &&func) -> decltype(func())
 Execute a function with rate limiting.
 

Private Member Functions

void leak ()
 

Private Attributes

std::string name_
 
double rate_
 
size_t capacity_
 
double water_
 
clock::time_point last_leak_
 
std::mutex mutex_
 

Detailed Description

Leaky bucket rate limiter implementation.

Uses the leaky bucket algorithm for rate limiting. Requests fill the bucket and it leaks at a constant rate.

Definition at line 268 of file resource_manager.h.

Member Typedef Documentation

◆ clock

using kcenon::monitoring::leaky_bucket_limiter::clock = std::chrono::steady_clock

Definition at line 270 of file resource_manager.h.

Constructor & Destructor Documentation

◆ leaky_bucket_limiter()

kcenon::monitoring::leaky_bucket_limiter::leaky_bucket_limiter ( const std::string & name,
double rate,
size_t capacity )
inline

Member Function Documentation

◆ get_name()

const std::string & kcenon::monitoring::leaky_bucket_limiter::get_name ( ) const
inlineoverridevirtual

Get the name of this rate limiter.

Implements kcenon::monitoring::rate_limiter.

Definition at line 290 of file resource_manager.h.

290 {
291 return name_;
292 }

References name_.

◆ leak()

void kcenon::monitoring::leaky_bucket_limiter::leak ( )
inlineprivate

Definition at line 295 of file resource_manager.h.

295 {
296 auto now = clock::now();
297 auto elapsed = std::chrono::duration<double>(now - last_leak_).count();
298 water_ = std::max(0.0, water_ - elapsed * rate_);
299 last_leak_ = now;
300 }

References last_leak_, rate_, and water_.

Referenced by try_acquire().

Here is the caller graph for this function:

◆ try_acquire()

bool kcenon::monitoring::leaky_bucket_limiter::try_acquire ( size_t count = 1)
inlineoverridevirtual

Try to acquire tokens.

Parameters
countNumber of tokens to acquire
Returns
true if tokens were acquired

Implements kcenon::monitoring::rate_limiter.

Definition at line 279 of file resource_manager.h.

279 {
280 std::lock_guard<std::mutex> lock(mutex_);
281 leak();
282
283 if (water_ + static_cast<double>(count) <= static_cast<double>(capacity_)) {
284 water_ += static_cast<double>(count);
285 return true;
286 }
287 return false;
288 }

References capacity_, leak(), mutex_, and water_.

Here is the call graph for this function:

Member Data Documentation

◆ capacity_

size_t kcenon::monitoring::leaky_bucket_limiter::capacity_
private

Definition at line 304 of file resource_manager.h.

Referenced by try_acquire().

◆ last_leak_

clock::time_point kcenon::monitoring::leaky_bucket_limiter::last_leak_
private

Definition at line 306 of file resource_manager.h.

Referenced by leak().

◆ mutex_

std::mutex kcenon::monitoring::leaky_bucket_limiter::mutex_
mutableprivate

Definition at line 307 of file resource_manager.h.

Referenced by try_acquire().

◆ name_

std::string kcenon::monitoring::leaky_bucket_limiter::name_
private

Definition at line 302 of file resource_manager.h.

Referenced by get_name().

◆ rate_

double kcenon::monitoring::leaky_bucket_limiter::rate_
private

Definition at line 303 of file resource_manager.h.

Referenced by leak().

◆ water_

double kcenon::monitoring::leaky_bucket_limiter::water_
private

Definition at line 305 of file resource_manager.h.

Referenced by leak(), and try_acquire().


The documentation for this class was generated from the following file: