diff --git a/lib/icinga/apievents.cpp b/lib/icinga/apievents.cpp index 57760c598..226afc1ad 100644 --- a/lib/icinga/apievents.cpp +++ b/lib/icinga/apievents.cpp @@ -35,8 +35,9 @@ void ApiEvents::StaticInitialize() void ApiEvents::CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr, const MessageOrigin::Ptr& origin) { std::vector queues = EventQueue::GetQueuesForType("CheckResult"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::CheckResult)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'CheckResult'."); @@ -58,13 +59,16 @@ void ApiEvents::CheckResultHandler(const Checkable::Ptr& checkable, const CheckR for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::StateChangeHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr, StateType type, const MessageOrigin::Ptr& origin) { std::vector queues = EventQueue::GetQueuesForType("StateChange"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::StateChange)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'StateChange'."); @@ -88,6 +92,8 @@ void ApiEvents::StateChangeHandler(const Checkable::Ptr& checkable, const CheckR for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::NotificationSentToAllUsersHandler(const Notification::Ptr& notification, @@ -95,8 +101,9 @@ void ApiEvents::NotificationSentToAllUsersHandler(const Notification::Ptr& notif const CheckResult::Ptr& cr, const String& author, const String& text, const MessageOrigin::Ptr& origin) { std::vector queues = EventQueue::GetQueuesForType("Notification"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::Notification)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'Notification'."); @@ -133,13 +140,16 @@ void ApiEvents::NotificationSentToAllUsersHandler(const Notification::Ptr& notif for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::FlappingChangedHandler(const Checkable::Ptr& checkable, const MessageOrigin::Ptr& origin) { std::vector queues = EventQueue::GetQueuesForType("Flapping"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::Flapping)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'Flapping'."); @@ -166,6 +176,8 @@ void ApiEvents::FlappingChangedHandler(const Checkable::Ptr& checkable, const Me for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::AcknowledgementSetHandler(const Checkable::Ptr& checkable, @@ -173,8 +185,9 @@ void ApiEvents::AcknowledgementSetHandler(const Checkable::Ptr& checkable, bool notify, bool persistent, double expiry, const MessageOrigin::Ptr& origin) { std::vector queues = EventQueue::GetQueuesForType("AcknowledgementSet"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::AcknowledgementSet)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'AcknowledgementSet'."); @@ -204,13 +217,16 @@ void ApiEvents::AcknowledgementSetHandler(const Checkable::Ptr& checkable, for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::AcknowledgementClearedHandler(const Checkable::Ptr& checkable, const MessageOrigin::Ptr& origin) { std::vector queues = EventQueue::GetQueuesForType("AcknowledgementCleared"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::AcknowledgementCleared)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'AcknowledgementCleared'."); @@ -235,13 +251,16 @@ void ApiEvents::AcknowledgementClearedHandler(const Checkable::Ptr& checkable, c } result->Set("acknowledgement_type", AcknowledgementNone); + + inboxes.Push(std::move(result)); } void ApiEvents::CommentAddedHandler(const Comment::Ptr& comment) { std::vector queues = EventQueue::GetQueuesForType("CommentAdded"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::CommentAdded)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'CommentAdded'."); @@ -255,13 +274,16 @@ void ApiEvents::CommentAddedHandler(const Comment::Ptr& comment) for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::CommentRemovedHandler(const Comment::Ptr& comment) { std::vector queues = EventQueue::GetQueuesForType("CommentRemoved"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::CommentRemoved)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'CommentRemoved'."); @@ -275,13 +297,16 @@ void ApiEvents::CommentRemovedHandler(const Comment::Ptr& comment) for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::DowntimeAddedHandler(const Downtime::Ptr& downtime) { std::vector queues = EventQueue::GetQueuesForType("DowntimeAdded"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::DowntimeAdded)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'DowntimeAdded'."); @@ -295,13 +320,16 @@ void ApiEvents::DowntimeAddedHandler(const Downtime::Ptr& downtime) for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::DowntimeRemovedHandler(const Downtime::Ptr& downtime) { std::vector queues = EventQueue::GetQueuesForType("DowntimeRemoved"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::DowntimeRemoved)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'DowntimeRemoved'."); @@ -315,13 +343,16 @@ void ApiEvents::DowntimeRemovedHandler(const Downtime::Ptr& downtime) for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::DowntimeStartedHandler(const Downtime::Ptr& downtime) { std::vector queues = EventQueue::GetQueuesForType("DowntimeStarted"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::DowntimeStarted)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'DowntimeStarted'."); @@ -335,13 +366,16 @@ void ApiEvents::DowntimeStartedHandler(const Downtime::Ptr& downtime) for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); } void ApiEvents::DowntimeTriggeredHandler(const Downtime::Ptr& downtime) { std::vector queues = EventQueue::GetQueuesForType("DowntimeTriggered"); + auto inboxes (EventsRouter::GetInstance().GetInboxes(EventType::DowntimeTriggered)); - if (queues.empty()) + if (queues.empty() && !inboxes) return; Log(LogDebug, "ApiEvents", "Processing event type 'DowntimeTriggered'."); @@ -355,4 +389,6 @@ void ApiEvents::DowntimeTriggeredHandler(const Downtime::Ptr& downtime) for (const EventQueue::Ptr& queue : queues) { queue->ProcessEvent(result); } + + inboxes.Push(std::move(result)); }