Add additional fields

This commit is contained in:
Jean Flach 2018-11-15 15:47:28 +01:00 committed by Michael Friedrich
parent a7e615fbc0
commit 02ecc3e445
2 changed files with 19 additions and 15 deletions

View File

@ -249,7 +249,7 @@ std::set<UserGroup::Ptr> CompatUtility::GetCheckableNotificationUserGroups(const
return usergroups; return usergroups;
} }
/* Used in DB IDO, StatusDataWriter, Livestatus, CompatLogger, GelfWriter. */ /* Used in DB IDO, StatusDataWriter, Livestatus, CompatLogger, GelfWriter, RedisWriter. */
String CompatUtility::GetCheckResultOutput(const CheckResult::Ptr& cr) String CompatUtility::GetCheckResultOutput(const CheckResult::Ptr& cr)
{ {
if (!cr) if (!cr)
@ -264,7 +264,7 @@ String CompatUtility::GetCheckResultOutput(const CheckResult::Ptr& cr)
return raw_output.SubStr(0, line_end); return raw_output.SubStr(0, line_end);
} }
/* Used in DB IDO, StatusDataWriter and Livestatus. */ /* Used in DB IDO, StatusDataWriter and Livestatus, RedisWriter. */
String CompatUtility::GetCheckResultLongOutput(const CheckResult::Ptr& cr) String CompatUtility::GetCheckResultLongOutput(const CheckResult::Ptr& cr)
{ {
if (!cr) if (!cr)

View File

@ -20,6 +20,7 @@
#include "redis/rediswriter.hpp" #include "redis/rediswriter.hpp"
#include "redis/redisconnection.hpp" #include "redis/redisconnection.hpp"
#include "icinga/command.hpp" #include "icinga/command.hpp"
#include "icinga/compatutility.hpp"
#include "base/configtype.hpp" #include "base/configtype.hpp"
#include "base/configobject.hpp" #include "base/configobject.hpp"
#include "icinga/customvarobject.hpp" #include "icinga/customvarobject.hpp"
@ -638,18 +639,27 @@ Dictionary::Ptr RedisWriter::SerializeState(const Object::Ptr& object)
attrs->Set("is_active", checkable->IsActive()); attrs->Set("is_active", checkable->IsActive());
// TODO: Is it possible there is no last checkresult?
CheckResult::Ptr cr = checkable->GetLastCheckResult(); CheckResult::Ptr cr = checkable->GetLastCheckResult();
if (cr) { if (cr) {
attrs->Set("output", JsonEncode(cr->GetOutput())); // TODO: Long Output did not work in my test cases. Need to investigate
//attrs->Set("long_output", ) TODO attrs->Set("output", JsonEncode(CompatUtility::GetCheckResultOutput(cr)));
attrs->Set("performance_data", JsonEncode(cr->GetOutput())); attrs->Set("long_output", CompatUtility::GetCheckResultLongOutput(cr));
attrs->Set("performance_data", JsonEncode(cr->GetPerformanceData()));
attrs->Set("command", JsonEncode(cr->GetCommand())); attrs->Set("command", JsonEncode(cr->GetCommand()));
attrs->Set("execution_time", cr->CalculateExecutionTime()); attrs->Set("execution_time", cr->CalculateExecutionTime());
attrs->Set("latency", cr->CalculateLatency());
} }
//attrs->Set("is_problem", !checkable->IsReachable() && !checkable->IsAcknowledged()); TODO
//attrs->Set("is_handled"); TODO bool isProblem = !checkable->IsStateOK(checkable->GetStateRaw());
attrs->Set("is_problem", isProblem);
bool isHandledNoDependency = isProblem && checkable->IsInDowntime() && checkable->IsAcknowledged();
if (isHost)
attrs->Set("is_handled", isHandledNoDependency);
else
attrs->Set("is_handled", isHandledNoDependency && !checkable->IsStateOK(service->GetHost()->GetStateRaw()));
attrs->Set("is_flapping", checkable->IsFlapping()); attrs->Set("is_flapping", checkable->IsFlapping());
attrs->Set("is_acknowledged", checkable->IsAcknowledged()); attrs->Set("is_acknowledged", checkable->IsAcknowledged());
@ -668,17 +678,11 @@ Dictionary::Ptr RedisWriter::SerializeState(const Object::Ptr& object)
} }
attrs->Set("in_downtime", checkable->IsInDowntime()); attrs->Set("in_downtime", checkable->IsInDowntime());
/*
if (checkable->IsInDowntime())
attrs->Set("downtime_id", checkable->GetDowntimes()); TODO
*/
//attrs->Set("latency", TODO: What);
if (checkable->GetCheckTimeout()) if (checkable->GetCheckTimeout())
attrs->Set("check_timeout", checkable->GetCheckTimeout()); attrs->Set("check_timeout", checkable->GetCheckTimeout());
//sattrs->Set("last_update", TODO: What?); attrs->Set("last_update", Utility::GetTime());
attrs->Set("last_state_change", checkable->GetLastStateChange()); attrs->Set("last_state_change", checkable->GetLastStateChange());
//attrs->Set("last_soft_state", TODO: We want "previous"); //attrs->Set("last_soft_state", TODO: We want "previous");
//attrs->Set("last_hard_state", TODO: We want "previous"); //attrs->Set("last_hard_state", TODO: We want "previous");