From 95f13d864f0f35162050602951eaaf6cd2aea0b9 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Mon, 25 Nov 2019 17:31:33 +0100 Subject: [PATCH] IcingaDB#SendStatusUpdate(): don't always set icinga:history:stream:state#{,long_}output --- lib/icingadb/icingadb-objects.cpp | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/lib/icingadb/icingadb-objects.cpp b/lib/icingadb/icingadb-objects.cpp index 4fa5e3b14..f88a472ba 100644 --- a/lib/icingadb/icingadb-objects.cpp +++ b/lib/icingadb/icingadb-objects.cpp @@ -90,19 +90,6 @@ void IcingaDB::ConfigStaticInitialize() Checkable::OnFlappingChanged.connect(&IcingaDB::FlappingChangedHandler); } -static std::pair SplitOutput(String output) -{ - String longOutput; - auto pos (output.Find("\n")); - - if (pos != String::NPos) { - longOutput = output.SubStr(pos + 1u); - output.erase(output.Begin() + pos, output.End()); - } - - return {std::move(output), std::move(longOutput)}; -} - void IcingaDB::UpdateAllConfigObjects() { double startTime = Utility::GetTime(); @@ -1171,8 +1158,6 @@ void IcingaDB::SendStatusUpdate(const ConfigObject::Ptr& object, const CheckResu m_Rcon->FireAndForgetQuery(std::move(streamadd)); - auto output (SplitOutput(cr ? cr->GetOutput() : "")); - int hard_state; if (!cr) { hard_state = 99; @@ -1190,8 +1175,6 @@ void IcingaDB::SendStatusUpdate(const ConfigObject::Ptr& object, const CheckResu "attempt", Convert::ToString(checkable->GetCheckAttempt()), "previous_soft_state", Convert::ToString(GetPreviousState(checkable, service, StateTypeSoft)), "previous_hard_state", Convert::ToString(GetPreviousState(checkable, service, StateTypeHard)), - "output", Utility::ValidateUTF8(std::move(output.first)), - "long_output", Utility::ValidateUTF8(std::move(output.second)), "max_check_attempts", Convert::ToString(checkable->GetMaxCheckAttempts()), "event_time", Convert::ToString(TimestampToMilliseconds(cr ? cr->GetExecutionEnd() : Utility::GetTime())), "event_id", Utility::NewUniqueID(), @@ -1199,6 +1182,19 @@ void IcingaDB::SendStatusUpdate(const ConfigObject::Ptr& object, const CheckResu }); if (cr) { + auto output (cr->GetOutput()); + auto pos (output.Find("\n")); + + if (pos != String::NPos) { + auto longOutput (output.SubStr(pos + 1u)); + output.erase(output.Begin() + pos, output.End()); + + xAdd.emplace_back("long_output"); + xAdd.emplace_back(Utility::ValidateUTF8(std::move(longOutput))); + } + + xAdd.emplace_back("output"); + xAdd.emplace_back(Utility::ValidateUTF8(std::move(output))); xAdd.emplace_back("check_source"); xAdd.emplace_back(cr->GetCheckSource()); }