]> granicus.if.org Git - icinga2/commitdiff
Implement override_check_period.
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 26 Nov 2013 12:43:56 +0000 (13:43 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Tue, 26 Nov 2013 12:43:56 +0000 (13:43 +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 197c4553dad4e6fecc7ae228d9e4814ad84f0032..7b3fd46b2bec7b0095ee1ff90cbd7a77eb513f13 100644 (file)
@@ -197,6 +197,8 @@ void ExternalCommandProcessor::Initialize(void)
        RegisterCommand("CHANGE_SVC_CHECK_COMMAND", &ExternalCommandProcessor::ChangeSvcCheckCommand);
        RegisterCommand("CHANGE_MAX_HOST_CHECK_ATTEMPTS", &ExternalCommandProcessor::ChangeMaxHostCheckAttempts);
        RegisterCommand("CHANGE_MAX_SVC_CHECK_ATTEMPTS", &ExternalCommandProcessor::ChangeMaxSvcCheckAttempts);
+       RegisterCommand("CHANGE_HOST_CHECK_TIMEPERIOD", &ExternalCommandProcessor::ChangeHostCheckTimeperiod);
+       RegisterCommand("CHANGE_SVC_CHECK_TIMEPERIOD", &ExternalCommandProcessor::ChangeSvcCheckTimeperiod);
 }
 
 void ExternalCommandProcessor::RegisterCommand(const String& command, const ExternalCommandProcessor::Callback& callback)
@@ -2167,3 +2169,53 @@ void ExternalCommandProcessor::ChangeMaxSvcCheckAttempts(double time, const std:
                service->SetMaxCheckAttempts(attempts);
        }
 }
+
+void ExternalCommandProcessor::ChangeHostCheckTimeperiod(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 check period for non-existent host '" + arguments[0] + "'"));
+
+       Service::Ptr hc = host->GetCheckService();
+
+       TimePeriod::Ptr tp = TimePeriod::GetByName(arguments[2]);
+
+       if (!tp)
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Time period '" + arguments[1] + "' does not exist."));
+
+       Log(LogInformation, "icinga", "Changing check period for host '" + arguments[0] + "' to '" + arguments[1] + "'");
+
+       {
+               ObjectLock olock(hc);
+
+               hc->SetCheckPeriod(tp);
+       }
+}
+
+void ExternalCommandProcessor::ChangeSvcCheckTimeperiod(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 check period for non-existent service '" + arguments[1] + "' on host '" + arguments[0] + "'"));
+
+       TimePeriod::Ptr tp = TimePeriod::GetByName(arguments[2]);
+
+       if (!tp)
+               BOOST_THROW_EXCEPTION(std::invalid_argument("Time period '" + arguments[2] + "' does not exist."));
+
+       Log(LogInformation, "icinga", "Changing check period for service '" + arguments[1] + "' to '" + arguments[2] + "'");
+
+       {
+               ObjectLock olock(service);
+
+               service->SetCheckPeriod(tp);
+       }
+}
\ No newline at end of file
index 66bdc67429818e276458364757737b64cc4bfc3b..371eef80037ae9c5f8fb449aae872a9831e42a3f 100644 (file)
@@ -147,6 +147,8 @@ private:
        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);
+       static void ChangeHostCheckTimeperiod(double time, const std::vector<String>& arguments);
+       static void ChangeSvcCheckTimeperiod(double time, const std::vector<String>& arguments);
 };
 
 }
index 9fce8433ac2f3bc504ea4dde74fb626a69057a33..e2f68b46806c638ca3effced4cc981ea5b726783 100644 (file)
@@ -64,7 +64,19 @@ void Service::SetCheckCommand(const CheckCommand::Ptr& command)
 
 TimePeriod::Ptr Service::GetCheckPeriod(void) const
 {
-       return TimePeriod::GetByName(GetCheckPeriodRaw());
+       String tp;
+
+       if (!GetOverrideCheckPeriod().IsEmpty())
+               tp = GetOverrideCheckPeriod();
+       else
+               tp = GetCheckPeriodRaw();
+
+       return TimePeriod::GetByName(tp);
+}
+
+void Service::SetCheckPeriod(const TimePeriod::Ptr& tp)
+{
+       SetOverrideCheckPeriod(tp->GetName());
 }
 
 double Service::GetCheckInterval(void) const
index a4f5e2909efe6a9784f2e35e97273f44c4bcff9a..4c909118bfd4ba2bd32c837c49e877d572cae2e7 100644 (file)
@@ -310,6 +310,9 @@ int Service::GetModifiedAttributes(void) const
        if (!GetOverrideMaxCheckAttempts().IsEmpty())
                attrs |= ModAttrMaxCheckAttempts;
 
+       if (!GetOverrideCheckPeriod().IsEmpty())
+               attrs |= ModAttrCheckTimeperiod;
+
        // TODO: finish
 
        return attrs;
@@ -349,6 +352,9 @@ void Service::SetModifiedAttributes(int flags)
 
        if ((flags & ModAttrMaxCheckAttempts) == 0)
                SetOverrideMaxCheckAttempts(Empty);
+
+       if ((flags & ModAttrCheckTimeperiod) == 0)
+               SetOverrideCheckPeriod(Empty);
 }
 
 bool Service::ResolveMacro(const String& macro, const CheckResult::Ptr& cr, String *result) const
index 36d2f173aaae023e52c449b5b410f680267c081c..1680e2221e2283c3cd2aaebba5e5d5040c7c6315 100644 (file)
@@ -112,6 +112,7 @@ public:
        void SetCheckCommand(const shared_ptr<CheckCommand>& command);
 
        TimePeriod::Ptr GetCheckPeriod(void) const;
+       void SetCheckPeriod(const TimePeriod::Ptr& tp);
 
        double GetCheckInterval(void) const;
        void SetCheckInterval(double interval);
index 4da129a240b688e557078077f2484ed057a0e89c..ee693c70606bd66a7a56604dfaae7574efab9105 100644 (file)
@@ -139,6 +139,7 @@ class Service : DynamicObject
        [state] Value override_event_command;
        [state] Value override_check_command;
        [state] Value override_max_check_attempts;
+       [state] Value override_check_period;
 };
 
 }