Beispiel #1
0
func (p *Pool) Handle(logRecord *logger.HAProxyLogRecord) {
	pTime := time.Now()
	if p.Dummy {
		logger.Printf("[pool %s] Dummy", p.Name)
		logRecord.Error(logger.BadGatewayMsg, http.StatusBadGateway)
		logRecord.Terminate("Pool: " + logger.BadGatewayMsg)
		return
	}
	p.Metrics.ConnectionStart()
	defer p.Metrics.ConnectionDone()

	server := p.Next()
	if server == nil {
		// reachable when all servers in pool report StatusMaintenance
		logger.Printf("[pool %s] no server", p.Name)
		logRecord.Error(logger.ServiceUnavailableMsg, http.StatusServiceUnavailable)
		logRecord.Terminate("Pool: " + logger.ServiceUnavailableMsg)
		return
	}
	logRecord.PoolUpdateRecord(p.Name, p.Metrics.GetActiveConnections(), p.Metrics.GetTotalConnections(), pTime)
	server.Handle(logRecord, p.Config.RequestTimeout)
}