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

Thread-safe ring buffer for time-series data with statistics. More...

#include <time_series_buffer.h>

Collaboration diagram for kcenon::monitoring::time_series_buffer< T >:
Collaboration graph

Public Member Functions

 time_series_buffer (const time_series_buffer_config &config={})
 Constructor with configuration.
 
 time_series_buffer (const time_series_buffer &)=delete
 
time_series_bufferoperator= (const time_series_buffer &)=delete
 
 time_series_buffer (time_series_buffer &&)=delete
 
time_series_bufferoperator= (time_series_buffer &&)=delete
 
void add_sample (T value, std::chrono::system_clock::time_point timestamp=std::chrono::system_clock::now())
 Add a sample to the buffer.
 
template<typename Duration >
std::vector< time_series_sample< T > > get_samples (Duration duration) const
 Get samples within a duration from now.
 
std::vector< time_series_sample< T > > get_samples_since (std::chrono::system_clock::time_point since) const
 Get samples since a specific timestamp.
 
std::vector< time_series_sample< T > > get_all_samples () const
 Get all samples in chronological order.
 
template<typename Duration >
time_series_statistics get_statistics (Duration duration) const
 Get statistics for samples within a duration.
 
time_series_statistics get_statistics () const
 Get statistics for all samples.
 
common::Result< T > get_latest () const
 Get the latest sample value.
 
common::Result< time_series_sample< T > > get_latest_sample () const
 Get the latest sample with timestamp.
 
size_t size () const noexcept
 Get current number of samples.
 
bool empty () const noexcept
 Check if buffer is empty.
 
size_t capacity () const noexcept
 Get buffer capacity.
 
void clear () noexcept
 Clear all samples.
 
size_t memory_footprint () const noexcept
 Get memory footprint in bytes.
 

Static Private Member Functions

static time_series_statistics calculate_statistics (const std::vector< time_series_sample< T > > &samples)
 

Private Attributes

detail::time_series_ring_buffer< time_series_sample< T > > buffer_
 

Detailed Description

template<typename T>
class kcenon::monitoring::time_series_buffer< T >

Thread-safe ring buffer for time-series data with statistics.

This class wraps detail::time_series_ring_buffer to provide a specialized interface for single-value time series with automatic statistics calculation.

Template Parameters
TThe type of values to store (must be numeric)

Definition at line 331 of file time_series_buffer.h.

Constructor & Destructor Documentation

◆ time_series_buffer() [1/3]

template<typename T >
kcenon::monitoring::time_series_buffer< T >::time_series_buffer ( const time_series_buffer_config & config = {})
inlineexplicit

Constructor with configuration.

Parameters
configTime series buffer configuration options
Exceptions
std::invalid_argumentif configuration validation fails

Definition at line 343 of file time_series_buffer.h.

343 {})
344 : buffer_(config.max_samples) {
345 auto validation = config.validate();
346 if (validation.is_err()) {
347 throw std::invalid_argument("Invalid time_series_buffer configuration: " +
348 validation.error().message);
349 }
350 }
detail::time_series_ring_buffer< time_series_sample< T > > buffer_

◆ time_series_buffer() [2/3]

template<typename T >
kcenon::monitoring::time_series_buffer< T >::time_series_buffer ( const time_series_buffer< T > & )
delete

◆ time_series_buffer() [3/3]

template<typename T >
kcenon::monitoring::time_series_buffer< T >::time_series_buffer ( time_series_buffer< T > && )
delete

Member Function Documentation

◆ add_sample()

template<typename T >
void kcenon::monitoring::time_series_buffer< T >::add_sample ( T value,
std::chrono::system_clock::time_point timestamp = std::chrono::system_clock::now() )
inline

Add a sample to the buffer.

Parameters
valueThe value to add
timestampOptional timestamp (defaults to now)

Definition at line 362 of file time_series_buffer.h.

364 {
365 buffer_.add_sample(time_series_sample<T>(timestamp, value));
366 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

◆ calculate_statistics()

template<typename T >
static time_series_statistics kcenon::monitoring::time_series_buffer< T >::calculate_statistics ( const std::vector< time_series_sample< T > > & samples)
inlinestaticprivate

Definition at line 472 of file time_series_buffer.h.

473 {
474 if (samples.empty()) {
475 time_series_statistics stats;
476 stats.sample_count = 0;
477 stats.min_value = 0.0;
478 stats.max_value = 0.0;
479 return stats;
480 }
481
482 std::vector<double> values;
483 values.reserve(samples.size());
484 for (const auto& sample : samples) {
485 values.push_back(static_cast<double>(sample.value));
486 }
487
489 values,
490 samples.front().timestamp,
491 samples.back().timestamp);
492 }
time_series_statistics calculate_basic_statistics(const std::vector< double > &values, std::chrono::system_clock::time_point oldest_timestamp, std::chrono::system_clock::time_point newest_timestamp)
Calculate basic statistics from a vector of double values.

References kcenon::monitoring::detail::calculate_basic_statistics(), kcenon::monitoring::time_series_statistics::max_value, kcenon::monitoring::time_series_statistics::min_value, and kcenon::monitoring::time_series_statistics::sample_count.

Referenced by kcenon::monitoring::time_series_buffer< T >::get_statistics(), and kcenon::monitoring::time_series_buffer< T >::get_statistics().

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

◆ capacity()

template<typename T >
size_t kcenon::monitoring::time_series_buffer< T >::capacity ( ) const
inlinenoexcept

