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

Welford's algorithm for computing streaming statistics. More...

#include <stream_aggregator.h>

Collaboration diagram for kcenon::monitoring::online_statistics:
Collaboration graph

Public Member Functions

 online_statistics ()=default
 
void add_value (double value)
 Add a value to the statistics.
 
size_t count () const
 Get sample count.
 
double mean () const
 Get running mean.
 
double variance () const
 Get running variance (sample variance)
 
double stddev () const
 Get running standard deviation.
 
double min () const
 Get minimum value.
 
double max () const
 Get maximum value.
 
double sum () const
 Get sum of all values.
 
streaming_statistics get_statistics () const
 Get full statistics.
 
void reset ()
 Reset statistics.
 

Private Attributes

std::shared_mutex mutex_
 
size_t count_ = 0
 
double mean_ = 0.0
 
double m2_ = 0.0
 
double sum_ = 0.0
 
double min_value_ = 0.0
 
double max_value_ = 0.0
 

Detailed Description

Welford's algorithm for computing streaming statistics.

This class computes running mean, variance, and standard deviation using Welford's numerically stable online algorithm.

Definition at line 58 of file stream_aggregator.h.

Constructor & Destructor Documentation

◆ online_statistics()

kcenon::monitoring::online_statistics::online_statistics ( )
default

Member Function Documentation

◆ add_value()

void kcenon::monitoring::online_statistics::add_value ( double value)
inline

Add a value to the statistics.

Parameters
valueThe value to add

Definition at line 66 of file stream_aggregator.h.

66 {
67 std::unique_lock<std::shared_mutex> lock(mutex_);
68 count_++;
69 sum_ += value;
70
71 double delta = value - mean_;
72 mean_ += delta / static_cast<double>(count_);
73 double delta2 = value - mean_;
74 m2_ += delta * delta2;
75
76 if (count_ == 1) {
77 min_value_ = value;
78 max_value_ = value;
79 } else {
80 min_value_ = std::min(min_value_, value);
81 max_value_ = std::max(max_value_, value);
82 }
83 }

References count_, m2_, max_value_, mean_, min_value_, mutex_, and sum_.

Referenced by kcenon::monitoring::stream_aggregator::add_observation(), TEST_F(), and TEST_F().

Here is the caller graph for this function:

◆ count()

size_t kcenon::monitoring::online_statistics::count ( ) const
inline

Get sample count.

Definition at line 88 of file stream_aggregator.h.

88 {
89 std::shared_lock<std::shared_mutex> lock(mutex_);
90 return count_;
91 }

References count_, and mutex_.

Referenced by kcenon::monitoring::stream_aggregator::add_observation(), kcenon::monitoring::stream_aggregator::count(), and TEST_F().

Here is the caller graph for this function:

◆ get_statistics()

streaming_statistics kcenon::monitoring::online_statistics::get_statistics ( ) const
inline

Get full statistics.

Definition at line 146 of file stream_aggregator.h.

146 {
147 std::shared_lock<std::shared_mutex> lock(mutex_);
148 streaming_statistics stats;
149 stats.count = count_;
150 stats.mean = mean_;
151 stats.sum = sum_;
152 stats.min_value = min_value_;
153 stats.max_value = max_value_;
154
155 if (count_ >= 2) {
156 stats.variance = m2_ / static_cast<double>(count_ - 1);
157 stats.std_deviation = std::sqrt(stats.variance);
158 }
159
160 return stats;
161 }

References kcenon::monitoring::streaming_statistics::count, count_, m2_, kcenon::monitoring::streaming_statistics::max_value, max_value_, kcenon::monitoring::streaming_statistics::mean, mean_, kcenon::monitoring::streaming_statistics::min_value, min_value_, mutex_, kcenon::monitoring::streaming_statistics::std_deviation, kcenon::monitoring::streaming_statistics::sum, sum_, and kcenon::monitoring::streaming_statistics::variance.

Referenced by kcenon::monitoring::stream_aggregator::get_statistics(), TEST_F(), and TEST_F().

Here is the caller graph for this function:

◆ max()

double kcenon::monitoring::online_statistics::max ( ) const
inline

Get maximum value.

Definition at line 130 of file stream_aggregator.h.

130 {
131 std::shared_lock<std::shared_mutex> lock(mutex_);
132 return max_value_;
133 }

