package exthttp
import (
"net"
"net/http"
"time"
"github.com/prometheus/common/model"
)
type HTTPConfig struct {
IdleConnTimeout model.Duration `yaml:"idle_conn_timeout"`
ResponseHeaderTimeout model.Duration `yaml:"response_header_timeout"`
InsecureSkipVerify bool `yaml:"insecure_skip_verify"`
TLSHandshakeTimeout model.Duration `yaml:"tls_handshake_timeout"`
ExpectContinueTimeout model.Duration `yaml:"expect_continue_timeout"`
MaxIdleConns int `yaml:"max_idle_conns"`
MaxIdleConnsPerHost int `yaml:"max_idle_conns_per_host"`
MaxConnsPerHost int `yaml:"max_conns_per_host"`
Transport http.RoundTripper `yaml:"-"`
TLSConfig TLSConfig `yaml:"tls_config"`
DisableCompression bool `yaml:"disable_compression"`
}
func DefaultTransport(config HTTPConfig) (*http.Transport, error) {
tlsConfig, err := NewTLSConfig(&config.TLSConfig)
if err != nil {
return nil, err
}
tlsConfig.InsecureSkipVerify = config.InsecureSkipVerify
return &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext,
MaxIdleConns: config.MaxIdleConns,
MaxIdleConnsPerHost: config.MaxIdleConnsPerHost,
IdleConnTimeout: time.Duration(config.IdleConnTimeout),
MaxConnsPerHost: config.MaxConnsPerHost,
TLSHandshakeTimeout: time.Duration(config.TLSHandshakeTimeout),
ExpectContinueTimeout: time.Duration(config.ExpectContinueTimeout),
ResponseHeaderTimeout: time.Duration(config.ResponseHeaderTimeout),
TLSClientConfig: tlsConfig,
}, nil
}