From ec99efbc286c48d319b689c38d106b8650f9b903 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 5 Dec 2014 12:59:57 +0100 Subject: [PATCH] Implement validator for the check_interval attribute fixes #7591 --- lib/icinga/checkable.cpp | 11 +++++++++++ lib/icinga/checkable.hpp | 2 ++ lib/icinga/icinga-type.conf | 2 ++ 3 files changed, 15 insertions(+) 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",