mirror of
https://github.com/Icinga/icinga2.git
synced 2025-05-22 07:20:19 +02:00
Cleaned up status calculation code.
This commit is contained in:
parent
d79c3270df
commit
0423f42d03
@ -301,6 +301,12 @@ time_t Service::GetLastHardStateChange(void) const
|
||||
|
||||
void Service::ApplyCheckResult(const CheckResult& cr)
|
||||
{
|
||||
time_t now;
|
||||
time(&now);
|
||||
|
||||
ServiceState old_state = GetState();
|
||||
ServiceStateType old_stateType = GetStateType();
|
||||
|
||||
long attempt = GetCurrentCheckAttempt();
|
||||
|
||||
if (cr.GetState() == StateOK) {
|
||||
@ -320,6 +326,17 @@ void Service::ApplyCheckResult(const CheckResult& cr)
|
||||
|
||||
SetCurrentCheckAttempt(attempt);
|
||||
SetState(cr.GetState());
|
||||
|
||||
SetLastCheckResult(cr);
|
||||
|
||||
if (old_state != GetState()) {
|
||||
SetLastStateChange(now);
|
||||
|
||||
if (old_stateType != GetStateType())
|
||||
SetLastHardStateChange(now);
|
||||
}
|
||||
|
||||
UpdateNextCheck();
|
||||
}
|
||||
|
||||
ServiceState Service::StateFromString(const string& state)
|
||||
|
@ -61,16 +61,6 @@ void ServiceStatusMessage::SetStateType(ServiceStateType 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
|
||||
{
|
||||
Dictionary::Ptr obj;
|
||||
|
@ -38,9 +38,6 @@ public:
|
||||
bool GetStateType(ServiceStateType *type) const;
|
||||
void SetStateType(ServiceStateType type);
|
||||
|
||||
bool GetCurrentCheckAttempt(long *attempt) const;
|
||||
void SetCurrentCheckAttempt(long attempt);
|
||||
|
||||
bool GetCheckResult(CheckResult *cr) const;
|
||||
void SetCheckResult(CheckResult cr);
|
||||
};
|
||||
|
@ -107,17 +107,11 @@ void CheckerComponent::CheckCompletedHandler(Service service, const ScriptTask::
|
||||
if (vresult.IsObjectType<Dictionary>()) {
|
||||
CheckResult result = CheckResult(static_cast<Dictionary::Ptr>(vresult));
|
||||
|
||||
/* update service state */
|
||||
service.ApplyCheckResult(result);
|
||||
|
||||
RequestMessage rm;
|
||||
rm.SetMethod("checker::CheckResult");
|
||||
|
||||
ServiceStatusMessage params;
|
||||
params.SetService(service.GetName());
|
||||
params.SetState(service.GetState());
|
||||
params.SetStateType(service.GetStateType());
|
||||
params.SetCurrentCheckAttempt(service.GetCurrentCheckAttempt());
|
||||
params.SetCheckResult(result);
|
||||
|
||||
rm.SetParams(params);
|
||||
|
@ -91,35 +91,9 @@ void CIBSyncComponent::ServiceStatusRequestHandler(const Endpoint::Ptr& sender,
|
||||
|
||||
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;
|
||||
if (params.GetCheckResult(&cr))
|
||||
service.SetLastCheckResult(cr);
|
||||
|
||||
service.UpdateNextCheck();
|
||||
service.ApplyCheckResult(cr);
|
||||
|
||||
time_t now;
|
||||
time(&now);
|
||||
|
@ -152,6 +152,9 @@ void ConvenienceComponent::HostCommittedHandler(const ConfigItem::Ptr& item)
|
||||
if (oldServices) {
|
||||
ConfigItem::Ptr service;
|
||||
BOOST_FOREACH(tie(tuples::ignore, service), oldServices) {
|
||||
if (!service)
|
||||
continue;
|
||||
|
||||
if (!newServices->Contains(service->GetName()))
|
||||
service->Unregister();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user