Merge branch 'feature/checks-5049' into next

Fixes #5049
This commit is contained in:
Gunnar Beutner 2013-11-11 09:31:54 +01:00
commit 55641fc1ea
13 changed files with 37 additions and 47 deletions

View File

@ -19,6 +19,7 @@
#include "checker/checkercomponent.h"
#include "icinga/icingaapplication.h"
#include "icinga/cib.h"
#include "base/dynamictype.h"
#include "base/objectlock.h"
#include "base/utility.h"
@ -183,7 +184,7 @@ void CheckerComponent::ResultTimerHandler(void)
{
boost::mutex::scoped_lock lock(m_Mutex);
msgbuf << "Pending services: " << m_PendingServices.size() << "; Idle services: " << m_IdleServices.size();
msgbuf << "Pending services: " << m_PendingServices.size() << "; Idle services: " << m_IdleServices.size() << "; Checks/s: " << CIB::GetActiveChecksStatistics(5) / 5.0;
}
Log(LogInformation, "checker", msgbuf.str());

View File

@ -47,17 +47,7 @@ struct ServiceNextCheckExtractor
*/
double operator()(const Service::Ptr& service)
{
if (!service->HasAuthority("checker"))
return Utility::GetTime() + 60;
double next = service->GetNextCheck();
while (next == 0) {
service->UpdateNextCheck();
next = service->GetNextCheck();
}
return next;
return service->GetNextCheck();
}
};

View File

@ -74,6 +74,9 @@ void DynamicObject::SetAuthority(const String& type, bool value)
if (old_value == value)
return;
if (GetAuthorityInfo() == NULL)
SetAuthorityInfo(make_shared<Dictionary>());
GetAuthorityInfo()->Set(type, value);
}
@ -84,7 +87,7 @@ bool DynamicObject::HasAuthority(const String& type) const
{
Dictionary::Ptr authorityInfo = GetAuthorityInfo();
if (!authorityInfo->Contains(type))
if (!authorityInfo || !authorityInfo->Contains(type))
return true;
return authorityInfo->Get(type);

View File

@ -10,9 +10,7 @@ abstract class DynamicObject
[config] Array::Ptr domains;
[config] Array::Ptr authorities;
[get_protected] bool active;
Dictionary::Ptr authority_info {
default {{{ return make_shared<Dictionary>(); }}}
};
Dictionary::Ptr authority_info;
[protected] Dictionary::Ptr extensions;
};

View File

@ -174,10 +174,8 @@ cJSON *Value::ToJson(void) const
} else if (IsObjectType<Array>()) {
Array::Ptr array = *this;
return array->ToJson();
} else if (IsEmpty()) {
return cJSON_CreateNull();
} else {
BOOST_THROW_EXCEPTION(std::runtime_error("Unknown object type."));
return cJSON_CreateNull();
}
case ValueEmpty:

View File

@ -130,7 +130,7 @@ void Notification::SetNextNotification(double time, const String& authority)
{
SetNextNotificationRaw(time);
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnNextNotificationChanged), GetSelf(), time, authority));
OnNextNotificationChanged(GetSelf(), time, authority);
}
void Notification::UpdateNotificationNumber(void)

View File

@ -94,7 +94,7 @@ void Service::SetNextCheck(double nextCheck, const String& authority)
{
SetNextCheckRaw(nextCheck);
Utility::QueueAsyncCallback(boost::bind(boost::ref(Service::OnNextCheckChanged), GetSelf(), nextCheck, authority));
OnNextCheckChanged(GetSelf(), nextCheck, authority);
}
double Service::GetNextCheck(void)
@ -150,7 +150,7 @@ void Service::SetEnableActiveChecks(bool enabled, const String& authority)
{
SetOverrideEnableActiveChecks(enabled);
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnEnableActiveChecksChanged), GetSelf(), enabled, authority));
OnEnableActiveChecksChanged(GetSelf(), enabled, authority);
}
bool Service::GetEnablePassiveChecks(void) const
@ -165,7 +165,7 @@ void Service::SetEnablePassiveChecks(bool enabled, const String& authority)
{
SetOverrideEnablePassiveChecks(enabled);
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnEnablePassiveChecksChanged), GetSelf(), enabled, authority));
OnEnablePassiveChecksChanged(GetSelf(), enabled, authority);
}
bool Service::GetForceNextCheck(void) const
@ -177,7 +177,7 @@ void Service::SetForceNextCheck(bool forced, const String& authority)
{
SetForceNextCheckRaw(forced);
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnForceNextCheckChanged), GetSelf(), forced, authority));
OnForceNextCheckChanged(GetSelf(), forced, authority);
}
void Service::ProcessCheckResult(const CheckResult::Ptr& cr, const String& authority)
@ -367,15 +367,13 @@ void Service::ProcessCheckResult(const CheckResult::Ptr& cr, const String& autho
// " threshold: " + Convert::ToString(GetFlappingThreshold()) +
// "% current: " + Convert::ToString(GetFlappingCurrent()) + "%.");
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnNewCheckResult), GetSelf(), cr, authority));
OnNewCheckResult(GetSelf(), cr, authority);
OnStateChanged(GetSelf());
if (hardChange) {
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnStateChange), GetSelf(), cr, StateTypeHard, authority));
}
else if (stateChange) {
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnStateChange), GetSelf(), cr, StateTypeSoft, authority));
}
if (hardChange)
OnStateChange(GetSelf(), cr, StateTypeHard, authority);
else if (stateChange)
OnStateChange(GetSelf(), cr, StateTypeSoft, authority);
if (call_eventhandler)
ExecuteEventHandler();

