/******************************************************************************
* 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)
return;
if (!groups)
- groups = make_shared<Array>();
+ groups = new Array();
groups->Add(name);
}
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);
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)
SetAcknowledgementRaw(AcknowledgementNone);
SetAcknowledgementExpiry(0);
- OnAcknowledgementCleared(GetSelf(), origin);
+ OnAcknowledgementCleared(this, origin);
}
bool Checkable::GetEnablePerfdata(void) const
{
SetOverrideEnablePerfdata(enabled);
- OnEnablePerfdataChanged(GetSelf(), enabled, origin);
+ OnEnablePerfdataChanged(this, enabled, origin);
}
int Checkable::GetModifiedAttributes(void) const
if (!GetOverrideCheckPeriod().IsEmpty())
attrs |= ModAttrCheckTimeperiod;
- if (!GetOverrideVars().IsEmpty())
+ if (GetOverrideVars())
attrs |= ModAttrCustomVariable;
// TODO: finish
{
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)
if ((flags & ModAttrPerformanceDataEnabled) == 0) {
SetOverrideEnablePerfdata(Empty);
- OnEnablePerfdataChanged(GetSelf(), GetEnablePerfdata(), origin);
+ OnEnablePerfdataChanged(this, GetEnablePerfdata(), origin);
}
if ((flags & ModAttrNormalCheckInterval) == 0)
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()));
}
}