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)
|
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)
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user