|
Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
|
Lock-free ring buffer with atomic operations. More...
#include <ring_buffer.h>


Public Member Functions | |
| ring_buffer (const ring_buffer_config &config={}) | |
| Constructor with configuration. | |
| ring_buffer (const ring_buffer &)=delete | |
| ring_buffer & | operator= (const ring_buffer &)=delete |
| ring_buffer (ring_buffer &&)=default | |
| ring_buffer & | operator= (ring_buffer &&)=default |
| common::VoidResult | write (T &&item) |
| Write a single element to the buffer. | |
| size_t | write_batch (std::vector< T > &&items) |
| Write multiple elements in batch. | |
| common::VoidResult | read (T &item) |
| Read a single element from the buffer. | |
| size_t | read_batch (std::vector< T > &items, size_t max_count=SIZE_MAX) |
| Read multiple elements in batch. | |
| common::VoidResult | peek (T &item) const |
| Peek at the next item without removing it. | |
| size_t | size () const noexcept |
| Get current number of elements in buffer. | |
| bool | empty () const noexcept |
| Check if buffer is empty. | |
| bool | full () const noexcept |
| Check if buffer is full. | |
| size_t | capacity () const noexcept |
| Get buffer capacity. | |
| void | clear () noexcept |
| Clear all elements in the buffer. | |
| const ring_buffer_config & | get_config () const noexcept |
| Get buffer configuration. | |
| const ring_buffer_stats & | get_stats () const noexcept |
| Get buffer statistics. | |
| void | reset_stats () noexcept |
| Reset statistics. | |
| bool | is_overflow_rate_high () const noexcept |
| Check if buffer is experiencing high overflow. | |
| double | get_overflow_rate () const noexcept |
| Get overflow rate percentage. | |
Private Member Functions | |
| size_t | get_mask () const noexcept |
| Get the mask for efficient modulo operation. | |
| bool | is_full_unsafe (size_t write_idx, size_t read_idx) const noexcept |
| Check if buffer is full. | |
| bool | is_empty_unsafe (size_t write_idx, size_t read_idx) const noexcept |
| Check if buffer is empty. | |
Private Attributes | |
| std::atomic< size_t > | write_index_ {0} |
| std::atomic< size_t > | read_index_ {0} |
| std::unique_ptr< T[]> | buffer_ |
| ring_buffer_config | config_ |
| ring_buffer_stats | stats_ |
Lock-free ring buffer with atomic operations.
| T | The type of elements to store |
This implementation uses atomic operations for thread-safety and provides efficient circular buffer semantics with configurable overflow behavior.
Definition at line 141 of file ring_buffer.h.
|
inlineexplicit |
Constructor with configuration.
| config | Ring buffer configuration options |
| std::invalid_argument | if configuration validation fails |
Definition at line 180 of file ring_buffer.h.
|
delete |
|
default |
|
inlinenoexcept |
Get buffer capacity.
Definition at line 416 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer_config::capacity, and kcenon::monitoring::ring_buffer< T >::config_.
Referenced by TEST_F().

|
inlinenoexcept |
Clear all elements in the buffer.
Definition at line 423 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::read_index_, and kcenon::monitoring::ring_buffer< T >::write_index_.
|
inlinenoexcept |
Check if buffer is empty.
Definition at line 400 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::size().
Referenced by TEST_F().


|
inlinenoexcept |
Check if buffer is full.
Definition at line 407 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::is_full_unsafe(), kcenon::monitoring::ring_buffer< T >::read_index_, and kcenon::monitoring::ring_buffer< T >::write_index_.
Referenced by TEST_F().


|
inlinenoexcept |
Get buffer configuration.
Definition at line 431 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::config_.
|
inlineprivatenoexcept |
Get the mask for efficient modulo operation.
Definition at line 156 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer_config::capacity, and kcenon::monitoring::ring_buffer< T >::config_.
Referenced by kcenon::monitoring::ring_buffer< T >::is_full_unsafe(), kcenon::monitoring::ring_buffer< T >::read(), and kcenon::monitoring::ring_buffer< T >::write().

|
inlinenoexcept |
Get overflow rate percentage.
Definition at line 466 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer_stats::get_overflow_rate(), and kcenon::monitoring::ring_buffer< T >::stats_.

|
inlinenoexcept |
Get buffer statistics.
Definition at line 438 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::stats_.
|
inlineprivatenoexcept |
Check if buffer is empty.
Definition at line 170 of file ring_buffer.h.
Referenced by kcenon::monitoring::ring_buffer< T >::peek(), and kcenon::monitoring::ring_buffer< T >::read().

|
inlineprivatenoexcept |
Check if buffer is full.
Definition at line 163 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::get_mask().
Referenced by kcenon::monitoring::ring_buffer< T >::full(), and kcenon::monitoring::ring_buffer< T >::write().


|
inlinenoexcept |
Check if buffer is experiencing high overflow.
Definition at line 459 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer_stats::is_overflow_rate_high(), and kcenon::monitoring::ring_buffer< T >::stats_.

|
delete |
|
default |
|
inline |
Peek at the next item without removing it.
| item | Reference to store the peeked item |
Definition at line 368 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::buffer_, kcenon::monitoring::collection_failed, kcenon::monitoring::ring_buffer< T >::is_empty_unsafe(), kcenon::monitoring::ring_buffer< T >::read_index_, and kcenon::monitoring::ring_buffer< T >::write_index_.
Referenced by TEST_F().


