@@ -3,11 +3,14 @@ package gateway
33import (
44 "context"
55 "fmt"
6+ "log"
67 "net"
78 "net/http"
89 "net/http/httputil"
910 "net/url"
1011 "time"
12+
13+ "github.com/cortexproject/auth-gateway/utils"
1114)
1215
1316const (
@@ -56,13 +59,18 @@ func NewProxy(targetURL string, upstream Upstream, component string) (*Proxy, er
5659 return nil , err
5760 }
5861 if url .Scheme == "" {
59- return nil , fmt .Errorf ("invalid URL scheme: %s" , targetURL )
62+ return nil , fmt .Errorf ("invalid URL scheme when creating a proxy for the %s : %s" , component , targetURL )
6063 }
6164
6265 reverseProxy := httputil .NewSingleHostReverseProxy (url )
63- reverseProxy .Transport = customTransport (component , upstream )
66+ transport , err := customTransport (component , upstream )
67+ if err != nil {
68+ return nil , err
69+ }
70+ reverseProxy .Transport = transport
6471 originalDirector := reverseProxy .Director
6572 reverseProxy .Director = customDirector (url , originalDirector )
73+ reverseProxy .ErrorLog = log .New (utils.LogrusErrorWriter {}, "" , 0 )
6674
6775 if upstream .HTTPClientTimeout == 0 {
6876 upstream .HTTPClientTimeout = defaultTimeoutValues [component ].HTTPClientTimeout
@@ -82,7 +90,7 @@ func customDirector(targetURL *url.URL, originalDirector func(*http.Request)) fu
8290 }
8391}
8492
85- func customTransport (component string , upstream Upstream ) http.RoundTripper {
93+ func customTransport (component string , upstream Upstream ) ( http.RoundTripper , error ) {
8694 dialerTimeout := upstream .HTTPClientDialerTimeout * time .Second
8795 if dialerTimeout == 0 {
8896 dialerTimeout = defaultTimeoutValues [component ].HTTPClientDialerTimeout
@@ -102,14 +110,17 @@ func customTransport(component string, upstream Upstream) http.RoundTripper {
102110
103111 url , err := url .Parse (upstream .URL )
104112 if err != nil {
105- // TODO: log the error with logrus
106- fmt .Println (err )
113+ return nil , fmt .Errorf ("unexpected error when parsing the upstream url: %v" , err )
107114 }
108115
109116 resolver := DefaultDNSResolver {}
117+ lb , err := newRoundRobinLoadBalancer (url .Hostname (), resolver .LookupIP )
118+ if err != nil {
119+ return nil , fmt .Errorf ("unexpected error when creating the load balancer: %v" , err )
120+ }
110121 t := & CustomTransport {
111122 Transport : * http .DefaultTransport .(* http.Transport ).Clone (),
112- lb : newRoundRobinLoadBalancer ( url . Hostname (), resolver . LookupIP ) ,
123+ lb : lb ,
113124 }
114125 go t .lb .refreshIPs (upstream .DNSRefreshInterval )
115126
@@ -120,7 +131,7 @@ func customTransport(component string, upstream Upstream) http.RoundTripper {
120131 t .TLSHandshakeTimeout = TLSHandshakeTimeout
121132 t .ResponseHeaderTimeout = responseHeaderTimeout
122133
123- return t
134+ return t , nil
124135}
125136
126137func (p * Proxy ) Handler (w http.ResponseWriter , r * http.Request ) {
0 commit comments