20namespace kcenon {
namespace monitoring {
80 template<
typename EventType,
typename Handler>
83 auto safe_handler = [
this, h = std::forward<Handler>(handler),
id =
next_id_++]
84 (
const EventType& event) {
87 }
catch (
const std::exception& e) {
94 return bus_->subscribe<EventType>(std::move(safe_handler));
103 template<
typename EventType>
106 bus_->publish(event, priority);
108 }
catch (
const std::exception& e) {
113 std::string(
"Publish failed: ") + e.what(),
115 std::chrono::steady_clock::now()
128 "Publish failed: Unknown exception",
130 std::chrono::steady_clock::now()
192 template<
typename RecoveryHandler>
210 std::shared_ptr<interface_event_bus>
get_bus()
const {
222 std::type_index event_type,
223 const std::string& error_msg) {
233 std::chrono::steady_clock::now()
263 const std::string& error_msg) {
269 std::chrono::steady_clock::now()
281 std::shared_ptr<interface_event_bus>
bus_;
Priority levels for event processing.
Thread-safe event bus implementation.
Event dispatcher with exception handling and error recovery.
bool publish_safe(const EventType &event, event_priority priority=event_priority::normal)
Publish event with error recovery.
uint64_t subscribe_safe(Handler &&handler, event_priority priority=event_priority::normal)
Subscribe to events with automatic exception handling.
std::atomic< uint64_t > total_exceptions_
void process_dead_letters(RecoveryHandler &&handler)
Process dead letter queue with recovery handler.
std::vector< handler_error_info > recent_errors_
void handle_exception(uint64_t handler_id, std::type_index event_type, const std::string &error_msg)
void set_circuit_breaker_threshold(size_t threshold)
Set circuit breaker threshold.
void set_error_callback(error_callback callback)
Set callback for handler errors.
std::shared_ptr< interface_event_bus > get_bus() const
Get underlying event bus.
std::function< void(const handler_error_info &)> error_callback
safe_event_dispatcher(std::shared_ptr< interface_event_bus > bus=nullptr)
void add_to_dead_letter_queue(std::type_index event_type, const std::string &error_msg)
std::vector< handler_error_info > get_handler_errors() const
Get recent handler errors.
std::atomic< uint64_t > next_id_
std::vector< dead_letter_entry > dead_letter_queue_
error_callback error_callback_
std::unordered_map< uint64_t, size_t > failed_handler_counts_
uint64_t get_total_exceptions() const
Get total exception count.
std::shared_ptr< interface_event_bus > bus_
size_t get_dead_letter_queue_size() const
Get dead letter queue size.
size_t circuit_breaker_threshold_
void clear_errors()
Clear error history.
Lightweight event bus implementation for monitoring system.
@ info
Informational, no action required.
Information about handler execution errors.
std::string error_message
std::chrono::steady_clock::time_point timestamp
std::type_index event_type
std::string error_message
std::chrono::steady_clock::time_point timestamp
std::type_index event_type