mirror of
				https://github.com/Icinga/icinga2.git
				synced 2025-11-03 21:25:56 +01: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