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

Manages alert inhibition rules. More...

#include <alert_pipeline.h>

Collaboration diagram for kcenon::monitoring::alert_inhibitor:
Collaboration graph

Public Member Functions

void add_rule (const inhibition_rule &rule)
 Add an inhibition rule.
 
void remove_rule (const std::string &name)
 Remove an inhibition rule by name.
 
bool is_inhibited (const alert &target, const std::vector< alert > &active_alerts) const
 Check if an alert is inhibited by any active alerts.
 
std::vector< inhibition_ruleget_rules () const
 Get all rules.
 

Private Attributes

std::mutex mutex_
 
std::vector< inhibition_rulerules_
 

Detailed Description

Manages alert inhibition rules.

Alert inhibition prevents certain alerts from triggering when related, more important alerts are already firing.

Examples
alert_pipeline_example.cpp.

Definition at line 330 of file alert_pipeline.h.

Member Function Documentation

◆ add_rule()

void kcenon::monitoring::alert_inhibitor::add_rule ( const inhibition_rule & rule)
inline

Add an inhibition rule.

Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_pipeline.h, and alert_pipeline_example.cpp.

Definition at line 335 of file alert_pipeline.h.

335 {
336 std::lock_guard<std::mutex> lock(mutex_);
337 rules_.push_back(rule);
338 }
std::vector< inhibition_rule > rules_

References mutex_, and rules_.

Referenced by main().

Here is the caller graph for this function:

◆ get_rules()

std::vector< inhibition_rule > kcenon::monitoring::alert_inhibitor::get_rules ( ) const
inline

Get all rules.

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

Definition at line 386 of file alert_pipeline.h.

386 {
387 std::lock_guard<std::mutex> lock(mutex_);
388 return rules_;
389 }

References mutex_, and rules_.

◆ is_inhibited()

bool kcenon::monitoring::alert_inhibitor::is_inhibited ( const alert & target,
const std::vector< alert > & active_alerts ) const
inline

Check if an alert is inhibited by any active alerts.

Parameters
targetAlert to check
active_alertsCurrently firing alerts
Returns
True if alert should be inhibited
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_pipeline.h, and alert_pipeline_example.cpp.

Definition at line 358 of file alert_pipeline.h.

359 {
360 std::lock_guard<std::mutex> lock(mutex_);
361
362 for (const auto& rule : rules_) {
363 for (const auto& source : active_alerts) {
364 // Source must be firing
365 if (source.state != alert_state::firing) {
366 continue;
367 }
368
369 // Don't inhibit self
370 if (source.fingerprint() == target.fingerprint()) {
371 continue;
372 }
373
374 if (rule.should_inhibit(source, target)) {
375 return true;
376 }
377 }
378 }
379
380 return false;
381 }
@ firing
Alert is active and notifications sent.

References kcenon::monitoring::alert::fingerprint(), kcenon::monitoring::firing, mutex_, and rules_.

Referenced by main().

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

◆ remove_rule()

void kcenon::monitoring::alert_inhibitor::remove_rule ( const std::string & name)
inline

Remove an inhibition rule by name.

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

Definition at line 343 of file alert_pipeline.h.

343 {
344 std::lock_guard<std::mutex> lock(mutex_);
345 rules_.erase(
346 std::remove_if(rules_.begin(), rules_.end(),
347 [&name](const inhibition_rule& r) { return r.name == name; }),
348 rules_.end()
349 );
350 }

References mutex_, and rules_.

Member Data Documentation

◆ mutex_

std::mutex kcenon::monitoring::alert_inhibitor::mutex_
mutableprivate

◆ rules_

std::vector<inhibition_rule> kcenon::monitoring::alert_inhibitor::rules_
private

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