References max_value_, and mutex_.

◆ mean()

double kcenon::monitoring::online_statistics::mean ( ) const
inline

Get running mean.

Definition at line 96 of file stream_aggregator.h.

96 {
97 std::shared_lock<std::shared_mutex> lock(mutex_);
98 return mean_;
99 }

References mean_, and mutex_.

Referenced by kcenon::monitoring::stream_aggregator::add_observation(), kcenon::monitoring::stream_aggregator::mean(), and TEST_F().

Here is the caller graph for this function:

◆ min()

double kcenon::monitoring::online_statistics::min ( ) const
inline

Get minimum value.

Definition at line 122 of file stream_aggregator.h.

122 {
123 std::shared_lock<std::shared_mutex> lock(mutex_);
124 return min_value_;
125 }

References min_value_, and mutex_.

◆ reset()

void kcenon::monitoring::online_statistics::reset ( )
inline

Reset statistics.

Definition at line 166 of file stream_aggregator.h.

166 {
167 std::unique_lock<std::shared_mutex> lock(mutex_);
168 count_ = 0;
169 mean_ = 0.0;
170 m2_ = 0.0;
171 sum_ = 0.0;
172 min_value_ = 0.0;
173 max_value_ = 0.0;
174 }

References count_, m2_, max_value_, mean_, min_value_, mutex_, and sum_.

Referenced by kcenon::monitoring::stream_aggregator::reset().

Here is the caller graph for this function:

◆ stddev()

double kcenon::monitoring::online_statistics::stddev ( ) const
inline

Get running standard deviation.

Definition at line 115 of file stream_aggregator.h.

115 {
116 return std::sqrt(variance());
117 }
double variance() const
Get running variance (sample variance)

References variance().

Referenced by kcenon::monitoring::stream_aggregator::add_observation(), and kcenon::monitoring::stream_aggregator::stddev().

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

◆ sum()

double kcenon::monitoring::online_statistics::sum ( ) const
inline

Get sum of all values.

Definition at line 138 of file stream_aggregator.h.

138 {
139 std::shared_lock<std::shared_mutex> lock(mutex_);
140 return sum_;
141 }

References mutex_, and sum_.

◆ variance()

double kcenon::monitoring::online_statistics::variance ( ) const
inline

Get running variance (sample variance)

Definition at line 104 of file stream_aggregator.h.

104 {
105 std::shared_lock<std::shared_mutex> lock(mutex_);
106 if (count_ < 2) {
107 return 0.0;
108 }
109 return m2_ / static_cast<double>(count_ - 1);
110 }

References count_, m2_, and mutex_.

Referenced by stddev(), TEST_F(), and kcenon::monitoring::stream_aggregator::variance().

Here is the caller graph for this function:

Member Data Documentation

◆ count_

size_t kcenon::monitoring::online_statistics::count_ = 0
private

Definition at line 178 of file stream_aggregator.h.

Referenced by add_value(), count(), get_statistics(), reset(), and variance().

◆ m2_

double kcenon::monitoring::online_statistics::m2_ = 0.0
private

Definition at line 180 of file stream_aggregator.h.

Referenced by add_value(), get_statistics(), reset(), and variance().

◆ max_value_

double kcenon::monitoring::online_statistics::max_value_ = 0.0
private

Definition at line 183 of file stream_aggregator.h.

Referenced by add_value(), get_statistics(), max(), and reset().

◆ mean_

double kcenon::monitoring::online_statistics::mean_ = 0.0
private

Definition at line 179 of file stream_aggregator.h.

Referenced by add_value(), get_statistics(), mean(), and reset().

◆ min_value_

double kcenon::monitoring::online_statistics::min_value_ = 0.0
private

Definition at line 182 of file stream_aggregator.h.

Referenced by add_value(), get_statistics(), min(), and reset().

◆ mutex_

std::shared_mutex kcenon::monitoring::online_statistics::mutex_
mutableprivate

Definition at line 177 of file stream_aggregator.h.

Referenced by add_value(), count(), get_statistics(), max(), mean(), min(), reset(), sum(), and variance().

◆ sum_

double kcenon::monitoring::online_statistics::sum_ = 0.0
private

Definition at line 181 of file stream_aggregator.h.

Referenced by add_value(), get_statistics(), reset(), and sum().


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