Datasource: Improve default timeout settings for HTTP client provider (#36621)

Make sure that default timeout settings are based on configuration
parameters. This now applies for core data sources using old TSDB
contracts and new SDK contracts. Before it was only applied for old TSDB
contracts.
Also moves global setting variables to non-global (setting.Cfg).
This commit is contained in:
Marcus Efraimsson
2021-07-15 14:30:06 +02:00
committed by GitHub
parent 456dac1303
commit a6b2e1865c
7 changed files with 79 additions and 44 deletions

View File

@@ -3,6 +3,7 @@ package httpclientprovider
import (
"fmt"
"net/http"
"time"
sdkhttpclient "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
"github.com/grafana/grafana/pkg/infra/httpclient"
@@ -18,6 +19,7 @@ var newProviderFunc = sdkhttpclient.NewProvider
func New(cfg *setting.Cfg) httpclient.Provider {
logger := log.New("httpclient")
userAgent := fmt.Sprintf("Grafana/%s", cfg.BuildVersion)
middlewares := []sdkhttpclient.Middleware{
TracingMiddleware(logger),
DataSourceMetricsMiddleware(),
@@ -30,6 +32,8 @@ func New(cfg *setting.Cfg) httpclient.Provider {
middlewares = append(middlewares, SigV4Middleware())
}
setDefaultTimeoutOptions(cfg)
return newProviderFunc(sdkhttpclient.ProviderOptions{
Middlewares: middlewares,
ConfigureTransport: func(opts sdkhttpclient.Options, transport *http.Transport) {
@@ -56,3 +60,20 @@ func newConntrackRoundTripper(name string, transport *http.Transport) *http.Tran
)
return transport
}
// setDefaultTimeoutOptions overrides the default timeout options for the SDK.
//
// Note: Not optimal changing global state, but hard to not do in this case.
func setDefaultTimeoutOptions(cfg *setting.Cfg) {
sdkhttpclient.DefaultTimeoutOptions = sdkhttpclient.TimeoutOptions{
Timeout: time.Duration(cfg.DataProxyTimeout) * time.Second,
DialTimeout: time.Duration(cfg.DataProxyDialTimeout) * time.Second,
KeepAlive: time.Duration(cfg.DataProxyKeepAlive) * time.Second,
TLSHandshakeTimeout: time.Duration(cfg.DataProxyTLSHandshakeTimeout) * time.Second,
ExpectContinueTimeout: time.Duration(cfg.DataProxyExpectContinueTimeout) * time.Second,
MaxConnsPerHost: cfg.DataProxyMaxConnsPerHost,
MaxIdleConns: cfg.DataProxyMaxIdleConns,
MaxIdleConnsPerHost: cfg.DataProxyMaxIdleConns,
IdleConnTimeout: time.Duration(cfg.DataProxyIdleConnTimeout) * time.Second,
}
}