Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::detail::time_series_ring_buffer< Sample > Class Template Reference

Generic time-series ring buffer base template. More...

#include <time_series_buffer.h>

Inheritance diagram for kcenon::monitoring::detail::time_series_ring_buffer< Sample >:
Inheritance graph
Collaboration diagram for kcenon::monitoring::detail::time_series_ring_buffer< Sample >:
Collaboration graph

Public Member Functions

 time_series_ring_buffer (size_t max_samples)
 Constructor with maximum sample count.
 
 time_series_ring_buffer (const time_series_ring_buffer &)=delete
 
time_series_ring_bufferoperator= (const time_series_ring_buffer &)=delete
 
 time_series_ring_buffer (time_series_ring_buffer &&)=delete
 
time_series_ring_bufferoperator= (time_series_ring_buffer &&)=delete
 
void add_sample (const Sample &sample)
 
template<typename Duration >
std::vector< Sample > get_samples (Duration duration) const
 
std::vector< Sample > get_samples_since (std::chrono::system_clock::time_point since) const
 
std::vector< Sample > get_all_samples () const
 
common::Result< Sample > get_latest () const
 
size_t size () const noexcept
 
bool empty () const noexcept
 
size_t capacity () const noexcept
 
void clear () noexcept
 
size_t memory_footprint () const noexcept
 

Private Member Functions

size_t get_actual_index (size_t logical_index) const noexcept
 

Private Attributes

std::mutex mutex_
 
std::vector< Sample > buffer_
 
size_t head_ = 0
 
size_t count_ = 0
 
size_t max_samples_
 

Detailed Description

template<typename Sample>
class kcenon::monitoring::detail::time_series_ring_buffer< Sample >

Generic time-series ring buffer base template.

This template provides the common ring buffer functionality shared by time_series_buffer<T> and load_average_history. It handles:

  • Ring buffer storage and index management
  • Thread-safe add/get operations
  • Time-based sample filtering
Template Parameters
SampleThe sample type (must have a 'timestamp' member of type std::chrono::system_clock::time_point)

Definition at line 194 of file time_series_buffer.h.

Constructor & Destructor Documentation

◆ time_series_ring_buffer() [1/3]

template<typename Sample >
kcenon::monitoring::detail::time_series_ring_buffer< Sample >::time_series_ring_buffer ( size_t max_samples)
inlineexplicit

Constructor with maximum sample count.

Parameters
max_samplesMaximum number of samples to store
Exceptions
std::invalid_argumentif max_samples is zero

Definition at line 215 of file time_series_buffer.h.

215 : max_samples_(max_samples) {
216 if (max_samples_ == 0) {
217 throw std::invalid_argument("Max samples must be positive");
218 }
219 buffer_.resize(max_samples_);
220 }

References kcenon::monitoring::detail::time_series_ring_buffer< Sample >::buffer_, and kcenon::monitoring::detail::time_series_ring_buffer< Sample >::max_samples_.

◆ time_series_ring_buffer() [2/3]

template<typename Sample >
kcenon::monitoring::detail::time_series_ring_buffer< Sample >::time_series_ring_buffer ( const time_series_ring_buffer< Sample > & )
delete

◆ time_series_ring_buffer() [3/3]

template<typename Sample >
kcenon::monitoring::detail::time_series_ring_buffer< Sample >::time_series_ring_buffer ( time_series_ring_buffer< Sample > && )
delete

Member Function Documentation

◆ add_sample()

◆ capacity()

template<typename Sample >
size_t kcenon::monitoring::detail::time_series_ring_buffer< Sample >::capacity ( ) const
inlinenoexcept

◆ clear()

◆ empty()

template<typename Sample >
bool kcenon::monitoring::detail::time_series_ring_buffer< Sample >::empty ( ) const
inlinenoexcept

Definition at line 300 of file time_series_buffer.h.

300 {
301 std::lock_guard<std::mutex> lock(mutex_);
302 return count_ == 0;
303 }

References kcenon::monitoring::detail::time_series_ring_buffer< Sample >::count_, and kcenon::monitoring::detail::time_series_ring_buffer< Sample >::mutex_.

