]> granicus.if.org Git - icinga2/blobdiff - lib/icinga/checkable.cpp
Fix notify flag is ignored in ACKNOWLEDGE_*_PROBLEM commands
[icinga2] / lib / icinga / checkable.cpp
index ef1c99067a4bd43317ae0a3a7125e2049b0a8050..d54aa8ec514b8b434cb37760438b014f70f1afae 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
  * Icinga 2                                                                   *
- * Copyright (C) 2012-2014 Icinga Development Team (http://www.icinga.org)    *
+ * Copyright (C) 2012-2015 Icinga Development Team (http://www.icinga.org)    *
  *                                                                            *
  * This program is free software; you can redistribute it and/or              *
  * modify it under the terms of the GNU General Public License                *
 #include "icinga/checkable.hpp"
 #include "base/objectlock.hpp"
 #include "base/utility.hpp"
+#include "base/function.hpp"
+#include "base/exception.hpp"
 #include <boost/foreach.hpp>
 #include <boost/bind/apply.hpp>
 
 using namespace icinga;
 
 REGISTER_TYPE(Checkable);
+REGISTER_SCRIPTFUNCTION(ValidateCheckableCheckInterval, &Checkable::ValidateCheckInterval);
 
 boost::signals2::signal<void (const Checkable::Ptr&, bool, const MessageOrigin&)> Checkable::OnEnablePerfdataChanged;
-boost::signals2::signal<void (const Checkable::Ptr&, const String&, const String&, AcknowledgementType, double, const MessageOrigin&)> Checkable::OnAcknowledgementSet;
+boost::signals2::signal<void (const Checkable::Ptr&, const String&, const String&, AcknowledgementType, bool, double, const MessageOrigin&)> Checkable::OnAcknowledgementSet;
 boost::signals2::signal<void (const Checkable::Ptr&, const MessageOrigin&)> Checkable::OnAcknowledgementCleared;
 
 Checkable::Checkable(void)
@@ -90,7 +93,7 @@ void Checkable::AddGroup(const String& name)
                return;
 
        if (!groups)
-               groups = make_shared<Array>();
+               groups = new Array();
 
        groups->Add(name);
 }
@@ -118,7 +121,7 @@ bool Checkable::IsAcknowledged(void)
        return GetAcknowledgement() != AcknowledgementNone;
 }
 
-void Checkable::AcknowledgeProblem(const String& author, const String& comment, AcknowledgementType type, double expiry, const MessageOrigin& origin)
+void Checkable::AcknowledgeProblem(const String& author, const String& comment, AcknowledgementType type, bool notify, double expiry, const MessageOrigin& origin)
 {
        {
                ObjectLock olock(this);
@@ -127,9 +130,10 @@ void Checkable::AcknowledgeProblem(const String& author, const String& comment,
                SetAcknowledgementExpiry(expiry);
        }
 
-       OnNotificationsRequested(GetSelf(), NotificationAcknowledgement, GetLastCheckResult(), author, comment);
+       if (notify)
+               OnNotificationsRequested(this, NotificationAcknowledgement, GetLastCheckResult(), author, comment);
 
-       OnAcknowledgementSet(GetSelf(), author, comment, type, expiry, origin);
+       OnAcknowledgementSet(this, author, comment, type, notify, expiry, origin);
 }
 
 void Checkable::ClearAcknowledgement(const MessageOrigin& origin)
@@ -139,7 +143,7 @@ void Checkable::ClearAcknowledgement(const MessageOrigin& origin)
        SetAcknowledgementRaw(AcknowledgementNone);
        SetAcknowledgementExpiry(0);
 
-       OnAcknowledgementCleared(GetSelf(), origin);
+       OnAcknowledgementCleared(this, origin);
 }
 
 bool Checkable::GetEnablePerfdata(void) const
@@ -154,7 +158,7 @@ void Checkable::SetEnablePerfdata(bool enabled, const MessageOrigin& origin)
 {
        SetOverrideEnablePerfdata(enabled);
 
-       OnEnablePerfdataChanged(GetSelf(), enabled, origin);
+       OnEnablePerfdataChanged(this, enabled, origin);
 }
 
 int Checkable::GetModifiedAttributes(void) const
@@ -197,7 +201,7 @@ int Checkable::GetModifiedAttributes(void) const
        if (!GetOverrideCheckPeriod().IsEmpty())
                attrs |= ModAttrCheckTimeperiod;
 
-       if (!GetOverrideVars().IsEmpty())
+       if (GetOverrideVars())
                attrs |= ModAttrCustomVariable;
 
        // TODO: finish
@@ -209,22 +213,22 @@ void Checkable::SetModifiedAttributes(int flags, const MessageOrigin& origin)
 {
        if ((flags & ModAttrNotificationsEnabled) == 0) {
                SetOverrideEnableNotifications(Empty);
-               OnEnableNotificationsChanged(GetSelf(), GetEnableNotifications(), origin);
+               OnEnableNotificationsChanged(this, GetEnableNotifications(), origin);
        }
 
        if ((flags & ModAttrActiveChecksEnabled) == 0) {
                SetOverrideEnableActiveChecks(Empty);
-               OnEnableActiveChecksChanged(GetSelf(), GetEnableActiveChecks(), origin);
+               OnEnableActiveChecksChanged(this, GetEnableActiveChecks(), origin);
        }
 
        if ((flags & ModAttrPassiveChecksEnabled) == 0) {
                SetOverrideEnablePassiveChecks(Empty);
-               OnEnablePassiveChecksChanged(GetSelf(), GetEnablePassiveChecks(), origin);
+               OnEnablePassiveChecksChanged(this, GetEnablePassiveChecks(), origin);
        }
 
        if ((flags & ModAttrFlapDetectionEnabled) == 0) {
                SetOverrideEnableFlapping(Empty);
-               OnEnableFlappingChanged(GetSelf(), GetEnableFlapping(), origin);
+               OnEnableFlappingChanged(this, GetEnableFlapping(), origin);
        }
 
        if ((flags & ModAttrEventHandlerEnabled) == 0)
@@ -232,7 +236,7 @@ void Checkable::SetModifiedAttributes(int flags, const MessageOrigin& origin)
 
        if ((flags & ModAttrPerformanceDataEnabled) == 0) {
                SetOverrideEnablePerfdata(Empty);
-               OnEnablePerfdataChanged(GetSelf(), GetEnablePerfdata(), origin);
+               OnEnablePerfdataChanged(this, GetEnablePerfdata(), origin);
        }
 
        if ((flags & ModAttrNormalCheckInterval) == 0)
@@ -255,6 +259,19 @@ void Checkable::SetModifiedAttributes(int flags, const MessageOrigin& origin)
 
        if ((flags & ModAttrCustomVariable) == 0) {
                SetOverrideVars(Empty);
-               OnVarsChanged(GetSelf(), origin);
+               OnVarsChanged(this, GetVars(), origin);
+       }
+}
+
+Endpoint::Ptr Checkable::GetCommandEndpoint(void) const
+{
+       return Endpoint::GetByName(GetCommandEndpointRaw());
+}
+
+void Checkable::ValidateCheckInterval(const String& location, const Checkable::Ptr& object)
+{
+       if (object->GetCheckInterval() <= 0) {
+               BOOST_THROW_EXCEPTION(ScriptError("Validation failed for " +
+                   location + ": check_interval must be greater than 0.", object->GetDebugInfo()));
        }
 }