View File

@ -79,7 +79,7 @@ String Service::AddComment(CommentType entryType, const String& author,
l_CommentsCache[uid] = GetSelf();
}
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnCommentAdded), GetSelf(), comment, authority));
OnCommentAdded(GetSelf(), comment, authority);
return uid;
}
@ -126,7 +126,7 @@ void Service::RemoveComment(const String& id, const String& authority)
l_CommentsCache.erase(id);
}
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnCommentRemoved), owner, comment, authority));
OnCommentRemoved(owner, comment, authority);
}
String Service::GetCommentIDFromLegacyID(int id)

View File

@ -99,7 +99,7 @@ String Service::AddDowntime(const String& author, const String& comment,
Log(LogWarning, "icinga", "added downtime with ID '" + Convert::ToString(downtime->GetLegacyId()) + "'.");
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnDowntimeAdded), GetSelf(), downtime, authority));
OnDowntimeAdded(GetSelf(), downtime, authority);
return uid;
}
@ -132,7 +132,7 @@ void Service::RemoveDowntime(const String& id, bool cancelled, const String& aut
Log(LogWarning, "icinga", "removed downtime with ID '" + Convert::ToString(downtime->GetLegacyId()) + "' from service '" + owner->GetName() + "'.");
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnDowntimeRemoved), owner, downtime, authority));
OnDowntimeRemoved(owner, downtime, authority);
}
void Service::TriggerDowntimes(void)
@ -185,7 +185,7 @@ void Service::TriggerDowntime(const String& id)
TriggerDowntime(tid);
}
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnDowntimeTriggered), owner, downtime));
OnDowntimeTriggered(owner, downtime);
}
String Service::GetDowntimeIDFromLegacyID(int id)

View File

@ -50,7 +50,7 @@ void Service::SetEnableFlapping(bool enabled, const String& authority)
SetEnableFlappingRaw(enabled);
OnFlappingChanged(GetSelf(), enabled ? FlappingEnabled : FlappingDisabled);
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnEnableFlappingChanged), GetSelf(), enabled, authority));
OnEnableFlappingChanged(GetSelf(), enabled, authority);
}
void Service::UpdateFlappingStatus(bool stateChange)

View File

@ -171,7 +171,7 @@ void Service::SetEnableNotifications(bool enabled, const String& authority)
{
SetEnableNotificationsRaw(enabled);
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnEnableNotificationsChanged), GetSelf(), enabled, authority));
OnEnableNotificationsChanged(GetSelf(), enabled, authority);
}
bool Service::GetForceNextNotification(void) const
@ -183,5 +183,5 @@ void Service::SetForceNextNotification(bool forced, const String& authority)
{
SetForceNextNotificationRaw(forced);
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnForceNextNotificationChanged), GetSelf(), forced, authority));
OnForceNextNotificationChanged(GetSelf(), forced, authority);
}

View File

@ -72,9 +72,10 @@ void Service::OnConfigLoaded(void)
}
}
Host::Ptr host = GetHost();
if (host)
host->AddService(GetSelf());
m_Host = Host::GetByName(GetHostRaw());
if (m_Host)
m_Host->AddService(GetSelf());
UpdateSlaveNotifications();
}
@ -95,7 +96,7 @@ Service::Ptr Service::GetByNamePair(const String& hostName, const String& servic
Host::Ptr Service::GetHost(void) const
{
return Host::GetByName(GetHostRaw());
return m_Host;
}
bool Service::IsHostCheck(void) const
@ -199,8 +200,7 @@ void Service::AcknowledgeProblem(const String& author, const String& comment, Ac
OnNotificationsRequested(GetSelf(), NotificationAcknowledgement, GetLastCheckResult(), author, comment);
boost::function<void (void)> f = boost::bind(boost::ref(Service::OnAcknowledgementSet), GetSelf(), author, comment, type, expiry, authority);
Utility::QueueAsyncCallback(f);
OnAcknowledgementSet(GetSelf(), author, comment, type, expiry, authority);
}
void Service::ClearAcknowledgement(const String& authority)
@ -210,7 +210,7 @@ void Service::ClearAcknowledgement(const String& authority)
SetAcknowledgementRaw(AcknowledgementNone);
SetAcknowledgementExpiry(0);
Utility::QueueAsyncCallback(boost::bind(boost::ref(OnAcknowledgementCleared), GetSelf(), authority));
OnAcknowledgementCleared(GetSelf(), authority);
}
std::set<Host::Ptr> Service::GetParentHosts(void) const
@ -228,7 +228,7 @@ std::set<Host::Ptr> Service::GetParentHosts(void) const
if (dependencies) {
ObjectLock olock(dependencies);
BOOST_FOREACH(const Value& dependency, dependencies) {
BOOST_FOREACH(const String& dependency, dependencies) {
Host::Ptr host = Host::GetByName(dependency);
if (!host)

View File

@ -255,6 +255,8 @@ protected:
virtual void OnConfigLoaded(void);
private:
Host::Ptr m_Host;
bool m_CheckRunning;
long m_SchedulingOffset;