Remove the HostUnreachable state.

Fixes #5944
This commit is contained in:
Gunnar Beutner 2014-04-08 08:54:49 +02:00
parent 2ab208e452
commit e560e1e00c
12 changed files with 38 additions and 80 deletions

View File

@ -127,9 +127,14 @@ void CompatLogger::CheckResultHandler(const Checkable::Ptr& checkable, const Che
<< output << "" << output << ""
<< ""; << "";
} else { } else {
String state = Host::StateToString(Host::CalculateState(static_cast<ServiceState>(state_after)));
if (!reachable_after)
state = "UNREACHABLE";
msgbuf << "HOST ALERT: " msgbuf << "HOST ALERT: "
<< host->GetName() << ";" << host->GetName() << ";"
<< Host::StateToString(Host::CalculateState(static_cast<ServiceState>(state_after), host_reachable_after)) << ";" << state << ";"
<< Host::StateTypeToString(static_cast<StateType>(stateType_after)) << ";" << Host::StateTypeToString(static_cast<StateType>(stateType_after)) << ";"
<< attempt_after << ";" << attempt_after << ";"
<< output << "" << output << ""
@ -245,7 +250,7 @@ void CompatLogger::NotificationSentHandler(const Notification::Ptr& notification
if (service) if (service)
notification_type_str = Service::StateToString(service->GetState()); notification_type_str = Service::StateToString(service->GetState());
else else
notification_type_str = Host::StateToString(host->GetState()); notification_type_str = host->IsReachable() ? Host::StateToString(host->GetState()) : "UNREACHABLE";
} }
String author_comment = ""; String author_comment = "";
@ -277,7 +282,7 @@ void CompatLogger::NotificationSentHandler(const Notification::Ptr& notification
<< user->GetName() << ";" << user->GetName() << ";"
<< host->GetName() << ";" << host->GetName() << ";"
<< notification_type_str << " " << notification_type_str << " "
<< "(" << Host::StateToString(host->GetState()) << ");" << "(" << (host->IsReachable() ? Host::StateToString(host->GetState()) : "UNREACHABLE") << ");"
<< command_name << ";" << command_name << ";"
<< output << ";" << output << ";"
<< author_comment << author_comment
@ -382,7 +387,7 @@ void CompatLogger::EventCommandHandler(const Checkable::Ptr& checkable)
} else { } else {
msgbuf << "HOST EVENT HANDLER: " msgbuf << "HOST EVENT HANDLER: "
<< host->GetName() << ";" << host->GetName() << ";"
<< Host::StateToString(host->GetState()) << ";" << (host->IsReachable() ? Host::StateToString(host->GetState()) : "UNREACHABLE") << ";"
<< Host::StateTypeToString(host->GetStateType()) << ";" << Host::StateTypeToString(host->GetStateType()) << ";"
<< current_attempt << ";" << current_attempt << ";"
<< event_command_name; << event_command_name;
@ -456,7 +461,7 @@ void CompatLogger::ReopenFile(bool rotate)
std::ostringstream msgbuf; std::ostringstream msgbuf;
msgbuf << "CURRENT HOST STATE: " msgbuf << "CURRENT HOST STATE: "
<< host->GetName() << ";" << host->GetName() << ";"
<< Host::StateToString(host->GetState()) << ";" << (host->IsReachable() ? Host::StateToString(host->GetState()) : "UNREACHABLE") << ";"
<< Host::StateTypeToString(host->GetStateType()) << ";" << Host::StateTypeToString(host->GetStateType()) << ";"
<< host->GetCheckAttempt() << ";" << host->GetCheckAttempt() << ";"
<< output << ""; << output << "";

View File

@ -354,7 +354,7 @@ void StatusDataWriter::DumpCheckableStatusAttrs(std::ostream& fp, const Checkabl
if (service) if (service)
fp << "\t" << "current_state=" << service->GetState() << "\n"; fp << "\t" << "current_state=" << service->GetState() << "\n";
else else
fp << "\t" << "current_state=" << host->GetState() << "\n"; fp << "\t" << "current_state=" << (host->IsReachable() ? host->GetState() : 2) << "\n";
fp << "\t" "state_type=" << checkable->GetStateType() << "\n" fp << "\t" "state_type=" << checkable->GetStateType() << "\n"
"\t" "plugin_output=" << CompatUtility::GetCheckResultOutput(cr) << "\n" "\t" "plugin_output=" << CompatUtility::GetCheckResultOutput(cr) << "\n"

View File

@ -197,7 +197,7 @@ Value HostGroupsTable::NumHostsUnreachAccessor(const Value& row)
int num_hosts = 0; int num_hosts = 0;
BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) { BOOST_FOREACH(const Host::Ptr& host, static_cast<HostGroup::Ptr>(row)->GetMembers()) {
if (host->GetState() == HostUnreachable) if (!host->IsReachable())
num_hosts++; num_hosts++;
} }

View File

@ -660,7 +660,7 @@ Value HostsTable::StateAccessor(const Value& row)
if (!host) if (!host)
return Empty; return Empty;
return host->GetState(); return host->IsReachable() ? host->GetState() : 2;
} }
Value HostsTable::StateTypeAccessor(const Value& row) Value HostsTable::StateTypeAccessor(const Value& row)

