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 554 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 559 of file time_series_buffer.h.

559: 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 573 of file time_series_buffer.h.

575 {
576 buffer_.add_sample(load_average_sample(timestamp, load_1m, load_5m, load_15m));
577 }

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 671 of file time_series_buffer.h.

672 {
673 load_average_statistics stats;
674
675 if (samples.empty()) {
676 stats.load_1m_stats.sample_count = 0;
677 stats.load_1m_stats.min_value = 0.0;
678 stats.load_1m_stats.max_value = 0.0;
679 stats.load_5m_stats = stats.load_1m_stats;
680 stats.load_15m_stats = stats.load_1m_stats;
681 return stats;
682 }
683
684 std::vector<double> values_1m, values_5m, values_15m;
685 values_1m.reserve(samples.size());
686 values_5m.reserve(samples.size());
687 values_15m.reserve(samples.size());
688
689 for (const auto& sample : samples) {
690 values_1m.push_back(sample.load_1m);
691 values_5m.push_back(sample.load_5m);
692 values_15m.push_back(sample.load_15m);
693 }
694
695 auto oldest = samples.front().timestamp;
696 auto newest = samples.back().timestamp;
697
698 stats.load_1m_stats = detail::calculate_basic_statistics(values_1m, oldest, newest);
699 stats.load_5m_stats = detail::calculate_basic_statistics(values_5m, oldest, newest);
700 stats.load_15m_stats = detail::calculate_basic_statistics(values_15m, oldest, newest);
701
702 return stats;
703 }
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 652 of file time_series_buffer.h.

652 {
653 return buffer_.capacity();
654 }

References buffer_.

◆ clear()

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

Clear all samples.

Definition at line 659 of file time_series_buffer.h.

659 {
660 buffer_.clear();
661 }

References buffer_.

◆ empty()

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

Check if buffer is empty.

Definition at line 645 of file time_series_buffer.h.

645 {
646 return buffer_.empty();
647 }

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 603 of file time_series_buffer.h.

603 {
604 return buffer_.get_all_samples();
605 }

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 631 of file time_series_buffer.h.

631 {
632 return buffer_.get_latest();
633 }

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 585 of file time_series_buffer.h.

585 {
586 return buffer_.get_samples(duration);
587 }

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 594 of file time_series_buffer.h.

595 {
596 return buffer_.get_samples_since(since);
597 }

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 622 of file time_series_buffer.h.

622 {
623 auto samples = get_all_samples();
624 return calculate_statistics(samples);
625 }
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 613 of file time_series_buffer.h.

613 {
614 auto samples = get_samples(duration);
615 return calculate_statistics(samples);
616 }
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 666 of file time_series_buffer.h.

666 {
667 return buffer_.memory_footprint();
668 }

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 638 of file time_series_buffer.h.

638 {
639 return buffer_.size();
640 }

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: