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

Tracks cooldown periods for alert notifications. More...

#include <alert_pipeline.h>

Collaboration diagram for kcenon::monitoring::cooldown_tracker:
Collaboration graph

Public Member Functions

 cooldown_tracker (std::chrono::milliseconds default_cooldown)
 Set default cooldown period.
 
bool is_in_cooldown (const std::string &fingerprint) const
 Check if alert is in cooldown.
 
void record_notification (const std::string &fingerprint)
 Record notification time.
 
void set_cooldown (const std::string &fingerprint, std::chrono::milliseconds cooldown)
 Set custom cooldown for specific alert.
 
std::chrono::milliseconds remaining_cooldown (const std::string &fingerprint) const
 Get time remaining in cooldown.
 
void clear_cooldown (const std::string &fingerprint)
 Clear cooldown state for an alert.
 
void reset ()
 Clear all cooldown state.
 

Private Member Functions

std::chrono::milliseconds get_cooldown_for (const std::string &fingerprint) const
 

Private Attributes

std::chrono::milliseconds default_cooldown_
 
std::mutex mutex_
 
std::unordered_map< std::string, std::chrono::steady_clock::time_point > last_notification_
 
std::unordered_map< std::string, std::chrono::milliseconds > custom_cooldowns_
 

Detailed Description

Tracks cooldown periods for alert notifications.

Prevents notification spam by enforcing minimum intervals between notifications for the same alert.

Examples
alert_pipeline_example.cpp.

Definition at line 403 of file alert_pipeline.h.

Constructor & Destructor Documentation

◆ cooldown_tracker()

kcenon::monitoring::cooldown_tracker::cooldown_tracker ( std::chrono::milliseconds default_cooldown)
inlineexplicit

Set default cooldown period.

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

Definition at line 408 of file alert_pipeline.h.

409 : default_cooldown_(default_cooldown) {}
std::chrono::milliseconds default_cooldown_

Member Function Documentation

◆ clear_cooldown()

void kcenon::monitoring::cooldown_tracker::clear_cooldown ( const std::string & fingerprint)
inline

Clear cooldown state for an alert.

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

Definition at line 476 of file alert_pipeline.h.

476 {
477 std::lock_guard<std::mutex> lock(mutex_);
478 last_notification_.erase(fingerprint);
479 }
std::unordered_map< std::string, std::chrono::steady_clock::time_point > last_notification_

References last_notification_, and mutex_.

◆ get_cooldown_for()

std::chrono::milliseconds kcenon::monitoring::cooldown_tracker::get_cooldown_for ( const std::string & fingerprint) const
inlineprivate
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_pipeline.h.

Definition at line 490 of file alert_pipeline.h.

490 {
491 auto it = custom_cooldowns_.find(fingerprint);
492 if (it != custom_cooldowns_.end()) {
493 return it->second;
494 }
495 return default_cooldown_;
496 }
std::unordered_map< std::string, std::chrono::milliseconds > custom_cooldowns_

References custom_cooldowns_, and default_cooldown_.

Referenced by is_in_cooldown(), and remaining_cooldown().

Here is the caller graph for this function:

◆ is_in_cooldown()

bool kcenon::monitoring::cooldown_tracker::is_in_cooldown ( const std::string & fingerprint) const
inline

Check if alert is in cooldown.

Parameters
fingerprintAlert fingerprint
Returns
True if in cooldown
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_pipeline.h.

Definition at line 416 of file alert_pipeline.h.

416 {
417 std::lock_guard<std::mutex> lock(mutex_);
418
419 auto it = last_notification_.find(fingerprint);
420 if (it == last_notification_.end()) {
421 return false;
422 }
423
424 auto now = std::chrono::steady_clock::now();
425 auto cooldown = get_cooldown_for(fingerprint);
426 return (now - it->second) < cooldown;
427 }
std::chrono::milliseconds get_cooldown_for(const std::string &fingerprint) const

References get_cooldown_for(), last_notification_, and mutex_.

Referenced by main().

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

◆ record_notification()

void kcenon::monitoring::cooldown_tracker::record_notification ( const std::string & fingerprint)
inline

Record notification time.

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

Definition at line 433 of file alert_pipeline.h.

433 {
434 std::lock_guard<std::mutex> lock(mutex_);
435 last_notification_[fingerprint] = std::chrono::steady_clock::now();
436 }

References last_notification_, and mutex_.

Referenced by main().

Here is the caller graph for this function:

◆ remaining_cooldown()

std::chrono::milliseconds kcenon::monitoring::cooldown_tracker::remaining_cooldown ( const std::string & fingerprint) const
inline

Get time remaining in cooldown.

Parameters
fingerprintAlert fingerprint
Returns
Remaining cooldown time, or zero if not in cooldown
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_pipeline.h.

Definition at line 454 of file alert_pipeline.h.

454 {
455 std::lock_guard<std::mutex> lock(mutex_);
456
457 auto it = last_notification_.find(fingerprint);
458 if (it == last_notification_.end()) {
459 return std::chrono::milliseconds::zero();
460 }
461
462 auto now = std::chrono::steady_clock::now();
463 auto cooldown = get_cooldown_for(fingerprint);
464 auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
465 now - it->second);
466
467 if (elapsed >= cooldown) {
468 return std::chrono::milliseconds::zero();
469 }
470 return cooldown - elapsed;
471 }

References get_cooldown_for(), last_notification_, and mutex_.

Referenced by main().

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

◆ reset()

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

Clear all cooldown state.

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

Definition at line 484 of file alert_pipeline.h.

484 {
485 std::lock_guard<std::mutex> lock(mutex_);
486 last_notification_.clear();
487 }

References last_notification_, and mutex_.

Referenced by main().

Here is the caller graph for this function:

◆ set_cooldown()

void kcenon::monitoring::cooldown_tracker::set_cooldown ( const std::string & fingerprint,
std::chrono::milliseconds cooldown )
inline

Set custom cooldown for specific alert.

Parameters
fingerprintAlert fingerprint
cooldownCustom cooldown duration
Examples
/home/runner/work/monitoring_system/monitoring_system/include/kcenon/monitoring/alert/alert_pipeline.h.

Definition at line 443 of file alert_pipeline.h.

444 {
445 std::lock_guard<std::mutex> lock(mutex_);
446 custom_cooldowns_[fingerprint] = cooldown;
447 }

References custom_cooldowns_, and mutex_.

Referenced by main().

Here is the caller graph for this function:

Member Data Documentation

◆ custom_cooldowns_

std::unordered_map<std::string, std::chrono::milliseconds> kcenon::monitoring::cooldown_tracker::custom_cooldowns_
private

◆ default_cooldown_

std::chrono::milliseconds kcenon::monitoring::cooldown_tracker::default_cooldown_
private

◆ last_notification_

std::unordered_map<std::string, std::chrono::steady_clock::time_point> kcenon::monitoring::cooldown_tracker::last_notification_
private

◆ mutex_


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