break;
CheckTimeView::iterator it = idx.begin();
- Checkable::Ptr checkable = *it;
+ CheckableScheduleInfo csi = *it;
- double wait = checkable->GetNextCheck() - Utility::GetTime();
+ double wait = csi.NextCheck - Utility::GetTime();
if (Checkable::GetPendingChecks() >= GetConcurrentChecks())
wait = 0.5;
continue;
}
+ Checkable::Ptr checkable = csi.Object;
+
m_IdleCheckables.erase(checkable);
bool forced = checkable->GetForceNextCheck();
/* reschedule the checkable if checks are disabled */
if (!check) {
- m_IdleCheckables.insert(checkable);
+ m_IdleCheckables.insert(GetCheckableScheduleInfo(checkable));
lock.unlock();
checkable->UpdateNextCheck();
continue;
}
- m_PendingCheckables.insert(checkable);
+ m_PendingCheckables.insert(GetCheckableScheduleInfo(checkable));
lock.unlock();
m_PendingCheckables.erase(it);
if (checkable->IsActive())
- m_IdleCheckables.insert(checkable);
+ m_IdleCheckables.insert(GetCheckableScheduleInfo(checkable));
m_CV.notify_all();
}
boost::mutex::scoped_lock lock(m_Mutex);
msgbuf << "Pending checkables: " << m_PendingCheckables.size() << "; Idle checkables: " << m_IdleCheckables.size() << "; Checks/s: "
- << (CIB::GetActiveHostChecksStatistics(5) + CIB::GetActiveServiceChecksStatistics(5)) / 5.0;
+ << (CIB::GetActiveHostChecksStatistics(60) + CIB::GetActiveServiceChecksStatistics(60)) / 60.0;
}
Log(LogNotice, "CheckerComponent", msgbuf.str());
if (m_PendingCheckables.find(checkable) != m_PendingCheckables.end())
return;
- m_IdleCheckables.insert(checkable);
+ m_IdleCheckables.insert(GetCheckableScheduleInfo(checkable));
} else {
m_IdleCheckables.erase(checkable);
m_PendingCheckables.erase(checkable);
}
}
+CheckableScheduleInfo CheckerComponent::GetCheckableScheduleInfo(const Checkable::Ptr& checkable)
+{
+ CheckableScheduleInfo csi;
+ csi.Object = checkable;
+ csi.NextCheck = checkable->GetNextCheck();
+ return csi;
+}
+
void CheckerComponent::NextCheckChangedHandler(const Checkable::Ptr& checkable)
{
boost::mutex::scoped_lock lock(m_Mutex);
return;
idx.erase(checkable);
- idx.insert(checkable);
+
+ CheckableScheduleInfo csi = GetCheckableScheduleInfo(checkable);
+ idx.insert(csi);
+
m_CV.notify_all();
}
namespace icinga
{
+/**
+ * @ingroup checker
+ */
+struct CheckableScheduleInfo
+{
+ Checkable::Ptr Object;
+ double NextCheck;
+};
+
/**
* @ingroup checker
*/
/**
* @threadsafety Always.
*/
- double operator()(const Checkable::Ptr& checkable)
+ double operator()(const CheckableScheduleInfo& csi)
{
- return checkable->GetNextCheck();
+ return csi.NextCheck;
}
};
DECLARE_OBJECTNAME(CheckerComponent);
typedef boost::multi_index_container<
- Checkable::Ptr,
+ CheckableScheduleInfo,
boost::multi_index::indexed_by<
- boost::multi_index::ordered_unique<boost::multi_index::identity<Checkable::Ptr> >,
+ boost::multi_index::ordered_unique<boost::multi_index::member<CheckableScheduleInfo, Checkable::Ptr, &CheckableScheduleInfo::Object> >,
boost::multi_index::ordered_non_unique<CheckableNextCheckExtractor>
>
> CheckableSet;
void NextCheckChangedHandler(const Checkable::Ptr& checkable);
void RescheduleCheckTimer(void);
+
+ static CheckableScheduleInfo GetCheckableScheduleInfo(const Checkable::Ptr& checkable);
};
}