|
inline |
Read a single element from the buffer.
| item | Reference to store the read item |
Definition at line 311 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::buffer_, kcenon::monitoring::collection_failed, kcenon::monitoring::ring_buffer_stats::failed_reads, kcenon::monitoring::ring_buffer< T >::get_mask(), kcenon::monitoring::ring_buffer< T >::is_empty_unsafe(), kcenon::monitoring::ring_buffer< T >::read_index_, kcenon::monitoring::ring_buffer< T >::stats_, kcenon::monitoring::ring_buffer_stats::total_reads, and kcenon::monitoring::ring_buffer< T >::write_index_.
Referenced by kcenon::monitoring::ring_buffer< T >::read_batch(), TEST_F(), TEST_F(), and TEST_F().


|
inline |
Read multiple elements in batch.
| items | Vector to store read items |
| max_count | Maximum number of items to read |
Definition at line 339 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer_config::batch_size, kcenon::monitoring::ring_buffer< T >::config_, and kcenon::monitoring::ring_buffer< T >::read().
Referenced by TEST_F().


|
inlinenoexcept |
Reset statistics.
Definition at line 445 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer_stats::contention_retries, kcenon::monitoring::ring_buffer_stats::creation_time, kcenon::monitoring::ring_buffer_stats::failed_reads, kcenon::monitoring::ring_buffer_stats::failed_writes, kcenon::monitoring::ring_buffer_stats::overwrites, kcenon::monitoring::ring_buffer< T >::stats_, kcenon::monitoring::ring_buffer_stats::total_reads, and kcenon::monitoring::ring_buffer_stats::total_writes.
|
inlinenoexcept |
Get current number of elements in buffer.
Definition at line 384 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer_config::capacity, kcenon::monitoring::ring_buffer< T >::config_, kcenon::monitoring::ring_buffer< T >::read_index_, and kcenon::monitoring::ring_buffer< T >::write_index_.
Referenced by kcenon::monitoring::ring_buffer< T >::empty(), TEST_F(), TEST_F(), and kcenon::monitoring::ring_buffer< T >::write().

|
inline |
Write a single element to the buffer.
| item | Item to write |
Definition at line 203 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::buffer_, kcenon::monitoring::ring_buffer_config::capacity, kcenon::monitoring::collection_failed, kcenon::monitoring::ring_buffer< T >::config_, kcenon::monitoring::ring_buffer_stats::failed_writes, kcenon::monitoring::ring_buffer< T >::get_mask(), kcenon::monitoring::ring_buffer< T >::is_full_unsafe(), kcenon::monitoring::ring_buffer_config::overwrite_old, kcenon::monitoring::ring_buffer_stats::overwrites, kcenon::monitoring::ring_buffer< T >::read_index_, kcenon::monitoring::ring_buffer< T >::size(), kcenon::monitoring::ring_buffer< T >::stats_, kcenon::monitoring::storage_full, kcenon::monitoring::error_info::to_common_error(), kcenon::monitoring::ring_buffer_stats::total_writes, and kcenon::monitoring::ring_buffer< T >::write_index_.
Referenced by TEST_F(), TEST_F(), TEST_F(), and kcenon::monitoring::ring_buffer< T >::write_batch().


|
inline |
Write multiple elements in batch.
| items | Vector of items to write |
Definition at line 282 of file ring_buffer.h.
References kcenon::monitoring::ring_buffer< T >::config_, kcenon::monitoring::ring_buffer_config::overwrite_old, and kcenon::monitoring::ring_buffer< T >::write().
Referenced by TEST_F().


|
private |
Definition at line 149 of file ring_buffer.h.
Referenced by kcenon::monitoring::ring_buffer< T >::peek(), kcenon::monitoring::ring_buffer< T >::read(), and kcenon::monitoring::ring_buffer< T >::write().
|
private |
Definition at line 150 of file ring_buffer.h.
Referenced by kcenon::monitoring::ring_buffer< T >::capacity(), kcenon::monitoring::ring_buffer< T >::get_config(), kcenon::monitoring::ring_buffer< T >::get_mask(), kcenon::monitoring::ring_buffer< T >::read_batch(), kcenon::monitoring::ring_buffer< T >::size(), kcenon::monitoring::ring_buffer< T >::write(), and kcenon::monitoring::ring_buffer< T >::write_batch().
|
private |
Definition at line 147 of file ring_buffer.h.
Referenced by kcenon::monitoring::ring_buffer< T >::clear(), kcenon::monitoring::ring_buffer< T >::full(), kcenon::monitoring::ring_buffer< T >::peek(), kcenon::monitoring::ring_buffer< T >::read(), kcenon::monitoring::ring_buffer< T >::size(), and kcenon::monitoring::ring_buffer< T >::write().
|
mutableprivate |
Definition at line 151 of file ring_buffer.h.
Referenced by kcenon::monitoring::ring_buffer< T >::get_overflow_rate(), kcenon::monitoring::ring_buffer< T >::get_stats(), kcenon::monitoring::ring_buffer< T >::is_overflow_rate_high(), kcenon::monitoring::ring_buffer< T >::read(), kcenon::monitoring::ring_buffer< T >::reset_stats(), and kcenon::monitoring::ring_buffer< T >::write().
|
private |
Definition at line 146 of file ring_buffer.h.
Referenced by kcenon::monitoring::ring_buffer< T >::clear(), kcenon::monitoring::ring_buffer< T >::full(), kcenon::monitoring::ring_buffer< T >::peek(), kcenon::monitoring::ring_buffer< T >::read(), kcenon::monitoring::ring_buffer< T >::size(), and kcenon::monitoring::ring_buffer< T >::write().