mirror of https://github.com/Icinga/icinga2.git
Merge pull request #9154 from Icinga/bugfix/icingadb-reachabilitychangehandler-9143
Icinga DB: ensure is_reachable and severity don't miss updates
This commit is contained in:
commit
1b0ad099f1
|
@ -215,10 +215,6 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
|
||||||
|
|
||||||
ResetNotificationNumbers();
|
ResetNotificationNumbers();
|
||||||
SaveLastState(ServiceOK, cr->GetExecutionEnd());
|
SaveLastState(ServiceOK, cr->GetExecutionEnd());
|
||||||
|
|
||||||
/* update reachability for child objects in OK state */
|
|
||||||
if (!children.empty())
|
|
||||||
OnReachabilityChanged(this, cr, children, origin);
|
|
||||||
} else {
|
} else {
|
||||||
/* OK -> NOT-OK change, first SOFT state. Reset attempt counter. */
|
/* OK -> NOT-OK change, first SOFT state. Reset attempt counter. */
|
||||||
if (IsStateOK(old_state)) {
|
if (IsStateOK(old_state)) {
|
||||||
|
@ -241,10 +237,6 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
|
||||||
if (!IsStateOK(cr->GetState())) {
|
if (!IsStateOK(cr->GetState())) {
|
||||||
SaveLastState(cr->GetState(), cr->GetExecutionEnd());
|
SaveLastState(cr->GetState(), cr->GetExecutionEnd());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update reachability for child objects in NOT-OK state */
|
|
||||||
if (!children.empty())
|
|
||||||
OnReachabilityChanged(this, cr, children, origin);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (recovery) {
|
if (recovery) {
|
||||||
|
@ -514,6 +506,10 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
|
||||||
SetSuppressedNotifications(suppressed_types_after);
|
SetSuppressedNotifications(suppressed_types_after);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* update reachability for child objects */
|
||||||
|
if ((stateChange || hardChange) && !children.empty())
|
||||||
|
OnReachabilityChanged(this, cr, children, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Checkable::ExecuteRemoteCheck(const Dictionary::Ptr& resolvedMacros)
|
void Checkable::ExecuteRemoteCheck(const Dictionary::Ptr& resolvedMacros)
|
||||||
|
|
|
@ -84,6 +84,10 @@ void IcingaDB::ConfigStaticInitialize()
|
||||||
AcknowledgementClearedHandler(checkable, removedBy, changeTime);
|
AcknowledgementClearedHandler(checkable, removedBy, changeTime);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Checkable::OnReachabilityChanged.connect([](const Checkable::Ptr&, const CheckResult::Ptr&, std::set<Checkable::Ptr> children, const MessageOrigin::Ptr&) {
|
||||||
|
IcingaDB::ReachabilityChangeHandler(children);
|
||||||
|
});
|
||||||
|
|
||||||
/* triggered on create, update and delete objects */
|
/* triggered on create, update and delete objects */
|
||||||
ConfigObject::OnActiveChanged.connect([](const ConfigObject::Ptr& object, const Value&) {
|
ConfigObject::OnActiveChanged.connect([](const ConfigObject::Ptr& object, const Value&) {
|
||||||
IcingaDB::VersionChangedHandler(object);
|
IcingaDB::VersionChangedHandler(object);
|
||||||
|
@ -2599,6 +2603,15 @@ void IcingaDB::StateChangeHandler(const ConfigObject::Ptr& object, const CheckRe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IcingaDB::ReachabilityChangeHandler(const std::set<Checkable::Ptr>& children)
|
||||||
|
{
|
||||||
|
for (const IcingaDB::Ptr& rw : ConfigType::GetObjectsByType<IcingaDB>()) {
|
||||||
|
for (auto& checkable : children) {
|
||||||
|
rw->UpdateState(checkable, StateUpdate::Full);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void IcingaDB::VersionChangedHandler(const ConfigObject::Ptr& object)
|
void IcingaDB::VersionChangedHandler(const ConfigObject::Ptr& object)
|
||||||
{
|
{
|
||||||
Type::Ptr type = object->GetReflectionType();
|
Type::Ptr type = object->GetReflectionType();
|
||||||
|
|
|
@ -136,6 +136,7 @@ private:
|
||||||
static String GetLowerCaseTypeNameDB(const ConfigObject::Ptr& obj);
|
static String GetLowerCaseTypeNameDB(const ConfigObject::Ptr& obj);
|
||||||
static bool PrepareObject(const ConfigObject::Ptr& object, Dictionary::Ptr& attributes, Dictionary::Ptr& checkSums);
|
static bool PrepareObject(const ConfigObject::Ptr& object, Dictionary::Ptr& attributes, Dictionary::Ptr& checkSums);
|
||||||
|
|
||||||
|
static void ReachabilityChangeHandler(const std::set<Checkable::Ptr>& children);
|
||||||
static void StateChangeHandler(const ConfigObject::Ptr& object, const CheckResult::Ptr& cr, StateType type);
|
static void StateChangeHandler(const ConfigObject::Ptr& object, const CheckResult::Ptr& cr, StateType type);
|
||||||
static void VersionChangedHandler(const ConfigObject::Ptr& object);
|
static void VersionChangedHandler(const ConfigObject::Ptr& object);
|
||||||
static void DowntimeStartedHandler(const Downtime::Ptr& downtime);
|
static void DowntimeStartedHandler(const Downtime::Ptr& downtime);
|
||||||
|
|
Loading…
Reference in New Issue