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

Trigger based on statistical anomaly detection. More...

#include <alert_triggers.h>

Inheritance diagram for kcenon::monitoring::anomaly_trigger:
Inheritance graph
Collaboration diagram for kcenon::monitoring::anomaly_trigger:
Collaboration graph

Public Member Functions

 anomaly_trigger (double sensitivity=3.0, size_t window_size=100, size_t min_samples=10)
 Construct an anomaly trigger.
 
bool evaluate (double value) const override
 Evaluate the trigger condition.
 
std::string type_name () const override
 Get trigger type name.
 
std::string description () const override
 Get human-readable description.
 
double current_mean () const
 Get current mean of historical values.
 
double current_stddev () const
 Get current standard deviation.
 
void reset ()
 Clear historical data.
 
- Public Member Functions inherited from kcenon::monitoring::alert_trigger
virtual ~alert_trigger ()=default
 

Private Member Functions

double mean () const
 
double standard_deviation (double mean_val) const
 

Private Attributes

double sensitivity_
 
size_t window_size_
 
size_t min_samples_
 
std::mutex mutex_
 
std::deque< double > history_
 

Detailed Description

Trigger based on statistical anomaly detection.

Uses statistical methods to detect values that deviate significantly from normal behavior. Maintains a sliding window of historical values and triggers when the current value exceeds a configurable number of standard deviations from the mean.

Definition at line 392 of file alert_triggers.h.

Constructor & Destructor Documentation

◆ anomaly_trigger()

kcenon::monitoring::anomaly_trigger::anomaly_trigger ( double sensitivity = 3.0,
size_t window_size = 100,
size_t min_samples = 10 )
inlineexplicit

Construct an anomaly trigger.

Parameters
sensitivityNumber of standard deviations for anomaly
window_sizeNumber of samples for baseline calculation
min_samplesMinimum samples before detection starts
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 400 of file alert_triggers.h.

Member Function Documentation

◆ current_mean()

double kcenon::monitoring::anomaly_trigger::current_mean ( ) const
inline

Get current mean of historical values.

Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 447 of file alert_triggers.h.

447 {
448 std::lock_guard<std::mutex> lock(mutex_);
449 return mean();
450 }

References mean(), and mutex_.

Here is the call graph for this function:

◆ current_stddev()

double kcenon::monitoring::anomaly_trigger::current_stddev ( ) const
inline

Get current standard deviation.

Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 455 of file alert_triggers.h.

455 {
456 std::lock_guard<std::mutex> lock(mutex_);
457 return standard_deviation(mean());
458 }
double standard_deviation(double mean_val) const

References mean(), mutex_, and standard_deviation().

Here is the call graph for this function:

◆ description()

std::string kcenon::monitoring::anomaly_trigger::description ( ) const
inlineoverridevirtual

Get human-readable description.

Returns
Description string

Implements kcenon::monitoring::alert_trigger.

Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 440 of file alert_triggers.h.

440 {
441 return "value > " + std::to_string(sensitivity_) + " std devs from mean";
442 }

References sensitivity_.

◆ evaluate()

bool kcenon::monitoring::anomaly_trigger::evaluate ( double value) const
inlineoverridevirtual

Evaluate the trigger condition.

Parameters
valueCurrent metric value
Returns
True if trigger condition is met

Implements kcenon::monitoring::alert_trigger.

Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 407 of file alert_triggers.h.

407 {
408 std::lock_guard<std::mutex> lock(mutex_);
409
410 // Add to history
411 if (history_.size() >= window_size_) {
412 history_.pop_front();
413 }
414 history_.push_back(value);
415
416 // Need minimum samples for statistics
417 if (history_.size() < min_samples_) {
418 return false;
419 }
420
421 // Calculate statistics
422 double mean_val = mean();
423 double stddev = standard_deviation(mean_val);
424
425 // Avoid division by zero or very small stddev
426 if (stddev < 1e-10) {
427 return false;
428 }
429
430 // Calculate z-score
431 double z_score = std::abs(value - mean_val) / stddev;
432
433 return z_score > sensitivity_;
434 }

References history_, mean(), min_samples_, mutex_, sensitivity_, standard_deviation(), and window_size_.

Here is the call graph for this function:

◆ mean()

double kcenon::monitoring::anomaly_trigger::mean ( ) const
inlineprivate
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 469 of file alert_triggers.h.

469 {
470 if (history_.empty()) {
471 return 0.0;
472 }
473 double sum = std::accumulate(history_.begin(), history_.end(), 0.0);
474 return sum / static_cast<double>(history_.size());
475 }

References history_.

Referenced by current_mean(), current_stddev(), and evaluate().

Here is the caller graph for this function:

◆ reset()

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

Clear historical data.

Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 463 of file alert_triggers.h.

463 {
464 std::lock_guard<std::mutex> lock(mutex_);
465 history_.clear();
466 }

References history_, and mutex_.

◆ standard_deviation()

double kcenon::monitoring::anomaly_trigger::standard_deviation ( double mean_val) const
inlineprivate
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 477 of file alert_triggers.h.

477 {
478 if (history_.size() < 2) {
479 return 0.0;
480 }
481 double sq_sum = 0.0;
482 for (double val : history_) {
483 double diff = val - mean_val;
484 sq_sum += diff * diff;
485 }
486 return std::sqrt(sq_sum / static_cast<double>(history_.size() - 1));
487 }

References history_.

Referenced by current_stddev(), and evaluate().

Here is the caller graph for this function:

◆ type_name()

std::string kcenon::monitoring::anomaly_trigger::type_name ( ) const
inlineoverridevirtual

Get trigger type name.

Returns
Type name string

Implements kcenon::monitoring::alert_trigger.

Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 436 of file alert_triggers.h.

436 {
437 return "anomaly";
438 }

Member Data Documentation

◆ history_

std::deque<double> kcenon::monitoring::anomaly_trigger::history_
mutableprivate

◆ min_samples_

size_t kcenon::monitoring::anomaly_trigger::min_samples_
private

◆ mutex_

std::mutex kcenon::monitoring::anomaly_trigger::mutex_
mutableprivate

◆ sensitivity_

double kcenon::monitoring::anomaly_trigger::sensitivity_
private

◆ window_size_

size_t kcenon::monitoring::anomaly_trigger::window_size_
private

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