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

Specialized buffer for tracking load average history. More...

#include <time_series_buffer.h>

Collaboration diagram for kcenon::monitoring::load_average_history:
Collaboration graph

Public Member Functions

 load_average_history (size_t max_samples=1000)
 
 load_average_history (const load_average_history &)=delete
 
load_average_historyoperator= (const load_average_history &)=delete
 
 load_average_history (load_average_history &&)=delete
 
load_average_historyoperator= (load_average_history &&)=delete
 
void add_sample (double load_1m, double load_5m, double load_15m, std::chrono::system_clock::time_point timestamp=std::chrono::system_clock::now())
 Add a load average sample.
 
template<typename Duration >
std::vector< load_average_sampleget_samples (Duration duration) const
 Get samples within a duration from now.
 
std::vector< load_average_sampleget_samples_since (std::chrono::system_clock::time_point since) const
 Get samples since a specific timestamp.
 
std::vector< load_average_sampleget_all_samples () const
 Get all samples in chronological order.
 
template<typename Duration >
load_average_statistics get_statistics (Duration duration) const
 Get statistics for samples within a duration.
 
load_average_statistics get_statistics () const
 Get statistics for all samples.
 
common::Result< load_average_sampleget_latest () const
 Get the latest sample.
 
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 load_average_statistics calculate_statistics (const std::vector< load_average_sample > &samples)
 

Private Attributes

detail::time_series_ring_buffer< load_average_samplebuffer_
 

Detailed Description

Specialized buffer for tracking load average history.

This class wraps detail::time_series_ring_buffer to provide a specialized interface for load average samples with per-field statistics calculation.

Definition at line 529 of file time_series_buffer.h.

Constructor & Destructor Documentation

◆ load_average_history() [1/3]

kcenon::monitoring::load_average_history::load_average_history ( size_t max_samples = 1000)
inlineexplicit

Definition at line 534 of file time_series_buffer.h.

534: buffer_(max_samples) {}
detail::time_series_ring_buffer< load_average_sample > buffer_

◆ load_average_history() [2/3]

kcenon::monitoring::load_average_history::load_average_history ( const load_average_history & )
delete

◆ load_average_history() [3/3]

kcenon::monitoring::load_average_history::load_average_history ( load_average_history && )
delete

Member Function Documentation

◆ add_sample()

void kcenon::monitoring::load_average_history::add_sample ( double load_1m,
double load_5m,
double load_15m,
std::chrono::system_clock::time_point timestamp = std::chrono::system_clock::now() )
inline

Add a load average sample.

Parameters
load_1m1-minute load average
load_5m5-minute load average
load_15m15-minute load average
timestampOptional timestamp (defaults to now)

Definition at line 548 of file time_series_buffer.h.

550 {
551 buffer_.add_sample(load_average_sample(timestamp, load_1m, load_5m, load_15m));
552 }

References buffer_.

◆ calculate_statistics()

static load_average_statistics kcenon::monitoring::load_average_history::calculate_statistics ( const std::vector< load_average_sample > & samples)
inlinestaticprivate

Definition at line 646 of file time_series_buffer.h.

647 {
648 load_average_statistics stats;
649
650 if (samples.empty()) {
651 stats.load_1m_stats.sample_count = 0;
652 stats.load_1m_stats.min_value = 0.0;
653 stats.load_1m_stats.max_value = 0.0;
654 stats.load_5m_stats = stats.load_1m_stats;
655 stats.load_15m_stats = stats.load_1m_stats;
656 return stats;
657 }
658
659 std::vector<double> values_1m, values_5m, values_15m;
660 values_1m.reserve(samples.size());
661 values_5m.reserve(samples.size());
662 values_15m.reserve(samples.size());
663
664 for (const auto& sample : samples) {
665 values_1m.push_back(sample.load_1m);
666 values_5m.push_back(sample.load_5m);
667 values_15m.push_back(sample.load_15m);
668 }
669
670 auto oldest = samples.front().timestamp;
671 auto newest = samples.back().timestamp;
672
673 stats.load_1m_stats = detail::calculate_basic_statistics(values_1m, oldest, newest);
674 stats.load_5m_stats = detail::calculate_basic_statistics(values_5m, oldest, newest);
675 stats.load_15m_stats = detail::calculate_basic_statistics(values_15m, oldest, newest);
676
677 return stats;
678 }
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::load_average_statistics::load_15m_stats, kcenon::monitoring::load_average_statistics::load_1m_stats, kcenon::monitoring::load_average_statistics::load_5m_stats, kcenon::monitoring::time_series_statistics::max_value, kcenon::monitoring::time_series_statistics::min_value, and kcenon::monitoring::time_series_statistics::sample_count.

