From 56ae875861ab260b80a030f50c4aff9f9dc8fff0 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 13:32:39 +0200 Subject: Adding upstream version 2.14.2. Signed-off-by: Daniel Baumann --- lib/icinga/notification.hpp | 135 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 lib/icinga/notification.hpp (limited to 'lib/icinga/notification.hpp') diff --git a/lib/icinga/notification.hpp b/lib/icinga/notification.hpp new file mode 100644 index 0000000..1b6cbed --- /dev/null +++ b/lib/icinga/notification.hpp @@ -0,0 +1,135 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#ifndef NOTIFICATION_H +#define NOTIFICATION_H + +#include "icinga/i2-icinga.hpp" +#include "icinga/notification-ti.hpp" +#include "icinga/checkable-ti.hpp" +#include "icinga/user.hpp" +#include "icinga/usergroup.hpp" +#include "icinga/timeperiod.hpp" +#include "icinga/checkresult.hpp" +#include "remote/endpoint.hpp" +#include "remote/messageorigin.hpp" +#include "base/array.hpp" +#include + +namespace icinga +{ + +/** + * @ingroup icinga + */ +enum NotificationFilter +{ + StateFilterOK = 1, + StateFilterWarning = 2, + StateFilterCritical = 4, + StateFilterUnknown = 8, + + StateFilterUp = 16, + StateFilterDown = 32 +}; + +/** + * The notification type. + * + * @ingroup icinga + */ +enum NotificationType +{ + NotificationDowntimeStart = 1, + NotificationDowntimeEnd = 2, + NotificationDowntimeRemoved = 4, + NotificationCustom = 8, + NotificationAcknowledgement = 16, + NotificationProblem = 32, + NotificationRecovery = 64, + NotificationFlappingStart = 128, + NotificationFlappingEnd = 256 +}; + +class NotificationCommand; +class ApplyRule; +struct ScriptFrame; +class Host; +class Service; + +/** + * An Icinga notification specification. + * + * @ingroup icinga + */ +class Notification final : public ObjectImpl +{ +public: + DECLARE_OBJECT(Notification); + DECLARE_OBJECTNAME(Notification); + + static void StaticInitialize(); + + intrusive_ptr GetCheckable() const; + intrusive_ptr GetCommand() const; + TimePeriod::Ptr GetPeriod() const; + std::set GetUsers() const; + std::set GetUserGroups() const; + + void UpdateNotificationNumber(); + void ResetNotificationNumber(); + + void BeginExecuteNotification(NotificationType type, const CheckResult::Ptr& cr, bool force, + bool reminder = false, const String& author = "", const String& text = ""); + + Endpoint::Ptr GetCommandEndpoint() const; + + // Logging, etc. + static String NotificationTypeToString(NotificationType type); + // Compat, used for notifications, etc. + static String NotificationTypeToStringCompat(NotificationType type); + static String NotificationFilterToString(int filter, const std::map& filterMap); + + static String NotificationServiceStateToString(ServiceState state); + static String NotificationHostStateToString(HostState state); + + static boost::signals2::signal OnNextNotificationChanged; + static boost::signals2::signal OnLastNotifiedStatePerUserUpdated; + static boost::signals2::signal OnLastNotifiedStatePerUserCleared; + + void Validate(int types, const ValidationUtils& utils) override; + + void ValidateStates(const Lazy& lvalue, const ValidationUtils& utils) override; + void ValidateTypes(const Lazy& lvalue, const ValidationUtils& utils) override; + void ValidateTimes(const Lazy& lvalue, const ValidationUtils& utils) override; + + static void EvaluateApplyRules(const intrusive_ptr& host); + static void EvaluateApplyRules(const intrusive_ptr& service); + + static const std::map& GetStateFilterMap(); + static const std::map& GetTypeFilterMap(); + + void OnConfigLoaded() override; + void OnAllConfigLoaded() override; + void Start(bool runtimeCreated) override; + void Stop(bool runtimeRemoved) override; + +private: + ObjectImpl::Ptr m_Checkable; + + bool CheckNotificationUserFilters(NotificationType type, const User::Ptr& user, bool force, bool reminder); + + void ExecuteNotificationHelper(NotificationType type, const User::Ptr& user, const CheckResult::Ptr& cr, bool force, const String& author = "", const String& text = ""); + + static bool EvaluateApplyRuleInstance(const intrusive_ptr& checkable, const String& name, ScriptFrame& frame, const ApplyRule& rule, bool skipFilter); + static bool EvaluateApplyRule(const intrusive_ptr& checkable, const ApplyRule& rule, bool skipFilter = false); + + static std::map m_StateFilterMap; + static std::map m_TypeFilterMap; +}; + +int ServiceStateToFilter(ServiceState state); +int HostStateToFilter(HostState state); + +} + +#endif /* NOTIFICATION_H */ -- cgit v1.2.3