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

Combines multiple triggers with logical operations. More...

#include <alert_triggers.h>

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

Public Member Functions

 composite_trigger (composite_operation op, std::vector< std::shared_ptr< alert_trigger > > triggers)
 Construct a composite trigger.
 
bool evaluate (double value) const override
 Evaluate with a single value (applies to all triggers)
 
bool evaluate_multi (const std::vector< double > &values) const
 Evaluate with multiple values (one per trigger)
 
std::string type_name () const override
 Get trigger type name.
 
std::string description () const override
 Get human-readable description.
 
const std::vector< std::shared_ptr< alert_trigger > > & triggers () const
 Get child triggers.
 
- Public Member Functions inherited from kcenon::monitoring::alert_trigger
virtual ~alert_trigger ()=default
 

Static Public Member Functions

static std::shared_ptr< composite_triggerall_of (std::vector< std::shared_ptr< alert_trigger > > triggers)
 Create AND composite.
 
static std::shared_ptr< composite_triggerany_of (std::vector< std::shared_ptr< alert_trigger > > triggers)
 Create OR composite.
 
static std::shared_ptr< composite_triggerinvert (std::shared_ptr< alert_trigger > trigger)
 Create NOT composite.
 

Private Attributes

composite_operation operation_
 
std::vector< std::shared_ptr< alert_trigger > > triggers_
 

Detailed Description

Combines multiple triggers with logical operations.

Allows building complex alert conditions by combining simpler triggers using AND, OR, XOR, and NOT operations.

Definition at line 528 of file alert_triggers.h.

Constructor & Destructor Documentation

◆ composite_trigger()

kcenon::monitoring::composite_trigger::composite_trigger ( composite_operation op,
std::vector< std::shared_ptr< alert_trigger > > triggers )
inline

Construct a composite trigger.

Parameters
opLogical operation
triggersChild triggers
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 535 of file alert_triggers.h.

537 : operation_(op)
538 , triggers_(std::move(triggers)) {}
const std::vector< std::shared_ptr< alert_trigger > > & triggers() const
Get child triggers.
std::vector< std::shared_ptr< alert_trigger > > triggers_

Member Function Documentation

◆ all_of()

static std::shared_ptr< composite_trigger > kcenon::monitoring::composite_trigger::all_of ( std::vector< std::shared_ptr< alert_trigger > > triggers)
inlinestatic

Create AND composite.

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

Definition at line 619 of file alert_triggers.h.

620 {
621 return std::make_shared<composite_trigger>(composite_operation::AND,
622 std::move(triggers));
623 }

References kcenon::monitoring::AND, and triggers().

Referenced by main(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), and TEST_F().

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

◆ any_of()

static std::shared_ptr< composite_trigger > kcenon::monitoring::composite_trigger::any_of ( std::vector< std::shared_ptr< alert_trigger > > triggers)
inlinestatic

Create OR composite.

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

Definition at line 628 of file alert_triggers.h.

629 {
630 return std::make_shared<composite_trigger>(composite_operation::OR,
631 std::move(triggers));
632 }

References kcenon::monitoring::OR, and triggers().

Referenced by main(), and TEST_F().

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

◆ description()

std::string kcenon::monitoring::composite_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 588 of file alert_triggers.h.

588 {
589 std::string op_str;
590 switch (operation_) {
591 case composite_operation::AND: op_str = " AND "; break;
592 case composite_operation::OR: op_str = " OR "; break;
593 case composite_operation::XOR: op_str = " XOR "; break;
594 case composite_operation::NOT: return "NOT (" + triggers_.front()->description() + ")";
595 }
596
597 std::string result = "(";
598 for (size_t i = 0; i < triggers_.size(); ++i) {
599 if (i > 0) {
600 result += op_str;
601 }
602 result += triggers_[i]->description();
603 }
604 result += ")";
605 return result;
606 }
@ NOT
Invert single trigger (uses first trigger only)
@ XOR
Exactly one trigger fires.

References kcenon::monitoring::AND, kcenon::monitoring::NOT, operation_, kcenon::monitoring::OR, triggers_, and kcenon::monitoring::XOR.

◆ evaluate()

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

Evaluate with a single value (applies to all triggers)

Implements kcenon::monitoring::alert_trigger.

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

Definition at line 543 of file alert_triggers.h.

543 {
544 std::vector<double> values(triggers_.size(), value);
545 return evaluate_multi(values);
546 }
bool evaluate_multi(const std::vector< double > &values) const
Evaluate with multiple values (one per trigger)

References evaluate_multi(), and triggers_.

Referenced by evaluate_multi().

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

◆ evaluate_multi()

bool kcenon::monitoring::composite_trigger::evaluate_multi ( const std::vector< double > & values) const
inline

Evaluate with multiple values (one per trigger)

Parameters
valuesValues for each trigger in order
Returns
True if composite condition is met
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_triggers.h.

Definition at line 553 of file alert_triggers.h.

553 {
554 if (triggers_.empty()) {
555 return false;
556 }
557
558 std::vector<bool> results;
559 results.reserve(triggers_.size());
560
561 for (size_t i = 0; i < triggers_.size(); ++i) {
562 double val = (i < values.size()) ? values[i] : values.back();
563 results.push_back(triggers_[i]->evaluate(val));
564 }
565
566 switch (operation_) {
568 return std::all_of(results.begin(), results.end(),
569 [](bool b) { return b; });
571 return std::any_of(results.begin(), results.end(),
572 [](bool b) { return b; });
574 size_t count = std::count(results.begin(), results.end(), true);
575 return count == 1;
576 }
578 return !results.front();
579 default:
580 return false;
581 }
582 }
bool evaluate(double value) const override
Evaluate with a single value (applies to all triggers)

References kcenon::monitoring::AND, evaluate(), kcenon::monitoring::NOT, operation_, kcenon::monitoring::OR, triggers_, and kcenon::monitoring::XOR.

Referenced by evaluate().

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

◆ invert()

static std::shared_ptr< composite_trigger > kcenon::monitoring::composite_trigger::invert ( std::shared_ptr< alert_trigger > trigger)
inlinestatic

Create NOT composite.

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

Definition at line 637 of file alert_triggers.h.

638 {
639 return std::make_shared<composite_trigger>(composite_operation::NOT,
640 std::vector<std::shared_ptr<alert_trigger>>{std::move(trigger)});
641 }

References kcenon::monitoring::NOT.

Referenced by main(), TEST_F(), and TEST_F().

Here is the caller graph for this function:

◆ triggers()

const std::vector< std::shared_ptr< alert_trigger > > & kcenon::monitoring::composite_trigger::triggers ( ) const
inline

Get child triggers.

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

Definition at line 611 of file alert_triggers.h.

611 {
612 return triggers_;
613 }

References triggers_.

Referenced by all_of(), and any_of().

Here is the caller graph for this function:

◆ type_name()

std::string kcenon::monitoring::composite_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 584 of file alert_triggers.h.

584 {
585 return "composite";
586 }

Member Data Documentation

◆ operation_

composite_operation kcenon::monitoring::composite_trigger::operation_
private

◆ triggers_

std::vector<std::shared_ptr<alert_trigger> > kcenon::monitoring::composite_trigger::triggers_
private

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