diff --git a/lib/icinga/service-check.cpp b/lib/icinga/service-check.cpp index 48e8823a1..4270d8a27 100644 --- a/lib/icinga/service-check.cpp +++ b/lib/icinga/service-check.cpp @@ -402,6 +402,9 @@ void Service::ProcessCheckResult(const Dictionary::Ptr& cr) if (old_state != GetState() && old_stateType == StateTypeHard && GetStateType() == StateTypeHard) hardChange = true; + if (IsVolatile()) + hardChange = true; + if (hardChange) SetLastHardStateChange(now); diff --git a/lib/icinga/service.cpp b/lib/icinga/service.cpp index e257eec92..4bd5aeda1 100644 --- a/lib/icinga/service.cpp +++ b/lib/icinga/service.cpp @@ -52,6 +52,7 @@ Service::Service(const Dictionary::Ptr& serializedObject) RegisterAttribute("checkers", Attribute_Config, &m_Checkers); RegisterAttribute("event_command", Attribute_Config, &m_EventCommand); + RegisterAttribute("volatile", Attribute_Config, &m_Volatile); RegisterAttribute("next_check", Attribute_Replicated, &m_NextCheck); RegisterAttribute("current_checker", Attribute_Replicated, &m_CurrentChecker); @@ -223,6 +224,14 @@ bool Service::IsReachable(void) const return true; } +bool Service::IsVolatile(void) const +{ + if (m_Volatile.IsEmpty()) + return false; + + return m_Volatile; +} + AcknowledgementType Service::GetAcknowledgement(void) { ASSERT(OwnsLock()); diff --git a/lib/icinga/service.h b/lib/icinga/service.h index d6b0ab02f..0db3e4dd1 100644 --- a/lib/icinga/service.h +++ b/lib/icinga/service.h @@ -94,6 +94,8 @@ public: std::set GetParentHosts(void) const; std::set GetParentServices(void) const; + bool IsVolatile(void) const; + bool IsReachable(void) const; AcknowledgementType GetAcknowledgement(void); @@ -261,6 +263,7 @@ private: Attribute m_Acknowledgement; Attribute m_AcknowledgementExpiry; Attribute m_HostName; + Attribute m_Volatile; /* Checks */ Attribute m_CheckCommand;