Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
observer_interface.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6
16#include <chrono>
17#include <memory>
18#include <string>
19#include <variant>
22
23namespace kcenon { namespace monitoring {
24
25// Forward declarations
26class metric_event;
27class system_event;
28class state_change_event;
29
52public:
53 metric_event(const std::string& source, const metric& data)
54 : source_(source), metric_data_(data), timestamp_(std::chrono::steady_clock::now()) {}
55
56 const std::string& source() const { return source_; }
57 const metric& data() const { return metric_data_; }
58 std::chrono::steady_clock::time_point timestamp() const { return timestamp_; }
59
60private:
61 std::string source_;
63 std::chrono::steady_clock::time_point timestamp_;
64};
65
91public:
100
101 system_event(event_type type, const std::string& component, const std::string& message)
103 timestamp_(std::chrono::steady_clock::now()) {}
104
105 event_type type() const { return type_; }
106 const std::string& component() const { return component_; }
107 const std::string& message() const { return message_; }
108 std::chrono::steady_clock::time_point timestamp() const { return timestamp_; }
109
110private:
112 std::string component_;
113 std::string message_;
114 std::chrono::steady_clock::time_point timestamp_;
115};
116
142public:
143 enum class state {
144 healthy,
145 degraded,
146 critical,
147 unknown
148 };
149
152 timestamp_(std::chrono::steady_clock::now()) {}
153
154 const std::string& component() const { return component_; }
155 state old_state() const { return old_state_; }
156 state new_state() const { return new_state_; }
157 std::chrono::steady_clock::time_point timestamp() const { return timestamp_; }
158
159private:
160 std::string component_;
163 std::chrono::steady_clock::time_point timestamp_;
164};
165
202public:
204
209 virtual void on_metric_collected(const metric_event& event) = 0;
210
215 virtual void on_event_occurred(const system_event& event) = 0;
216
221 virtual void on_system_state_changed(const state_change_event& event) = 0;
222};
223
262public:
263 virtual ~interface_observable() = default;
264
270 virtual common::VoidResult register_observer(std::shared_ptr<interface_monitoring_observer> observer) = 0;
271
277 virtual common::VoidResult unregister_observer(std::shared_ptr<interface_monitoring_observer> observer) = 0;
278
283 virtual void notify_metric(const metric_event& event) = 0;
284
289 virtual void notify_event(const system_event& event) = 0;
290
295 virtual void notify_state_change(const state_change_event& event) = 0;
296};
297
298} } // namespace kcenon::monitoring
Pure virtual interface for monitoring event observers.
virtual void on_event_occurred(const system_event &event)=0
Called when a system event occurs.
virtual void on_metric_collected(const metric_event &event)=0
Called when a metric is collected.
virtual void on_system_state_changed(const state_change_event &event)=0
Called when system state changes.
Interface for components that can be observed.
virtual common::VoidResult unregister_observer(std::shared_ptr< interface_monitoring_observer > observer)=0
Unregister an observer.
virtual void notify_metric(const metric_event &event)=0
Notify all observers of a metric event.
virtual void notify_state_change(const state_change_event &event)=0
Notify all observers of a state change.
virtual common::VoidResult register_observer(std::shared_ptr< interface_monitoring_observer > observer)=0
Register an observer for events.
virtual void notify_event(const system_event &event)=0
Notify all observers of a system event.
Event fired when a metric is collected.
const std::string & source() const
metric_event(const std::string &source, const metric &data)
std::chrono::steady_clock::time_point timestamp_
std::chrono::steady_clock::time_point timestamp() const
Event fired when system state changes.
std::chrono::steady_clock::time_point timestamp_
std::chrono::steady_clock::time_point timestamp() const
state_change_event(const std::string &component, state old_state, state new_state)
Generic system event for monitoring components.
const std::string & message() const
std::chrono::steady_clock::time_point timestamp_
std::chrono::steady_clock::time_point timestamp() const
const std::string & component() const
system_event(event_type type, const std::string &component, const std::string &message)
Adapter for metric types to support interface definitions.
Result pattern type definitions for monitoring system.
Basic metric structure for interface compatibility.