Referenced by get_statistics(), and get_statistics().

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

◆ capacity()

size_t kcenon::monitoring::load_average_history::capacity ( ) const
inlinenoexcept

Get buffer capacity.

Definition at line 627 of file time_series_buffer.h.

627 {
628 return buffer_.capacity();
629 }

References buffer_.

◆ clear()

void kcenon::monitoring::load_average_history::clear ( )
inlinenoexcept

Clear all samples.

Definition at line 634 of file time_series_buffer.h.

634 {
635 buffer_.clear();
636 }

References buffer_.

◆ empty()

bool kcenon::monitoring::load_average_history::empty ( ) const
inlinenoexcept

Check if buffer is empty.

Definition at line 620 of file time_series_buffer.h.

620 {
621 return buffer_.empty();
622 }

References buffer_.

◆ get_all_samples()

std::vector< load_average_sample > kcenon::monitoring::load_average_history::get_all_samples ( ) const
inline

Get all samples in chronological order.

Returns
Vector of all samples

Definition at line 578 of file time_series_buffer.h.

578 {
579 return buffer_.get_all_samples();
580 }

References buffer_.

Referenced by get_statistics().

Here is the caller graph for this function:

◆ get_latest()

common::Result< load_average_sample > kcenon::monitoring::load_average_history::get_latest ( ) const
inline

Get the latest sample.

Returns
Result containing the latest sample or error

Definition at line 606 of file time_series_buffer.h.

606 {
607 return buffer_.get_latest();
608 }

References buffer_.

◆ get_samples()

template<typename Duration >
std::vector< load_average_sample > kcenon::monitoring::load_average_history::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 560 of file time_series_buffer.h.

560 {
561 return buffer_.get_samples(duration);
562 }

References buffer_.

Referenced by get_statistics().

Here is the caller graph for this function:

◆ get_samples_since()

std::vector< load_average_sample > kcenon::monitoring::load_average_history::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 569 of file time_series_buffer.h.

570 {
571 return buffer_.get_samples_since(since);
572 }

References buffer_.

◆ get_statistics() [1/2]

load_average_statistics kcenon::monitoring::load_average_history::get_statistics ( ) const
inline

Get statistics for all samples.

Returns
Statistics for all samples

Definition at line 597 of file time_series_buffer.h.

597 {
598 auto samples = get_all_samples();
599 return calculate_statistics(samples);
600 }
std::vector< load_average_sample > get_all_samples() const
Get all samples in chronological order.
static load_average_statistics calculate_statistics(const std::vector< load_average_sample > &samples)

References calculate_statistics(), and get_all_samples().

Here is the call graph for this function:

◆ get_statistics() [2/2]

template<typename Duration >
load_average_statistics kcenon::monitoring::load_average_history::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 588 of file time_series_buffer.h.

588 {
589 auto samples = get_samples(duration);
590 return calculate_statistics(samples);
591 }
std::vector< load_average_sample > get_samples(Duration duration) const
Get samples within a duration from now.

References calculate_statistics(), and get_samples().

Here is the call graph for this function:

◆ memory_footprint()

size_t kcenon::monitoring::load_average_history::memory_footprint ( ) const
inlinenoexcept

Get memory footprint in bytes.

Definition at line 641 of file time_series_buffer.h.

641 {
642 return buffer_.memory_footprint();
643 }

References buffer_.

◆ operator=() [1/2]

load_average_history & kcenon::monitoring::load_average_history::operator= ( const load_average_history & )
delete

◆ operator=() [2/2]

load_average_history & kcenon::monitoring::load_average_history::operator= ( load_average_history && )
delete

◆ size()

size_t kcenon::monitoring::load_average_history::size ( ) const
inlinenoexcept

Get current number of samples.

Definition at line 613 of file time_series_buffer.h.

613 {
614 return buffer_.size();
615 }

References buffer_.

Member Data Documentation

◆ buffer_

detail::time_series_ring_buffer<load_average_sample> kcenon::monitoring::load_average_history::buffer_
private

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