mirror of
				https://github.com/Icinga/icinga2.git
				synced 2025-11-04 05:34:12 +01:00 
			
		
		
		
	Merge pull request #9354 from WuerthPhoenix/feature/return-correct-status-in-process-check-result-api
Return correct status codes in process-check-result API
This commit is contained in:
		
						commit
						4184dcd62c
					
				@ -55,6 +55,8 @@ Dictionary::Ptr ApiActions::CreateResult(int code, const String& status,
 | 
				
			|||||||
Dictionary::Ptr ApiActions::ProcessCheckResult(const ConfigObject::Ptr& object,
 | 
					Dictionary::Ptr ApiActions::ProcessCheckResult(const ConfigObject::Ptr& object,
 | 
				
			||||||
	const Dictionary::Ptr& params)
 | 
						const Dictionary::Ptr& params)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						using Result = Checkable::ProcessingResult;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Checkable::Ptr checkable = static_pointer_cast<Checkable>(object);
 | 
						Checkable::Ptr checkable = static_pointer_cast<Checkable>(object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!checkable)
 | 
						if (!checkable)
 | 
				
			||||||
@ -123,9 +125,19 @@ Dictionary::Ptr ApiActions::ProcessCheckResult(const ConfigObject::Ptr& object,
 | 
				
			|||||||
	if (params->Contains("ttl"))
 | 
						if (params->Contains("ttl"))
 | 
				
			||||||
		cr->SetTtl(HttpUtility::GetLastParameter(params, "ttl"));
 | 
							cr->SetTtl(HttpUtility::GetLastParameter(params, "ttl"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	checkable->ProcessCheckResult(cr);
 | 
						Result result = checkable->ProcessCheckResult(cr);
 | 
				
			||||||
 | 
						switch (result) {
 | 
				
			||||||
 | 
							case Result::Ok:
 | 
				
			||||||
 | 
								return ApiActions::CreateResult(200, "Successfully processed check result for object '" + checkable->GetName() + "'.");
 | 
				
			||||||
 | 
							case Result::NoCheckResult:
 | 
				
			||||||
 | 
								return ApiActions::CreateResult(400, "Could not process check result for object '" + checkable->GetName() + "' because no check result was passed.");
 | 
				
			||||||
 | 
							case Result::CheckableInactive:
 | 
				
			||||||
 | 
								return ApiActions::CreateResult(503, "Could not process check result for object '" + checkable->GetName() + "' because the object is inactive.");
 | 
				
			||||||
 | 
							case Result::NewerCheckResultPresent:
 | 
				
			||||||
 | 
								return ApiActions::CreateResult(409, "Newer check result already present. Check result for '" + checkable->GetName() + "' was discarded.");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ApiActions::CreateResult(200, "Successfully processed check result for object '" + checkable->GetName() + "'.");
 | 
						return ApiActions::CreateResult(500, "Unexpected result (" + std::to_string(static_cast<int>(result)) + ") for object '" + checkable->GetName() + "'. Please submit a bug report at https://github.com/Icinga/icinga2");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Dictionary::Ptr ApiActions::RescheduleCheck(const ConfigObject::Ptr& object,
 | 
					Dictionary::Ptr ApiActions::RescheduleCheck(const ConfigObject::Ptr& object,
 | 
				
			||||||
 | 
				
			|||||||
@ -94,15 +94,17 @@ double Checkable::GetLastCheck() const
 | 
				
			|||||||
	return schedule_end;
 | 
						return schedule_end;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrigin::Ptr& origin)
 | 
					Checkable::ProcessingResult Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrigin::Ptr& origin)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						using Result = Checkable::ProcessingResult;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		ObjectLock olock(this);
 | 
							ObjectLock olock(this);
 | 
				
			||||||
		m_CheckRunning = false;
 | 
							m_CheckRunning = false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!cr)
 | 
						if (!cr)
 | 
				
			||||||
		return;
 | 
							return Result::NoCheckResult;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	double now = Utility::GetTime();
 | 
						double now = Utility::GetTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -142,12 +144,12 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
 | 
				
			|||||||
			listener->SyncSendMessage(command_endpoint, message);
 | 
								listener->SyncSendMessage(command_endpoint, message);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return;
 | 
							return Result::Ok;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!IsActive())
 | 
						if (!IsActive())
 | 
				
			||||||
		return;
 | 
							return Result::CheckableInactive;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool reachable = IsReachable();
 | 
						bool reachable = IsReachable();
 | 
				
			||||||
	bool notification_reachable = IsReachable(DependencyNotification);
 | 
						bool notification_reachable = IsReachable(DependencyNotification);
 | 
				
			||||||
@ -184,7 +186,7 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
 | 
				
			|||||||
					<< Utility::FormatDateTime("%Y-%m-%d %H:%M:%S %z", newCRTimestamp) << " (" << newCRTimestamp
 | 
										<< Utility::FormatDateTime("%Y-%m-%d %H:%M:%S %z", newCRTimestamp) << " (" << newCRTimestamp
 | 
				
			||||||
					<< "). It is in the past compared to ours at "
 | 
										<< "). It is in the past compared to ours at "
 | 
				
			||||||
					<< Utility::FormatDateTime("%Y-%m-%d %H:%M:%S %z", currentCRTimestamp) << " (" << currentCRTimestamp << ").";
 | 
										<< Utility::FormatDateTime("%Y-%m-%d %H:%M:%S %z", currentCRTimestamp) << " (" << currentCRTimestamp << ").";
 | 
				
			||||||
				return;
 | 
									return Result::NewerCheckResultPresent;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -526,6 +528,8 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
 | 
				
			|||||||
	/* update reachability for child objects */
 | 
						/* update reachability for child objects */
 | 
				
			||||||
	if ((stateChange || hardChange) && !children.empty())
 | 
						if ((stateChange || hardChange) && !children.empty())
 | 
				
			||||||
		OnReachabilityChanged(this, cr, children, origin);
 | 
							OnReachabilityChanged(this, cr, children, origin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return Result::Ok;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Checkable::ExecuteRemoteCheck(const Dictionary::Ptr& resolvedMacros)
 | 
					void Checkable::ExecuteRemoteCheck(const Dictionary::Ptr& resolvedMacros)
 | 
				
			||||||
 | 
				
			|||||||
@ -111,7 +111,14 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	void ExecuteRemoteCheck(const Dictionary::Ptr& resolvedMacros = nullptr);
 | 
						void ExecuteRemoteCheck(const Dictionary::Ptr& resolvedMacros = nullptr);
 | 
				
			||||||
	void ExecuteCheck();
 | 
						void ExecuteCheck();
 | 
				
			||||||
	void ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrigin::Ptr& origin = nullptr);
 | 
						enum class ProcessingResult
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Ok,
 | 
				
			||||||
 | 
							NoCheckResult,
 | 
				
			||||||
 | 
							CheckableInactive,
 | 
				
			||||||
 | 
							NewerCheckResultPresent,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						ProcessingResult ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrigin::Ptr& origin = nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Endpoint::Ptr GetCommandEndpoint() const;
 | 
						Endpoint::Ptr GetCommandEndpoint() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user