]> granicus.if.org Git - icinga2/commitdiff
Implement override_max_check_attempts.
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 26 Nov 2013 12:27:41 +0000 (13:27 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Tue, 26 Nov 2013 12:27:41 +0000 (13:27 +0100)
Refs #4746

lib/icinga/externalcommandprocessor.cpp
lib/icinga/externalcommandprocessor.h
lib/icinga/service-check.cpp
lib/icinga/service.cpp
lib/icinga/service.h
lib/icinga/service.ti

index 77d5d5b838ef895821556bc60e0bc50e99bbcb77..197c4553dad4e6fecc7ae228d9e4814ad84f0032 100644 (file)
@@ -195,6 +195,8 @@ void ExternalCommandProcessor::Initialize(void)
        RegisterCommand("CHANGE_SVC_EVENT_HANDLER", &ExternalCommandProcessor::ChangeSvcEventHandler);
        RegisterCommand("CHANGE_HOST_CHECK_COMMAND", &ExternalCommandProcessor::ChangeHostCheckCommand);
        RegisterCommand("CHANGE_SVC_CHECK_COMMAND", &ExternalCommandProcessor::ChangeSvcCheckCommand);
+       RegisterCommand("CHANGE_MAX_HOST_CHECK_ATTEMPTS", &ExternalCommandProcessor::ChangeMaxHostCheckAttempts);
+       RegisterCommand("CHANGE_MAX_SVC_CHECK_ATTEMPTS", &ExternalCommandProcessor::ChangeMaxSvcCheckAttempts);
 }
 
 void ExternalCommandProcessor::RegisterCommand(const String& command, const ExternalCommandProcessor::Callback& callback)
@@ -2121,3 +2123,47 @@ void ExternalCommandProcessor::ChangeSvcCheckCommand(double time, const std::vec
                service->SetCheckCommand(command);
        }
 }
+
+void ExternalCommandProcessor::ChangeMaxHostCheckAttempts(double time, const std::vector<String>& arguments)
+{
+       if (arguments.size() < 2)
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 2 arguments."));
+
+       Host::Ptr host = Host::GetByName(arguments[0]);
+
+       if (!host)
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Cannot change max check attempts for non-existent host '" + arguments[0] + "'"));
+
+       Service::Ptr hc = host->GetCheckService();
+
+       int attempts = Convert::ToLong(arguments[2]);
+
+       Log(LogInformation, "icinga", "Changing max check attempts for host '" + arguments[0] + "' to '" + arguments[1] + "'");
+
+       {
+               ObjectLock olock(hc);
+
+               hc->SetMaxCheckAttempts(attempts);
+       }
+}
+
+void ExternalCommandProcessor::ChangeMaxSvcCheckAttempts(double time, const std::vector<String>& arguments)
+{
+       if (arguments.size() < 2)
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 3 arguments."));
+
+       Service::Ptr service = Service::GetByNamePair(arguments[0], arguments[1]);
+
+       if (!service)
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Cannot change max check attempts for non-existent service '" + arguments[1] + "' on host '" + arguments[0] + "'"));
+
+       int attempts = Convert::ToLong(arguments[2]);
+
+       Log(LogInformation, "icinga", "Changing max check attempts for service '" + arguments[1] + "' to '" + arguments[2] + "'");
+
+       {
+               ObjectLock olock(service);
+
+               service->SetMaxCheckAttempts(attempts);
+       }
+}
index a8efbf3ef5dc3c85d656fca8fcc33cb9a66ec414..66bdc67429818e276458364757737b64cc4bfc3b 100644 (file)
@@ -145,6 +145,8 @@ private:
        static void ChangeSvcEventHandler(double time, const std::vector<String>& arguments);
        static void ChangeHostCheckCommand(double time, const std::vector<String>& arguments);
        static void ChangeSvcCheckCommand(double time, const std::vector<String>& arguments);
+       static void ChangeMaxHostCheckAttempts(double time, const std::vector<String>& arguments);
+       static void ChangeMaxSvcCheckAttempts(double time, const std::vector<String>& arguments);
 };
 
 }
index 2c4e2933517a6dc67daf62629baa99b6a72e5320..9fce8433ac2f3bc504ea4dde74fb626a69057a33 100644 (file)
@@ -193,6 +193,19 @@ void Service::SetForceNextCheck(bool forced, const String& authority)
        OnForceNextCheckChanged(GetSelf(), forced, authority);
 }
 
+int Service::GetMaxCheckAttempts(void) const
+{
+       if (!GetOverrideMaxCheckAttempts().IsEmpty())
+               return GetOverrideMaxCheckAttempts();
+       else
+               return GetMaxCheckAttemptsRaw();
+}
+
+void Service::SetMaxCheckAttempts(int attempts)
+{
+       SetOverrideMaxCheckAttempts(attempts);
+}
+
 void Service::ProcessCheckResult(const CheckResult::Ptr& cr, const String& authority)
 {
        double now = Utility::GetTime();
index 82571ada625d5c0931d618be174c90bb50067877..a4f5e2909efe6a9784f2e35e97273f44c4bcff9a 100644 (file)
@@ -307,6 +307,9 @@ int Service::GetModifiedAttributes(void) const
        if (!GetOverrideCheckCommand().IsEmpty())
                attrs |= ModAttrCheckCommand;
 
+       if (!GetOverrideMaxCheckAttempts().IsEmpty())
+               attrs |= ModAttrMaxCheckAttempts;
+
        // TODO: finish
 
        return attrs;
@@ -343,6 +346,9 @@ void Service::SetModifiedAttributes(int flags)
 
        if ((flags & ModAttrCheckCommand) == 0)
                SetOverrideCheckCommand(Empty);
+
+       if ((flags & ModAttrMaxCheckAttempts) == 0)
+               SetOverrideMaxCheckAttempts(Empty);
 }
 
 bool Service::ResolveMacro(const String& macro, const CheckResult::Ptr& cr, String *result) const
index 4d2374243da70cd895b6634a95f526a492d96346..36d2f173aaae023e52c449b5b410f680267c081c 100644 (file)
@@ -119,6 +119,9 @@ public:
        double GetRetryInterval(void) const;
        void SetRetryInterval(double interval);
 
+       int GetMaxCheckAttempts(void) const;
+       void SetMaxCheckAttempts(int attempts);
+
        long GetSchedulingOffset(void);
        void SetSchedulingOffset(long offset);
 
index c59528ac60f0f007d90541fed8012eb8e1487810..4da129a240b688e557078077f2484ed057a0e89c 100644 (file)
@@ -34,7 +34,7 @@ class Service : DynamicObject
        [config] Array::Ptr service_dependencies;
        [config] Array::Ptr groups;
        [config, protected] String check_command (CheckCommandRaw);
-       [config] int max_check_attempts {
+       [config] int max_check_attempts (MaxCheckAttemptsRaw) {
                default {{{ return 3; }}}
        };
        [config, protected] String check_period (CheckPeriodRaw);
@@ -138,6 +138,7 @@ class Service : DynamicObject
        [state] Value override_enable_event_handler;
        [state] Value override_event_command;
        [state] Value override_check_command;
+       [state] Value override_max_check_attempts;
 };
 
 }