Get buffer capacity.

Definition at line 453 of file time_series_buffer.h.

453 {
454 return buffer_.capacity();
455 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

◆ clear()

template<typename T >
void kcenon::monitoring::time_series_buffer< T >::clear ( )
inlinenoexcept

Clear all samples.

Definition at line 460 of file time_series_buffer.h.

460 {
461 buffer_.clear();
462 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

◆ empty()

template<typename T >
bool kcenon::monitoring::time_series_buffer< T >::empty ( ) const
inlinenoexcept

Check if buffer is empty.

Definition at line 446 of file time_series_buffer.h.

446 {
447 return buffer_.empty();
448 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

◆ get_all_samples()

template<typename T >
std::vector< time_series_sample< T > > kcenon::monitoring::time_series_buffer< T >::get_all_samples ( ) const
inline

Get all samples in chronological order.

Returns
Vector of all samples

Definition at line 392 of file time_series_buffer.h.

392 {
393 return buffer_.get_all_samples();
394 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

Referenced by kcenon::monitoring::time_series_buffer< T >::get_statistics().

Here is the caller graph for this function:

◆ get_latest()

template<typename T >
common::Result< T > kcenon::monitoring::time_series_buffer< T >::get_latest ( ) const
inline

Get the latest sample value.

Returns
Result containing the latest value or error

Definition at line 420 of file time_series_buffer.h.

420 {
421 auto sample_result = buffer_.get_latest();
422 if (sample_result.is_err()) {
423 return common::Result<T>::err(sample_result.error());
424 }
425 return common::ok(sample_result.value().value);
426 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

◆ get_latest_sample()

template<typename T >
common::Result< time_series_sample< T > > kcenon::monitoring::time_series_buffer< T >::get_latest_sample ( ) const
inline

Get the latest sample with timestamp.

Returns
Result containing the latest sample or error

Definition at line 432 of file time_series_buffer.h.

432 {
433 return buffer_.get_latest();
434 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

◆ get_samples()

template<typename T >
template<typename Duration >
std::vector< time_series_sample< T > > kcenon::monitoring::time_series_buffer< T >::get_samples ( Duration duration) const
inline

Get samples within a duration from now.

Parameters
durationHow far back to look
Returns
Vector of samples within the duration

Definition at line 374 of file time_series_buffer.h.

374 {
375 return buffer_.get_samples(duration);
376 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

Referenced by kcenon::monitoring::time_series_buffer< T >::get_statistics().

Here is the caller graph for this function:

◆ get_samples_since()

template<typename T >
std::vector< time_series_sample< T > > kcenon::monitoring::time_series_buffer< T >::get_samples_since ( std::chrono::system_clock::time_point since) const
inline

Get samples since a specific timestamp.

Parameters
sinceThe timestamp to start from
Returns
Vector of samples since the timestamp

Definition at line 383 of file time_series_buffer.h.

384 {
385 return buffer_.get_samples_since(since);
386 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

◆ get_statistics() [1/2]

template<typename T >
time_series_statistics kcenon::monitoring::time_series_buffer< T >::get_statistics ( ) const
inline

Get statistics for all samples.

Returns
Statistics for all samples

Definition at line 411 of file time_series_buffer.h.

411 {
412 auto samples = get_all_samples();
413 return calculate_statistics(samples);
414 }
static time_series_statistics calculate_statistics(const std::vector< time_series_sample< T > > &samples)
std::vector< time_series_sample< T > > get_all_samples() const
Get all samples in chronological order.

References kcenon::monitoring::time_series_buffer< T >::calculate_statistics(), and kcenon::monitoring::time_series_buffer< T >::get_all_samples().

Here is the call graph for this function:

◆ get_statistics() [2/2]

template<typename T >
template<typename Duration >
time_series_statistics kcenon::monitoring::time_series_buffer< T >::get_statistics ( Duration duration) const
inline

Get statistics for samples within a duration.

Parameters
durationHow far back to look
Returns
Statistics for the samples

Definition at line 402 of file time_series_buffer.h.

402 {
403 auto samples = get_samples(duration);
404 return calculate_statistics(samples);
405 }
std::vector< time_series_sample< T > > get_samples(Duration duration) const
Get samples within a duration from now.

References kcenon::monitoring::time_series_buffer< T >::calculate_statistics(), and kcenon::monitoring::time_series_buffer< T >::get_samples().

Here is the call graph for this function:

◆ memory_footprint()

template<typename T >
size_t kcenon::monitoring::time_series_buffer< T >::memory_footprint ( ) const
inlinenoexcept

Get memory footprint in bytes.

Definition at line 467 of file time_series_buffer.h.

467 {
468 return buffer_.memory_footprint();
469 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

◆ operator=() [1/2]

template<typename T >
time_series_buffer & kcenon::monitoring::time_series_buffer< T >::operator= ( const time_series_buffer< T > & )
delete

◆ operator=() [2/2]

template<typename T >
time_series_buffer & kcenon::monitoring::time_series_buffer< T >::operator= ( time_series_buffer< T > && )
delete

◆ size()

template<typename T >
size_t kcenon::monitoring::time_series_buffer< T >::size ( ) const
inlinenoexcept

Get current number of samples.

Definition at line 439 of file time_series_buffer.h.

439 {
440 return buffer_.size();
441 }

References kcenon::monitoring::time_series_buffer< T >::buffer_.

Member Data Documentation

◆ buffer_


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