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

Sends alerts to multiple notifiers. More...

#include <alert_notifiers.h>

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

Public Member Functions

 multi_notifier (std::string notifier_name)
 Construct with name.
 
void add_notifier (std::shared_ptr< alert_notifier > notifier)
 Add a child notifier.
 
std::string name () const override
 Get notifier name.
 
common::VoidResult notify (const alert &a) override
 Send a notification for an alert.
 
common::VoidResult notify_group (const alert_group &group) override
 Send a notification for an alert group.
 
bool is_ready () const override
 Check if notifier is ready.
 
- Public Member Functions inherited from kcenon::monitoring::alert_notifier
virtual ~alert_notifier ()=default
 

Static Private Member Functions

static std::string join_strings (const std::vector< std::string > &strings, const std::string &delimiter)
 

Private Attributes

std::string name_
 
std::mutex mutex_
 
std::vector< std::shared_ptr< alert_notifier > > notifiers_
 

Detailed Description

Sends alerts to multiple notifiers.

Wraps multiple notifiers and sends alerts to all of them. Collects results from all notifiers.

Definition at line 365 of file alert_notifiers.h.

Constructor & Destructor Documentation

◆ multi_notifier()

kcenon::monitoring::multi_notifier::multi_notifier ( std::string notifier_name)
inlineexplicit

Construct with name.

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

Definition at line 370 of file alert_notifiers.h.

371 : name_(std::move(notifier_name)) {}

Member Function Documentation

◆ add_notifier()

void kcenon::monitoring::multi_notifier::add_notifier ( std::shared_ptr< alert_notifier > notifier)
inline

Add a child notifier.

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

Definition at line 376 of file alert_notifiers.h.

376 {
377 std::lock_guard<std::mutex> lock(mutex_);
378 notifiers_.push_back(std::move(notifier));
379 }
std::vector< std::shared_ptr< alert_notifier > > notifiers_

References mutex_, and notifiers_.

◆ is_ready()

bool kcenon::monitoring::multi_notifier::is_ready ( ) const
inlineoverridevirtual

Check if notifier is ready.

Returns
True if ready to send notifications

Implements kcenon::monitoring::alert_notifier.

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

Definition at line 423 of file alert_notifiers.h.

423 {
424 std::lock_guard<std::mutex> lock(mutex_);
425 return !notifiers_.empty();
426 }

References mutex_, and notifiers_.

◆ join_strings()

static std::string kcenon::monitoring::multi_notifier::join_strings ( const std::vector< std::string > & strings,
const std::string & delimiter )
inlinestaticprivate
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_notifiers.h.

Definition at line 429 of file alert_notifiers.h.

430 {
431 std::ostringstream oss;
432 for (size_t i = 0; i < strings.size(); ++i) {
433 if (i > 0) oss << delimiter;
434 oss << strings[i];
435 }
436 return oss.str();
437 }

Referenced by notify(), and notify_group().

Here is the caller graph for this function:

◆ name()

std::string kcenon::monitoring::multi_notifier::name ( ) const
inlineoverridevirtual

Get notifier name.

Returns
Notifier name

Implements kcenon::monitoring::alert_notifier.

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

Definition at line 381 of file alert_notifiers.h.

381{ return name_; }

References name_.

◆ notify()

common::VoidResult kcenon::monitoring::multi_notifier::notify ( const alert & a)
inlineoverridevirtual

Send a notification for an alert.

Parameters
aAlert to notify about
Returns
Result indicating success or failure

Implements kcenon::monitoring::alert_notifier.

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

Definition at line 383 of file alert_notifiers.h.

383 {
384 std::lock_guard<std::mutex> lock(mutex_);
385
386 std::vector<std::string> failures;
387 for (const auto& notifier : notifiers_) {
388 if (notifier && notifier->is_ready()) {
389 auto result = notifier->notify(a);
390 if (!result.is_ok()) {
391 failures.push_back(notifier->name());
392 }
393 }
394 }
395
396 if (!failures.empty()) {
397 return common::VoidResult::err(static_cast<int>(monitoring_error_code::operation_failed),
398 "Failed notifiers: " + join_strings(failures, ", "));
399 }
400 return common::ok();
401 }
static std::string join_strings(const std::vector< std::string > &strings, const std::string &delimiter)

References join_strings(), mutex_, notifiers_, and kcenon::monitoring::operation_failed.

Here is the call graph for this function:

◆ notify_group()

common::VoidResult kcenon::monitoring::multi_notifier::notify_group ( const alert_group & group)
inlineoverridevirtual

Send a notification for an alert group.

Parameters
groupAlert group to notify about
Returns
Result indicating success or failure

Implements kcenon::monitoring::alert_notifier.

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

Definition at line 403 of file alert_notifiers.h.

403 {
404 std::lock_guard<std::mutex> lock(mutex_);
405
406 std::vector<std::string> failures;
407 for (const auto& notifier : notifiers_) {
408 if (notifier && notifier->is_ready()) {
409 auto result = notifier->notify_group(group);
410 if (!result.is_ok()) {
411 failures.push_back(notifier->name());
412 }
413 }
414 }
415
416 if (!failures.empty()) {
417 return common::VoidResult::err(static_cast<int>(monitoring_error_code::operation_failed),
418 "Failed notifiers: " + join_strings(failures, ", "));
419 }
420 return common::ok();
421 }

References join_strings(), mutex_, notifiers_, and kcenon::monitoring::operation_failed.

Here is the call graph for this function:

Member Data Documentation

◆ mutex_

std::mutex kcenon::monitoring::multi_notifier::mutex_
mutableprivate

◆ name_

std::string kcenon::monitoring::multi_notifier::name_
private

◆ notifiers_

std::vector<std::shared_ptr<alert_notifier> > kcenon::monitoring::multi_notifier::notifiers_
private

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