mirror of https://github.com/Icinga/icinga2.git
Implement modified attributes check_interval and retry_interval.
This commit is contained in:
parent
20fbce9c9c
commit
3596ee577b
|
@ -182,6 +182,10 @@ void ExternalCommandProcessor::Initialize(void)
|
|||
RegisterCommand("STOP_EXECUTING_SVC_CHECKS", &ExternalCommandProcessor::StopExecutingSvcChecks);
|
||||
RegisterCommand("CHANGE_SVC_MODATTR", &ExternalCommandProcessor::ChangeSvcModattr);
|
||||
RegisterCommand("CHANGE_HOST_MODATTR", &ExternalCommandProcessor::ChangeHostModattr);
|
||||
RegisterCommand("CHANGE_NORMAL_SVC_CHECK_INTERVAL", &ExternalCommandProcessor::ChangeNormalSvcCheckInterval);
|
||||
RegisterCommand("CHANGE_NORMAL_HOST_CHECK_INTERVAL", &ExternalCommandProcessor::ChangeNormalHostCheckInterval);
|
||||
RegisterCommand("CHANGE_RETRY_SVC_CHECK_INTERVAL", &ExternalCommandProcessor::ChangeRetrySvcCheckInterval);
|
||||
RegisterCommand("CHANGE_RETRY_HOST_CHECK_INTERVAL", &ExternalCommandProcessor::ChangeRetryHostCheckInterval);
|
||||
}
|
||||
|
||||
void ExternalCommandProcessor::RegisterCommand(const String& command, const ExternalCommandProcessor::Callback& callback)
|
||||
|
@ -1852,11 +1856,97 @@ void ExternalCommandProcessor::ChangeHostModattr(double time, const std::vector<
|
|||
Log(LogInformation, "icinga", "Updating modified attributes for for host '" + arguments[0] + "'");
|
||||
Service::Ptr hc = host->GetCheckService();
|
||||
|
||||
int modifiedAttributes = Convert::ToLong(arguments[2]);
|
||||
int modifiedAttributes = Convert::ToLong(arguments[1]);
|
||||
|
||||
{
|
||||
ObjectLock olock(hc);
|
||||
|
||||
hc->SetModifiedAttributes(modifiedAttributes);
|
||||
}
|
||||
}
|
||||
|
||||
void ExternalCommandProcessor::ChangeNormalSvcCheckInterval(double time, const std::vector<String>& arguments)
|
||||
{
|
||||
if (arguments.size() < 3)
|
||||
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 update check interval for non-existent service '" + arguments[1] + "' on host '" + arguments[0] + "'"));
|
||||
|
||||
int interval = Convert::ToLong(arguments[2]);
|
||||
|
||||
Log(LogInformation, "icinga", "Updating check interval for service '" + arguments[1] + "'");
|
||||
|
||||
{
|
||||
ObjectLock olock(service);
|
||||
|
||||
service->SetCheckInterval(interval * 60);
|
||||
}
|
||||
}
|
||||
|
||||
void ExternalCommandProcessor::ChangeNormalHostCheckInterval(double time, const std::vector<String>& arguments)
|
||||
{
|
||||
if (arguments.size() < 3)
|
||||
BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 3 arguments."));
|
||||
|
||||
Host::Ptr host = Host::GetByName(arguments[0]);
|
||||
|
||||
if (!host)
|
||||
BOOST_THROW_EXCEPTION(std::invalid_argument("Cannot update check interval for non-existent host '" + arguments[0] + "'"));
|
||||
|
||||
Log(LogInformation, "icinga", "Updating check interval for for host '" + arguments[0] + "'");
|
||||
Service::Ptr hc = host->GetCheckService();
|
||||
|
||||
int interval = Convert::ToLong(arguments[1]);
|
||||
|
||||
{
|
||||
ObjectLock olock(hc);
|
||||
|
||||
hc->SetModifiedAttributes(interval * 60);
|
||||
}
|
||||
}
|
||||
|
||||
void ExternalCommandProcessor::ChangeRetrySvcCheckInterval(double time, const std::vector<String>& arguments)
|
||||
{
|
||||
if (arguments.size() < 3)
|
||||
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 update retry interval for non-existent service '" + arguments[1] + "' on host '" + arguments[0] + "'"));
|
||||
|
||||
int interval = Convert::ToLong(arguments[2]);
|
||||
|
||||
Log(LogInformation, "icinga", "Updating retry interval for service '" + arguments[1] + "'");
|
||||
|
||||
{
|
||||
ObjectLock olock(service);
|
||||
|
||||
service->SetRetryInterval(interval * 60);
|
||||
}
|
||||
}
|
||||
|
||||
void ExternalCommandProcessor::ChangeRetryHostCheckInterval(double time, const std::vector<String>& arguments)
|
||||
{
|
||||
if (arguments.size() < 3)
|
||||
BOOST_THROW_EXCEPTION(std::invalid_argument("Expected 3 arguments."));
|
||||
|
||||
Host::Ptr host = Host::GetByName(arguments[0]);
|
||||
|
||||
if (!host)
|
||||
BOOST_THROW_EXCEPTION(std::invalid_argument("Cannot update retry interval for non-existent host '" + arguments[0] + "'"));
|
||||
|
||||
Log(LogInformation, "icinga", "Updating check interval for for host '" + arguments[0] + "'");
|
||||
Service::Ptr hc = host->GetCheckService();
|
||||
|
||||
int interval = Convert::ToLong(arguments[1]);
|
||||
|
||||
{
|
||||
ObjectLock olock(hc);
|
||||
|
||||
hc->SetRetryInterval(interval * 60);
|
||||
}
|
||||
}
|
|
@ -133,6 +133,10 @@ private:
|
|||
static void StopExecutingSvcChecks(double time, const std::vector<String>& arguments);
|
||||
static void ChangeSvcModattr(double time, const std::vector<String>& arguments);
|
||||
static void ChangeHostModattr(double time, const std::vector<String>& arguments);
|
||||
static void ChangeNormalSvcCheckInterval(double time, const std::vector<String>& arguments);
|
||||
static void ChangeNormalHostCheckInterval(double time, const std::vector<String>& arguments);
|
||||
static void ChangeRetrySvcCheckInterval(double time, const std::vector<String>& arguments);
|
||||
static void ChangeRetryHostCheckInterval(double time, const std::vector<String>& arguments);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -69,18 +69,33 @@ TimePeriod::Ptr Service::GetCheckPeriod(void) const
|
|||
|
||||
double Service::GetCheckInterval(void) const
|
||||
{
|
||||
if (m_CheckInterval.IsEmpty())
|
||||
if (!m_OverrideCheckInterval.IsEmpty())
|
||||
return m_OverrideCheckInterval;
|
||||
else if (!m_CheckInterval.IsEmpty())
|
||||
return m_CheckInterval;
|
||||
else
|
||||
return DefaultCheckInterval;
|
||||
|
||||
return m_CheckInterval;
|
||||
}
|
||||
|
||||
void Service::SetCheckInterval(double interval)
|
||||
{
|
||||
m_OverrideCheckInterval = interval;
|
||||
}
|
||||
|
||||
|
||||
double Service::GetRetryInterval(void) const
|
||||
{
|
||||
if (m_RetryInterval.IsEmpty())
|
||||
if (!m_OverrideRetryInterval.IsEmpty())
|
||||
return m_OverrideRetryInterval;
|
||||
if (!m_RetryInterval.IsEmpty())
|
||||
return m_RetryInterval;
|
||||
else
|
||||
return GetCheckInterval() / CheckIntervalDivisor;
|
||||
}
|
||||
|
||||
return m_RetryInterval;
|
||||
void Service::SetRetryInterval(double interval)
|
||||
{
|
||||
m_OverrideRetryInterval = interval;
|
||||
}
|
||||
|
||||
void Service::SetSchedulingOffset(long offset)
|
||||
|
|
|
@ -343,6 +343,12 @@ int Service::GetModifiedAttributes(void) const
|
|||
if (!m_OverrideEnablePassiveChecks.IsEmpty())
|
||||
attrs |= ModAttrPassiveChecksEnabled;
|
||||
|
||||
if (!m_OverrideCheckInterval)
|
||||
attrs |= ModAttrNormalCheckInterval;
|
||||
|
||||
if (!m_OverrideRetryInterval.IsEmpty())
|
||||
attrs |= ModAttrRetryCheckInterval;
|
||||
|
||||
// TODO: finish
|
||||
|
||||
return attrs;
|
||||
|
@ -493,6 +499,8 @@ void Service::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes)
|
|||
bag->Set("enable_event_handlers", m_EnableEventHandlers);
|
||||
bag->Set("override_enable_active_checks", m_OverrideEnableActiveChecks);
|
||||
bag->Set("override_enable_passive_checks", m_OverrideEnablePassiveChecks);
|
||||
bag->Set("override_check_interval", m_OverrideCheckInterval);
|
||||
bag->Set("override_retry_interval", m_OverrideRetryInterval);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -555,5 +563,7 @@ void Service::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes
|
|||
m_EnableEventHandlers = bag->Get("enable_event_handlers");
|
||||
m_OverrideEnableActiveChecks = bag->Get("override_enable_active_checks");
|
||||
m_OverrideEnablePassiveChecks = bag->Get("override_enable_passive_checks");
|
||||
m_OverrideCheckInterval = bag->Get("override_check_interval");
|
||||
m_OverrideRetryInterval = bag->Get("override_retry_interval");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -172,8 +172,12 @@ public:
|
|||
shared_ptr<CheckCommand> GetCheckCommand(void) const;
|
||||
long GetMaxCheckAttempts(void) const;
|
||||
TimePeriod::Ptr GetCheckPeriod(void) const;
|
||||
|
||||
double GetCheckInterval(void) const;
|
||||
void SetCheckInterval(double interval);
|
||||
|
||||
double GetRetryInterval(void) const;
|
||||
void SetRetryInterval(double interval);
|
||||
|
||||
long GetSchedulingOffset(void);
|
||||
void SetSchedulingOffset(long offset);
|
||||
|
@ -392,7 +396,9 @@ private:
|
|||
Value m_MaxCheckAttempts;
|
||||
String m_CheckPeriod;
|
||||
Value m_CheckInterval;
|
||||
Value m_OverrideCheckInterval;
|
||||
Value m_RetryInterval;
|
||||
Value m_OverrideRetryInterval;
|
||||
double m_NextCheck;
|
||||
String m_CurrentChecker;
|
||||
Value m_CheckAttempt;
|
||||
|
|
Loading…
Reference in New Issue