Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
kcenon::common::resilience::failure_window Class Reference

Thread-safe sliding window for failure tracking. More...

#include <failure_window.h>

Collaboration diagram for kcenon::common::resilience::failure_window:
Collaboration graph

Public Types

using clock_type = std::chrono::steady_clock
 
using time_point = clock_type::time_point
 
using duration = std::chrono::milliseconds
 

Public Member Functions

 failure_window (duration window_duration)
 Construct a failure window with specified duration.
 
auto record_failure () -> void
 Record a new failure at current time.
 
auto get_failure_count () const -> std::size_t
 Get current failure count within window. Removes expired failures before counting.
 
auto reset () -> void
 Clear all recorded failures.
 
auto is_empty () -> bool
 Check if window is empty (no recent failures).
 

Private Member Functions

auto cleanup_expired_failures () const -> void
 Remove failures outside the time window. Must be called with mutex locked.
 

Private Attributes

duration window_duration_
 
std::deque< time_pointfailures_
 
std::mutex mutex_
 

Detailed Description

Thread-safe sliding window for failure tracking.

Maintains a deque of failure timestamps within a configured window duration. Automatically removes expired failures when queried.

Thread Safety:

  • All public methods are thread-safe via internal mutex.
  • Safe for concurrent access from multiple threads.

Definition at line 33 of file failure_window.h.

Member Typedef Documentation

◆ clock_type

using kcenon::common::resilience::failure_window::clock_type = std::chrono::steady_clock

Definition at line 35 of file failure_window.h.

◆ duration

using kcenon::common::resilience::failure_window::duration = std::chrono::milliseconds

Definition at line 37 of file failure_window.h.

◆ time_point

Definition at line 36 of file failure_window.h.

Constructor & Destructor Documentation

◆ failure_window()

kcenon::common::resilience::failure_window::failure_window ( duration window_duration)
inlineexplicit

Construct a failure window with specified duration.

Parameters
window_durationTime window for tracking failures

Definition at line 43 of file failure_window.h.

44 : window_duration_(window_duration)
45 {
46 }

Member Function Documentation

◆ cleanup_expired_failures()

auto kcenon::common::resilience::failure_window::cleanup_expired_failures ( ) const -> void
inlineprivate

Remove failures outside the time window. Must be called with mutex locked.

Definition at line 94 of file failure_window.h.

95 {
96 const auto now = clock_type::now();
97 const auto cutoff = now - window_duration_;
98
99 // Remove all failures older than cutoff
100 failures_.erase(
101 std::remove_if(failures_.begin(), failures_.end(),
102 [cutoff](const time_point& t) { return t < cutoff; }),
103 failures_.end());
104 }

References failures_, and window_duration_.

Referenced by get_failure_count(), and is_empty().

Here is the caller graph for this function:

◆ get_failure_count()

auto kcenon::common::resilience::failure_window::get_failure_count ( ) const -> std::size_t
inlinenodiscard

Get current failure count within window. Removes expired failures before counting.

Returns
Number of failures within the time window

Definition at line 62 of file failure_window.h.

63 {
64 std::lock_guard<std::mutex> lock(mutex_);
66 return failures_.size();
67 }
auto cleanup_expired_failures() const -> void
Remove failures outside the time window. Must be called with mutex locked.

References cleanup_expired_failures(), failures_, and mutex_.

Referenced by kcenon::common::resilience::circuit_breaker::get_stats(), and kcenon::common::resilience::circuit_breaker::record_failure().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_empty()

auto kcenon::common::resilience::failure_window::is_empty ( ) -> bool
inlinenodiscard

Check if window is empty (no recent failures).

Returns
true if no failures within window, false otherwise

Definition at line 82 of file failure_window.h.

83 {
84 std::lock_guard<std::mutex> lock(mutex_);
86 return failures_.empty();
87 }

References cleanup_expired_failures(), failures_, and mutex_.

Here is the call graph for this function:

◆ record_failure()

auto kcenon::common::resilience::failure_window::record_failure ( ) -> void
inline

Record a new failure at current time.

Definition at line 51 of file failure_window.h.

52 {
53 std::lock_guard<std::mutex> lock(mutex_);
54 failures_.push_back(clock_type::now());
55 }

References failures_, and mutex_.

Referenced by kcenon::common::resilience::circuit_breaker::record_failure().

Here is the caller graph for this function:

◆ reset()

auto kcenon::common::resilience::failure_window::reset ( ) -> void
inline

Clear all recorded failures.

Definition at line 72 of file failure_window.h.

73 {
74 std::lock_guard<std::mutex> lock(mutex_);
75 failures_.clear();
76 }

References failures_, and mutex_.

Referenced by kcenon::common::resilience::circuit_breaker::transition_to_closed().

Here is the caller graph for this function:

Member Data Documentation

◆ failures_

std::deque<time_point> kcenon::common::resilience::failure_window::failures_
mutableprivate

◆ mutex_

std::mutex kcenon::common::resilience::failure_window::mutex_
mutableprivate

Definition at line 108 of file failure_window.h.

Referenced by get_failure_count(), is_empty(), record_failure(), and reset().

◆ window_duration_

duration kcenon::common::resilience::failure_window::window_duration_
private

Definition at line 106 of file failure_window.h.

Referenced by cleanup_expired_failures().


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