From 5e9f95c00783c4c304e7c3f212fd6a4423659a9a Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Mon, 5 Sep 2022 15:28:36 +0200 Subject: [PATCH] Icinga DB: on every check result update state only 1x, not 3x in a row Before (time: vertical, stack: horizontal): * Checkable::ExecuteCheck * Checkable::UpdateNextCheck * IcingaDB::NextCheckChangedHandler * HSET icinga:host:state * HSET icinga:checksum:host:state * ZADD icinga:nextupdate:host * RandomCheckTask::ScriptFunc * Checkable::ProcessCheckResult * Checkable::UpdateNextCheck * IcingaDB::NextCheckChangedHandler * HSET icinga:host:state * HSET icinga:checksum:host:state * ZADD icinga:nextupdate:host * IcingaDB::NewCheckResultHandler * HSET icinga:host:state * HSET icinga:checksum:host:state * ZADD icinga:nextupdate:host * IcingaDB::StateChangeHandler * XADD icinga:runtime:state * IcingaDB::ForwardHistoryEntries * XADD icinga:history:stream:state After: * Checkable::ExecuteCheck * Checkable::UpdateNextCheck * RandomCheckTask::ScriptFunc * Checkable::ProcessCheckResult * Checkable::UpdateNextCheck * IcingaDB::NewCheckResultHandler * HSET icinga:host:state * HSET icinga:checksum:host:state * ZADD icinga:nextupdate:host * IcingaDB::StateChangeHandler * XADD icinga:runtime:state * IcingaDB::ForwardHistoryEntries * XADD icinga:history:stream:state The first state + nextupdate (for overdue) update comes from next_check being set to now + interval immediately before doing the actual check (not to trigger it twice). This update is not only not important for the end user, but even inappropriate. The end user SHALL see next_check being e.g. in -4s, not 5m, as the check is running at the moment. The second one is just redundant as IcingaDB::NewCheckResultHandler (the third one) is called anyway and will update state + nextupdate as well. --- lib/icingadb/icingadb-objects.cpp | 6 +++--- lib/icingadb/icingadb.hpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/icingadb/icingadb-objects.cpp b/lib/icingadb/icingadb-objects.cpp index 6834726c2..619a8368e 100644 --- a/lib/icingadb/icingadb-objects.cpp +++ b/lib/icingadb/icingadb-objects.cpp @@ -126,8 +126,8 @@ void IcingaDB::ConfigStaticInitialize() IcingaDB::NewCheckResultHandler(checkable); }); - Checkable::OnNextCheckChanged.connect([](const Checkable::Ptr& checkable, const Value&) { - IcingaDB::NextCheckChangedHandler(checkable); + Checkable::OnNextCheckUpdated.connect([](const Checkable::Ptr& checkable) { + IcingaDB::NextCheckUpdatedHandler(checkable); }); Service::OnHostProblemChanged.connect([](const Service::Ptr& service, const CheckResult::Ptr&, const MessageOrigin::Ptr&) { @@ -2805,7 +2805,7 @@ void IcingaDB::NewCheckResultHandler(const Checkable::Ptr& checkable) } } -void IcingaDB::NextCheckChangedHandler(const Checkable::Ptr& checkable) +void IcingaDB::NextCheckUpdatedHandler(const Checkable::Ptr& checkable) { for (auto& rw : ConfigType::GetObjectsByType()) { rw->UpdateState(checkable, StateUpdate::Volatile); diff --git a/lib/icingadb/icingadb.hpp b/lib/icingadb/icingadb.hpp index 21311453e..6652d9c1f 100644 --- a/lib/icingadb/icingadb.hpp +++ b/lib/icingadb/icingadb.hpp @@ -179,7 +179,7 @@ private: static void CommentRemovedHandler(const Comment::Ptr& comment); static void FlappingChangeHandler(const Checkable::Ptr& checkable, double changeTime); static void NewCheckResultHandler(const Checkable::Ptr& checkable); - static void NextCheckChangedHandler(const Checkable::Ptr& checkable); + static void NextCheckUpdatedHandler(const Checkable::Ptr& checkable); static void HostProblemChangedHandler(const Service::Ptr& service); static void AcknowledgementSetHandler(const Checkable::Ptr& checkable, const String& author, const String& comment, AcknowledgementType type, bool persistent, double changeTime, double expiry); static void AcknowledgementClearedHandler(const Checkable::Ptr& checkable, const String& removedBy, double changeTime);