Cleaned up status calculation code.

This commit is contained in:
Gunnar Beutner 2012-07-24 15:38:30 +02:00
parent d79c3270df
commit 0423f42d03
6 changed files with 21 additions and 46 deletions

View File

@ -301,6 +301,12 @@ time_t Service::GetLastHardStateChange(void) const
void Service::ApplyCheckResult(const CheckResult& cr) void Service::ApplyCheckResult(const CheckResult& cr)
{ {
time_t now;
time(&now);
ServiceState old_state = GetState();
ServiceStateType old_stateType = GetStateType();
long attempt = GetCurrentCheckAttempt(); long attempt = GetCurrentCheckAttempt();
if (cr.GetState() == StateOK) { if (cr.GetState() == StateOK) {
@ -320,6 +326,17 @@ void Service::ApplyCheckResult(const CheckResult& cr)
SetCurrentCheckAttempt(attempt); SetCurrentCheckAttempt(attempt);
SetState(cr.GetState()); SetState(cr.GetState());
SetLastCheckResult(cr);
if (old_state != GetState()) {
SetLastStateChange(now);
if (old_stateType != GetStateType())
SetLastHardStateChange(now);
}
UpdateNextCheck();
} }
ServiceState Service::StateFromString(const string& state) ServiceState Service::StateFromString(const string& state)

View File

@ -61,16 +61,6 @@ void ServiceStatusMessage::SetStateType(ServiceStateType type)
Set("state_type", static_cast<long>(type)); Set("state_type", static_cast<long>(type));
} }
bool ServiceStatusMessage::GetCurrentCheckAttempt(long *attempt) const
{
return Get("current_attempt", attempt);
}
void ServiceStatusMessage::SetCurrentCheckAttempt(long attempt)
{
Set("current_attempt", attempt);
}
bool ServiceStatusMessage::GetCheckResult(CheckResult *cr) const bool ServiceStatusMessage::GetCheckResult(CheckResult *cr) const
{ {
Dictionary::Ptr obj; Dictionary::Ptr obj;

View File

@ -38,9 +38,6 @@ public:
bool GetStateType(ServiceStateType *type) const; bool GetStateType(ServiceStateType *type) const;
void SetStateType(ServiceStateType type); void SetStateType(ServiceStateType type);
bool GetCurrentCheckAttempt(long *attempt) const;
void SetCurrentCheckAttempt(long attempt);
bool GetCheckResult(CheckResult *cr) const; bool GetCheckResult(CheckResult *cr) const;
void SetCheckResult(CheckResult cr); void SetCheckResult(CheckResult cr);
}; };

View File

@ -107,17 +107,11 @@ void CheckerComponent::CheckCompletedHandler(Service service, const ScriptTask::
if (vresult.IsObjectType<Dictionary>()) { if (vresult.IsObjectType<Dictionary>()) {
CheckResult result = CheckResult(static_cast<Dictionary::Ptr>(vresult)); CheckResult result = CheckResult(static_cast<Dictionary::Ptr>(vresult));
/* update service state */
service.ApplyCheckResult(result);
RequestMessage rm; RequestMessage rm;
rm.SetMethod("checker::CheckResult"); rm.SetMethod("checker::CheckResult");
ServiceStatusMessage params; ServiceStatusMessage params;
params.SetService(service.GetName()); params.SetService(service.GetName());
params.SetState(service.GetState());
params.SetStateType(service.GetStateType());
params.SetCurrentCheckAttempt(service.GetCurrentCheckAttempt());
params.SetCheckResult(result); params.SetCheckResult(result);
rm.SetParams(params); rm.SetParams(params);

View File

@ -91,35 +91,9 @@ void CIBSyncComponent::ServiceStatusRequestHandler(const Endpoint::Ptr& sender,
Service service = Service::GetByName(svcname); Service service = Service::GetByName(svcname);
ServiceState state;
ServiceStateType stateType;
if (params.GetState(&state) && params.GetStateType(&stateType)) {
ServiceState old_state = service.GetState();
ServiceStateType old_stateType = service.GetStateType();
if (state != old_state) {
time_t now;
time(&now);
service.SetLastStateChange(now);
if (old_stateType != stateType)
service.SetLastHardStateChange(now);
}
service.SetState(state);
service.SetStateType(stateType);
}
long attempt;
if (params.GetCurrentCheckAttempt(&attempt))
service.SetCurrentCheckAttempt(attempt);
CheckResult cr; CheckResult cr;
if (params.GetCheckResult(&cr)) if (params.GetCheckResult(&cr))
service.SetLastCheckResult(cr); service.ApplyCheckResult(cr);
service.UpdateNextCheck();
time_t now; time_t now;
time(&now); time(&now);

View File

@ -152,6 +152,9 @@ void ConvenienceComponent::HostCommittedHandler(const ConfigItem::Ptr& item)
if (oldServices) { if (oldServices) {
ConfigItem::Ptr service; ConfigItem::Ptr service;
BOOST_FOREACH(tie(tuples::ignore, service), oldServices) { BOOST_FOREACH(tie(tuples::ignore, service), oldServices) {
if (!service)
continue;
if (!newServices->Contains(service->GetName())) if (!newServices->Contains(service->GetName()))
service->Unregister(); service->Unregister();
} }