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)
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);
+ }
+}
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);
};
}
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();
if (!GetOverrideCheckCommand().IsEmpty())
attrs |= ModAttrCheckCommand;
+ if (!GetOverrideMaxCheckAttempts().IsEmpty())
+ attrs |= ModAttrMaxCheckAttempts;
+
// TODO: finish
return attrs;
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
double GetRetryInterval(void) const;
void SetRetryInterval(double interval);
+ int GetMaxCheckAttempts(void) const;
+ void SetMaxCheckAttempts(int attempts);
+
long GetSchedulingOffset(void);
void SetSchedulingOffset(long offset);
[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);
[state] Value override_enable_event_handler;
[state] Value override_event_command;
[state] Value override_check_command;
+ [state] Value override_max_check_attempts;
};
}