/******************************************************************************
* 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 *
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
******************************************************************************/
-#include "icinga/service.h"
-#include "icinga/servicegroup.h"
-#include "icinga/checkcommand.h"
-#include "icinga/icingaapplication.h"
-#include "icinga/macroprocessor.h"
-#include "icinga/pluginutility.h"
-#include "icinga/dependency.h"
-#include "config/configitembuilder.h"
-#include "base/dynamictype.h"
-#include "base/objectlock.h"
-#include "base/convert.h"
-#include "base/utility.h"
-#include "base/initialize.h"
+#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);
-INITIALIZE_ONCE(&Checkable::StartDowntimesExpiredTimer);
-
-boost::signals2::signal<void (const Checkable::Ptr&, const String&, const String&, AcknowledgementType, double, const String&)> Checkable::OnAcknowledgementSet;
-boost::signals2::signal<void (const Checkable::Ptr&, const String&)> Checkable::OnAcknowledgementCleared;
+boost::signals2::signal<void (const Checkable::Ptr&, bool, const MessageOrigin&)> Checkable::OnEnablePerfdataChanged;
+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)
: m_CheckRunning(false)
}
BOOST_FOREACH(const String& id, ids) {
+ /* override config owner to clear downtimes once */
+ Downtime::Ptr downtime = GetDowntimeByID(id);
+ downtime->SetConfigOwner(Empty);
RemoveDowntime(id, true);
}
}
Array::Ptr groups = GetGroups();
+ if (groups && groups->Contains(name))
+ 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 String& authority)
+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, authority);
+ OnAcknowledgementSet(this, author, comment, type, notify, expiry, origin);
}
-void Checkable::ClearAcknowledgement(const String& authority)
+void Checkable::ClearAcknowledgement(const MessageOrigin& origin)
{
ASSERT(OwnsLock());
SetAcknowledgementRaw(AcknowledgementNone);
SetAcknowledgementExpiry(0);
- OnAcknowledgementCleared(GetSelf(), authority);
+ OnAcknowledgementCleared(this, origin);
}
bool Checkable::GetEnablePerfdata(void) const
return GetEnablePerfdataRaw();
}
-void Checkable::SetEnablePerfdata(bool enabled, const String& authority)
+void Checkable::SetEnablePerfdata(bool enabled, const MessageOrigin& origin)
{
SetOverrideEnablePerfdata(enabled);
+
+ OnEnablePerfdataChanged(this, enabled, origin);
}
int Checkable::GetModifiedAttributes(void) const
if (!GetOverrideCheckPeriod().IsEmpty())
attrs |= ModAttrCheckTimeperiod;
- if (!GetOverrideVars().IsEmpty())
+ if (GetOverrideVars())
attrs |= ModAttrCustomVariable;
// TODO: finish
return attrs;
}
-void Checkable::SetModifiedAttributes(int flags)
+void Checkable::SetModifiedAttributes(int flags, const MessageOrigin& origin)
{
- if ((flags & ModAttrNotificationsEnabled) == 0)
+ if ((flags & ModAttrNotificationsEnabled) == 0) {
SetOverrideEnableNotifications(Empty);
+ OnEnableNotificationsChanged(this, GetEnableNotifications(), origin);
+ }
- if ((flags & ModAttrActiveChecksEnabled) == 0)
+ if ((flags & ModAttrActiveChecksEnabled) == 0) {
SetOverrideEnableActiveChecks(Empty);
+ OnEnableActiveChecksChanged(this, GetEnableActiveChecks(), origin);
+ }
- if ((flags & ModAttrPassiveChecksEnabled) == 0)
+ if ((flags & ModAttrPassiveChecksEnabled) == 0) {
SetOverrideEnablePassiveChecks(Empty);
+ OnEnablePassiveChecksChanged(this, GetEnablePassiveChecks(), origin);
+ }
- if ((flags & ModAttrFlapDetectionEnabled) == 0)
+ if ((flags & ModAttrFlapDetectionEnabled) == 0) {
SetOverrideEnableFlapping(Empty);
+ OnEnableFlappingChanged(this, GetEnableFlapping(), origin);
+ }
if ((flags & ModAttrEventHandlerEnabled) == 0)
SetOverrideEnableEventHandler(Empty);
- if ((flags & ModAttrPerformanceDataEnabled) == 0)
+ if ((flags & ModAttrPerformanceDataEnabled) == 0) {
SetOverrideEnablePerfdata(Empty);
+ OnEnablePerfdataChanged(this, GetEnablePerfdata(), origin);
+ }
if ((flags & ModAttrNormalCheckInterval) == 0)
SetOverrideCheckInterval(Empty);
if ((flags & ModAttrCustomVariable) == 0) {
SetOverrideVars(Empty);
- OnVarsChanged(GetSelf());
+ 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()));
}
}