◆ get_actual_index()

template<typename Sample >
size_t kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_actual_index ( size_t logical_index) const
inlineprivatenoexcept

◆ get_all_samples()

template<typename Sample >
std::vector< Sample > kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_all_samples ( ) const
inline

Definition at line 266 of file time_series_buffer.h.

266 {
267 std::lock_guard<std::mutex> lock(mutex_);
268
269 std::vector<Sample> result;
270 result.reserve(count_);
271
272 for (size_t i = 0; i < count_; ++i) {
273 result.push_back(buffer_[get_actual_index(i)]);
274 }
275
276 std::sort(result.begin(), result.end(),
277 [](const Sample& a, const Sample& b) {
278 return a.timestamp < b.timestamp;
279 });
280
281 return result;
282 }
size_t get_actual_index(size_t logical_index) const noexcept

References kcenon::monitoring::detail::time_series_ring_buffer< Sample >::buffer_, kcenon::monitoring::detail::time_series_ring_buffer< Sample >::count_, kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_actual_index(), and kcenon::monitoring::detail::time_series_ring_buffer< Sample >::mutex_.

Here is the call graph for this function:

◆ get_latest()

template<typename Sample >
common::Result< Sample > kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_latest ( ) const
inline

◆ get_samples()

template<typename Sample >
template<typename Duration >
std::vector< Sample > kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_samples ( Duration duration) const
inline

Definition at line 239 of file time_series_buffer.h.

239 {
240 auto cutoff = std::chrono::system_clock::now() - duration;
241 return get_samples_since(cutoff);
242 }
std::vector< Sample > get_samples_since(std::chrono::system_clock::time_point since) const

References kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_samples_since().

Here is the call graph for this function:

◆ get_samples_since()

template<typename Sample >
std::vector< Sample > kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_samples_since ( std::chrono::system_clock::time_point since) const
inline

Definition at line 244 of file time_series_buffer.h.

245 {
246 std::lock_guard<std::mutex> lock(mutex_);
247
248 std::vector<Sample> result;
249 result.reserve(count_);
250
251 for (size_t i = 0; i < count_; ++i) {
252 const auto& sample = buffer_[get_actual_index(i)];
253 if (sample.timestamp >= since) {
254 result.push_back(sample);
255 }
256 }
257
258 std::sort(result.begin(), result.end(),
259 [](const Sample& a, const Sample& b) {
260 return a.timestamp < b.timestamp;
261 });
262
263 return result;
264 }

References kcenon::monitoring::detail::time_series_ring_buffer< Sample >::buffer_, kcenon::monitoring::detail::time_series_ring_buffer< Sample >::count_, kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_actual_index(), and kcenon::monitoring::detail::time_series_ring_buffer< Sample >::mutex_.

Referenced by kcenon::monitoring::detail::time_series_ring_buffer< Sample >::get_samples().

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

◆ memory_footprint()

template<typename Sample >
size_t kcenon::monitoring::detail::time_series_ring_buffer< Sample >::memory_footprint ( ) const
inlinenoexcept

Definition at line 313 of file time_series_buffer.h.

313 {
314 return sizeof(time_series_ring_buffer<Sample>) +
315 max_samples_ * sizeof(Sample);
316 }
time_series_ring_buffer(size_t max_samples)
Constructor with maximum sample count.

References kcenon::monitoring::detail::time_series_ring_buffer< Sample >::max_samples_.

◆ operator=() [1/2]

template<typename Sample >
time_series_ring_buffer & kcenon::monitoring::detail::time_series_ring_buffer< Sample >::operator= ( const time_series_ring_buffer< Sample > & )
delete

◆ operator=() [2/2]

template<typename Sample >
time_series_ring_buffer & kcenon::monitoring::detail::time_series_ring_buffer< Sample >::operator= ( time_series_ring_buffer< Sample > && )
delete

◆ size()

template<typename Sample >
size_t kcenon::monitoring::detail::time_series_ring_buffer< Sample >::size ( ) const
inlinenoexcept

Member Data Documentation

◆ buffer_

◆ count_

◆ head_

◆ max_samples_

◆ mutex_


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