github.com/go-graphite/carbonapi@v0.17.0/zipper/helper/http_client.go (about) 1 package helper 2 3 import ( 4 "net/http" 5 6 "github.com/go-graphite/carbonapi/internal/dns" 7 "github.com/go-graphite/carbonapi/pkg/tlsconfig" 8 "github.com/go-graphite/carbonapi/zipper/types" 9 "go.uber.org/zap" 10 ) 11 12 func GetHTTPClient(logger *zap.Logger, config types.BackendV2) *http.Client { 13 transport := &http.Transport{ 14 MaxConnsPerHost: *config.ConcurrencyLimit, 15 MaxIdleConnsPerHost: *config.MaxIdleConnsPerHost, 16 IdleConnTimeout: *config.IdleConnectionTimeout, 17 ForceAttemptHTTP2: config.ForceAttemptHTTP2, 18 DialContext: dns.GetDialContextWithTimeout(config.Timeouts.Connect, *config.KeepAliveInterval), 19 } 20 21 if config.TLSClientConfig != nil { 22 tlsConfig, warns, err := tlsconfig.ParseClientTLSConfig(config.TLSClientConfig) 23 if err != nil { 24 logger.Fatal("failed to initialize client for group", 25 zap.String("group_name", config.GroupName), 26 zap.Error(err), 27 ) 28 } 29 if len(warns) > 0 { 30 logger.Warn("insecure options detected, while parsing HTTP Client TLS Config for backed", 31 zap.String("group_name", config.GroupName), 32 zap.Strings("warnings", warns), 33 ) 34 } 35 transport.TLSClientConfig = tlsConfig 36 } 37 38 httpClient := &http.Client{ 39 Transport: transport, 40 } 41 return httpClient 42 }