View File

@ -127,6 +127,7 @@ void GraphiteWriter::CheckResultHandler(const Checkable::Ptr& checkable, const C
SendMetric(prefix, "current_attempt", checkable->GetCheckAttempt()); SendMetric(prefix, "current_attempt", checkable->GetCheckAttempt());
SendMetric(prefix, "max_check_attempts", checkable->GetMaxCheckAttempts()); SendMetric(prefix, "max_check_attempts", checkable->GetMaxCheckAttempts());
SendMetric(prefix, "state_type", checkable->GetStateType()); SendMetric(prefix, "state_type", checkable->GetStateType());
SendMetric(prefix, "reachable", checkable->IsReachable());
SendMetric(prefix, "latency", Service::CalculateLatency(cr)); SendMetric(prefix, "latency", Service::CalculateLatency(cr));
SendMetric(prefix, "execution_time", Service::CalculateExecutionTime(cr)); SendMetric(prefix, "execution_time", Service::CalculateExecutionTime(cr));
SendPerfdata(prefix, cr); SendPerfdata(prefix, cr);

View File

@ -596,7 +596,6 @@ void DbEvents::AddCheckResultLogHistory(const Checkable::Ptr& checkable, const C
long stateType_after = vars_after->Get("state_type"); long stateType_after = vars_after->Get("state_type");
long attempt_after = vars_after->Get("attempt"); long attempt_after = vars_after->Get("attempt");
bool reachable_after = vars_after->Get("reachable"); bool reachable_after = vars_after->Get("reachable");
bool host_reachable_after = vars_after->Get("host_reachable");
Dictionary::Ptr vars_before = cr->GetVarsBefore(); Dictionary::Ptr vars_before = cr->GetVarsBefore();
@ -651,9 +650,14 @@ void DbEvents::AddCheckResultLogHistory(const Checkable::Ptr& checkable, const C
return; return;
} }
} else { } else {
String state = Host::StateToString(Host::CalculateState(static_cast<ServiceState>(state_after)));
if (!reachable_after)
state = "UNREACHABLE";
msgbuf << "HOST ALERT: " msgbuf << "HOST ALERT: "
<< host->GetName() << ";" << host->GetName() << ";"
<< Host::StateToString(Host::CalculateState(static_cast<ServiceState>(state_after), host_reachable_after)) << ";" << state << ";"
<< Service::StateTypeToString(static_cast<StateType>(stateType_after)) << ";" << Service::StateTypeToString(static_cast<StateType>(stateType_after)) << ";"
<< attempt_after << ";" << attempt_after << ";"
<< output << "" << output << ""
@ -666,14 +670,13 @@ void DbEvents::AddCheckResultLogHistory(const Checkable::Ptr& checkable, const C
case HostDown: case HostDown:
type = LogEntryTypeHostDown; type = LogEntryTypeHostDown;
break; break;
case HostUnreachable:
type = LogEntryTypeHostUnreachable;
break;
default: default:
Log(LogCritical, "db_ido", "Unknown host state: " + Convert::ToString(state_after)); Log(LogCritical, "db_ido", "Unknown host state: " + Convert::ToString(state_after));
return; return;
} }
if (!reachable_after)
type = LogEntryTypeHostUnreachable;
} }
AddLogHistory(checkable, msgbuf.str(), type); AddLogHistory(checkable, msgbuf.str(), type);

View File

@ -132,7 +132,7 @@ Dictionary::Ptr HostDbObject::GetStatusFields(void) const
fields->Set("check_source", cr->GetCheckSource()); fields->Set("check_source", cr->GetCheckSource());
} }
fields->Set("current_state", host->GetState()); fields->Set("current_state", host->IsReachable() ? host->GetState() : 2);
fields->Set("has_been_checked", CompatUtility::GetCheckableHasBeenChecked(host)); fields->Set("has_been_checked", CompatUtility::GetCheckableHasBeenChecked(host));
fields->Set("should_be_scheduled", CompatUtility::GetCheckableShouldBeScheduled(host)); fields->Set("should_be_scheduled", CompatUtility::GetCheckableShouldBeScheduled(host));
fields->Set("current_check_attempt", host->GetCheckAttempt()); fields->Set("current_check_attempt", host->GetCheckAttempt());

View File

