func (p *proxyRoundTripper) RoundTrip(request *http.Request) (*http.Response, error) { var err error var res *http.Response var endpoint *route.Endpoint retry := 0 for { endpoint = p.iter.Next() if endpoint == nil { p.handler.reporter.CaptureBadGateway(request) err = noEndpointsAvailable p.handler.HandleBadGateway(err) return nil, err } request.URL.Host = endpoint.CanonicalAddr() request.Header.Set("X-CF-ApplicationID", endpoint.CanonicalAddr()) setRequestXCfInstanceId(request, endpoint) res, err = p.transport.RoundTrip(request) if err == nil { break } if ne, netErr := err.(*net.OpError); !netErr || ne.Op != "dial" { break } p.iter.EndpointFailed() p.handler.Logger().Set("Error", err.Error()) p.handler.Logger().Warnf("proxy.endpoint.failed") retry++ if retry == retries { break } } if p.after != nil { p.after(res, endpoint, err) } p.response = res p.err = err return res, err }
func setRequestXCfInstanceId(request *http.Request, endpoint *route.Endpoint) { value := endpoint.CanonicalAddr() request.Header.Set(router_http.CfInstanceIdHeader, value) }
func (x *RealVarz) CaptureAppStats(b *route.Endpoint, t time.Time) { if b.CanonicalAddr() != "" { x.activeApps.Mark(b.CanonicalAddr(), t) x.topApps.Mark(b.CanonicalAddr(), t) } }
func (h *RequestHandler) setupRequest(endpoint *route.Endpoint) { h.setRequestURL(endpoint.CanonicalAddr()) h.setRequestXForwardedFor() setRequestXRequestStart(h.request) setRequestXVcapRequestId(h.request, h.logger) }