16#include <condition_variable>
22#include <unordered_map>
175 common::VoidResult
add_rule(std::shared_ptr<alert_rule> rule);
189 std::shared_ptr<alert_rule>
get_rule(
const std::string& rule_name)
const;
195 std::vector<std::shared_ptr<alert_rule>>
get_rules()
const;
219 common::VoidResult
process_metrics(
const std::unordered_map<std::string, double>& metrics);
232 std::optional<alert>
get_alert(
const std::string& fingerprint)
const;
277 common::VoidResult
add_notifier(std::shared_ptr<alert_notifier> notifier);
344 const std::shared_ptr<alert_rule>& rule);
367 std::unordered_map<std::string, std::shared_ptr<alert_rule>>
rules_;
372 std::unordered_map<std::string, alert>
alerts_;
395 std::condition_variable
cv_;
417 virtual std::string
name()
const = 0;
453 :
name_(std::move(notifier_name)) {}
505 :
name_(std::move(notifier_name))
529 for (
const auto& a : group.
alerts) {
531 if (!result.is_ok()) {
Alert rule configuration and evaluation.
Core alert data structures for the monitoring system.
Central coordinator for the alert pipeline.
common::VoidResult remove_notifier(const std::string ¬ifier_name)
Remove a notifier.
std::vector< std::shared_ptr< alert_notifier > > notifiers_
void set_event_bus(std::shared_ptr< interface_event_bus > event_bus)
Set event bus for publishing alert events.
bool is_running() const
Check if manager is running.
std::unordered_map< uint64_t, alert_silence > silences_
common::VoidResult remove_rule(const std::string &rule_name)
Remove an alert rule.
common::VoidResult stop()
Stop the alert manager.
std::optional< alert > get_alert(const std::string &fingerprint) const
Get alert by fingerprint.
std::thread evaluation_thread_
std::atomic< bool > running_
common::VoidResult add_rule(std::shared_ptr< alert_rule > rule)
Add an alert rule.
std::mutex notifiers_mutex_
common::VoidResult delete_silence(uint64_t silence_id)
Delete a silence.
const alert_manager_config & config() const
Get configuration.
common::VoidResult process_metric(const std::string &metric_name, double value)
Process a metric value.
std::shared_ptr< interface_event_bus > event_bus_
std::mutex provider_mutex_
alert_manager(alert_manager &&)=delete
common::VoidResult add_rule_group(std::shared_ptr< alert_rule_group > group)
Add a rule group.
common::VoidResult start()
Start the alert manager.
~alert_manager()
Destructor.
common::Result< uint64_t > create_silence(const alert_silence &silence)
Create a silence.
std::unordered_map< std::string, std::chrono::steady_clock::time_point > last_notification_times_
std::vector< alert > get_active_alerts() const
Get all active alerts.
void update_alert_state(const std::string &fingerprint, bool condition_met, double value, const std::shared_ptr< alert_rule > &rule)
Update alert state.
alert_manager()
Default constructor.
void send_notifications(const alert &a)
Send notifications for an alert.
std::unordered_map< std::string, std::shared_ptr< alert_rule > > rules_
std::condition_variable cv_
alert_manager_config config_
std::unordered_map< std::string, alert > alerts_
std::function< std::optional< double >(const std::string &)> metric_provider_func
std::mutex silences_mutex_
metric_provider_func metric_provider_
alert_manager_metrics get_metrics() const
Get manager metrics.
common::VoidResult process_metrics(const std::unordered_map< std::string, double > &metrics)
Process a batch of metrics.
std::vector< std::shared_ptr< alert_notifier > > get_notifiers() const
Get all notifiers.
void cleanup_resolved_alerts()
Clean up resolved alerts.
alert_manager(const alert_manager &)=delete
void set_metric_provider(metric_provider_func provider)
Set the metric provider function.
std::shared_ptr< alert_rule > get_rule(const std::string &rule_name) const
Get a rule by name.
alert_manager & operator=(alert_manager &&)=delete
common::VoidResult resolve_alert(const std::string &fingerprint)
Resolve an alert manually.
alert_manager_metrics metrics_
void cleanup_silences()
Clean up expired silences.
alert_manager & operator=(const alert_manager &)=delete
void evaluate_rule(const std::shared_ptr< alert_rule > &rule, double value)
Evaluate a single rule.
common::VoidResult add_notifier(std::shared_ptr< alert_notifier > notifier)
Add a notifier.
std::vector< std::shared_ptr< alert_rule_group > > rule_groups_
std::vector< std::shared_ptr< alert_rule > > get_rules() const
Get all rules.
void evaluation_loop()
Main evaluation loop.
alert_manager(const alert_manager_config &config)
Construct with configuration.
bool is_silenced(const alert &a) const
Check if an alert is silenced.
std::vector< alert_silence > get_silences() const
Get all active silences.
Base class for alert notification handlers.
virtual std::string name() const =0
Get notifier name.
virtual common::VoidResult notify(const alert &a)=0
Send a notification for an alert.
virtual bool is_ready() const =0
Check if notifier is ready.
virtual ~alert_notifier()=default
virtual common::VoidResult notify_group(const alert_group &group)=0
Send a notification for an alert group.
Notifier that invokes a callback function.
bool is_ready() const override
Check if the callback notifier is ready.
callback_notifier(std::string notifier_name, callback_func callback, group_callback_func group_callback=nullptr)
Construct callback notifier.
common::VoidResult notify(const alert &a) override
Send a notification for an alert.
std::string name() const override
Get the name of this callback notifier.
std::function< void(const alert_group &)> group_callback_func
std::function< void(const alert &)> callback_func
group_callback_func group_callback_
common::VoidResult notify_group(const alert_group &group) override
Send a notification for an alert group.
Thread-safe event bus implementation.
Simple notifier that logs alerts.
bool is_ready() const override
Check if the log notifier is ready.
common::VoidResult notify(const alert &a) override
Log an alert notification.
log_notifier(std::string notifier_name="log_notifier")
Construct log notifier.
std::string name() const override
Get the name of this log notifier.
common::VoidResult notify_group(const alert_group &group) override
Log a grouped alert notification.
Event bus interface for decoupled component communication.
Result pattern type definitions for monitoring system.
Group of related alerts for batch notification.
std::vector< alert > alerts
Alerts in this group.
Configuration for the alert manager.
std::chrono::milliseconds resolve_timeout
Auto-resolve timeout.
std::chrono::milliseconds default_evaluation_interval
Default eval interval.
size_t max_alerts_per_rule
Max alerts per rule.
bool validate() const
Validate configuration.
std::chrono::milliseconds group_wait
Wait time before group send.
bool enable_grouping
Enable alert grouping.
size_t max_silences
Max active silences.
std::chrono::milliseconds default_repeat_interval
Default repeat interval.
std::chrono::milliseconds group_interval
Group batch interval.
Metrics for alert manager operations.
alert_manager_metrics()=default
std::atomic< uint64_t > alerts_resolved
std::atomic< uint64_t > alerts_suppressed
std::atomic< uint64_t > notifications_sent
alert_manager_metrics(const alert_manager_metrics &other)
std::atomic< uint64_t > alerts_created
std::atomic< uint64_t > notifications_failed
std::atomic< uint64_t > rules_evaluated
Silence configuration to suppress alerts.
Core alert data structure.
Extended error information with context.