@ -10,8 +10,7 @@ code {{{
enum HostState enum HostState
{ {
HostUp = 0, HostUp = 0,
HostDown = 1, HostDown = 1
HostUnreachable = 2
}; };
/** /**

View File

@ -140,11 +140,12 @@ HostStatistics CIB::CalculateHostStats(void)
BOOST_FOREACH(const Host::Ptr& host, DynamicType::GetObjects<Host>()) { BOOST_FOREACH(const Host::Ptr& host, DynamicType::GetObjects<Host>()) {
ObjectLock olock(host); ObjectLock olock(host);
if (host->GetState() == HostUp) if (host->IsReachable()) {
hs.hosts_up++; if (host->GetState() == HostUp)
if (host->GetState() == HostDown) hs.hosts_up++;
hs.hosts_down++; if (host->GetState() == HostDown)
if (host->GetState() == HostUnreachable) hs.hosts_down++;
} else
hs.hosts_unreachable++; hs.hosts_unreachable++;
if (!host->GetLastCheckResult()) if (!host->GetLastCheckResult())

View File

@ -134,11 +134,8 @@ Service::Ptr Host::GetServiceByShortName(const Value& name)
} }
} }
HostState Host::CalculateState(ServiceState state, bool reachable) HostState Host::CalculateState(ServiceState state)
{ {
if (!reachable)
return HostUnreachable;
switch (state) { switch (state) {
case StateOK: case StateOK:
case StateWarning: case StateWarning:
@ -152,49 +149,21 @@ HostState Host::GetState(void) const
{ {
ASSERT(!OwnsLock()); ASSERT(!OwnsLock());
if (!IsReachable()) return CalculateState(GetStateRaw());
return HostUnreachable;
switch (GetStateRaw()) {
case StateOK:
case StateWarning:
return HostUp;
default:
return HostDown;
}
} }
HostState Host::GetLastState(void) const HostState Host::GetLastState(void) const
{ {
ASSERT(!OwnsLock()); ASSERT(!OwnsLock());
if (!IsReachable()) return CalculateState(GetLastStateRaw());
return HostUnreachable;
switch (GetLastStateRaw()) {
case StateOK:
case StateWarning:
return HostUp;
default:
return HostDown;
}
} }
HostState Host::GetLastHardState(void) const HostState Host::GetLastHardState(void) const
{ {
ASSERT(!OwnsLock()); ASSERT(!OwnsLock());
if (!IsReachable()) return CalculateState(GetLastHardStateRaw());
return HostUnreachable;
switch (GetLastHardStateRaw()) {
case StateOK:
case StateWarning:
return HostUp;
default:
return HostDown;
}
} }
double Host::GetLastStateUp(void) const double Host::GetLastStateUp(void) const
@ -218,12 +187,8 @@ HostState Host::StateFromString(const String& state)
{ {
if (state == "UP") if (state == "UP")
return HostUp; return HostUp;
else if (state == "DOWN")
return HostDown;
else if (state == "UNREACHABLE")
return HostUnreachable;
else else
return HostUnreachable; return HostDown;
} }
String Host::StateToString(HostState state) String Host::StateToString(HostState state)
@ -233,8 +198,6 @@ String Host::StateToString(HostState state)
return "UP"; return "UP";
case HostDown: case HostDown:
return "DOWN"; return "DOWN";
case HostUnreachable:
return "UNREACHABLE";
default: default:
return "INVALID"; return "INVALID";
} }
@ -319,20 +282,7 @@ bool Host::ResolveMacro(const String& macro, const CheckResult::Ptr&, String *re
CheckResult::Ptr cr = GetLastCheckResult(); CheckResult::Ptr cr = GetLastCheckResult();
if (key == "state") { if (key == "state") {
switch (GetState()) { *result = StateToString(GetState());
case HostUnreachable:
*result = "UNREACHABLE";
break;
case HostUp:
*result = "UP";
break;
case HostDown:
*result = "DOWN";
break;
default:
ASSERT(0);
}
return true; return true;
} else if (key == "stateid") { } else if (key == "stateid") {
*result = Convert::ToString(GetState()); *result = Convert::ToString(GetState());

View File

@ -53,7 +53,7 @@ public:
int GetTotalServices(void) const; int GetTotalServices(void) const;
static HostState CalculateState(ServiceState state, bool reachable); static HostState CalculateState(ServiceState state);
HostState GetState(void) const; HostState GetState(void) const;
HostState GetLastState(void) const; HostState GetLastState(void) const;

View File

@ -411,8 +411,7 @@ int icinga::HostStateToFilter(HostState state)
switch (state) { switch (state) {
case HostUp: case HostUp:
return StateFilterUp; return StateFilterUp;
case HostDown: /* fall through */ case HostDown:
case HostUnreachable:
return StateFilterDown; return StateFilterDown;
default: default:
VERIFY(!"Invalid state type."); VERIFY(!"Invalid state type.");