diff --git a/lib/icinga/checkable.cpp b/lib/icinga/checkable.cpp index 737b5e1f1..c8f65ea9b 100644 --- a/lib/icinga/checkable.cpp +++ b/lib/icinga/checkable.cpp @@ -18,14 +18,17 @@ ******************************************************************************/ #include "icinga/checkable.hpp" +#include "config/configcompilercontext.hpp" #include "base/objectlock.hpp" #include "base/utility.hpp" +#include "base/scriptfunction.hpp" #include #include using namespace icinga; REGISTER_TYPE(Checkable); +REGISTER_SCRIPTFUNCTION(ValidateCheckableCheckInterval, &Checkable::ValidateCheckInterval); boost::signals2::signal Checkable::OnEnablePerfdataChanged; boost::signals2::signal Checkable::OnAcknowledgementSet; @@ -263,3 +266,11 @@ Endpoint::Ptr Checkable::GetCommandEndpoint(void) const { return Endpoint::GetByName(GetCommandEndpointRaw()); } + +void Checkable::ValidateCheckInterval(const String& location, const Checkable::Ptr& object) +{ + if (object->GetCheckInterval() <= 0) { + ConfigCompilerContext::GetInstance()->AddMessage(true, "Validation failed for " + + location + ": check_interval must be greater than 0."); + } +} diff --git a/lib/icinga/checkable.hpp b/lib/icinga/checkable.hpp index 5f414539c..9ea2bb104 100644 --- a/lib/icinga/checkable.hpp +++ b/lib/icinga/checkable.hpp @@ -276,6 +276,8 @@ public: void RemoveReverseDependency(const intrusive_ptr& dep); std::set > GetReverseDependencies(void) const; + static void ValidateCheckInterval(const String& location, const Checkable::Ptr& object); + protected: virtual void Start(void); diff --git a/lib/icinga/icinga-type.conf b/lib/icinga/icinga-type.conf index 12e5945f2..948f4dc7d 100644 --- a/lib/icinga/icinga-type.conf +++ b/lib/icinga/icinga-type.conf @@ -26,6 +26,8 @@ } %type Checkable { + %validator "ValidateCheckableCheckInterval", + %attribute %string "display_name", %require "check_command",