mirror of
				https://github.com/Icinga/icinga2.git
				synced 2025-11-03 21:25:56 +01:00 
			
		
		
		
	Merge pull request #8097 from Icinga/bugfix/don-not-close-connection-on-missing-heartbeat-8095
Don't close connection on missing heartbeat
This commit is contained in:
		
						commit
						a5370f7d15
					
				@ -15,6 +15,12 @@ using namespace icinga;
 | 
			
		||||
 | 
			
		||||
REGISTER_APIFUNCTION(Heartbeat, event, &JsonRpcConnection::HeartbeatAPIHandler);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * We still send a heartbeat without timeout here
 | 
			
		||||
 * to keep the m_Seen variable up to date. This is to keep the
 | 
			
		||||
 * cluster connection alive when there isn't much going on.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void JsonRpcConnection::HandleAndWriteHeartbeats(boost::asio::yield_context yc)
 | 
			
		||||
{
 | 
			
		||||
	boost::system::error_code ec;
 | 
			
		||||
@ -27,41 +33,16 @@ void JsonRpcConnection::HandleAndWriteHeartbeats(boost::asio::yield_context yc)
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (m_NextHeartbeat != 0 && m_NextHeartbeat < Utility::GetTime()) {
 | 
			
		||||
			{
 | 
			
		||||
				Log logMsg (LogWarning, "JsonRpcConnection");
 | 
			
		||||
 | 
			
		||||
				if (m_Endpoint) {
 | 
			
		||||
					logMsg << "Client for endpoint '" << m_Endpoint->GetName() << "'";
 | 
			
		||||
				} else {
 | 
			
		||||
					logMsg << "Anonymous client";
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				logMsg << " has requested heartbeat message but hasn't responded in time. Closing connection.";
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			Disconnect();
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		SendMessageInternal(new Dictionary({
 | 
			
		||||
			{ "jsonrpc", "2.0" },
 | 
			
		||||
			{ "method", "event::Heartbeat" },
 | 
			
		||||
			{ "params", new Dictionary({
 | 
			
		||||
				{ "timeout", 120 }
 | 
			
		||||
			}) }
 | 
			
		||||
			{ "params", new Dictionary() }
 | 
			
		||||
		}));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Value JsonRpcConnection::HeartbeatAPIHandler(const MessageOrigin::Ptr& origin, const Dictionary::Ptr& params)
 | 
			
		||||
{
 | 
			
		||||
	Value vtimeout = params->Get("timeout");
 | 
			
		||||
 | 
			
		||||
	if (!vtimeout.IsEmpty()) {
 | 
			
		||||
		origin->FromClient->m_NextHeartbeat = Utility::GetTime() + vtimeout;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return Empty;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user