mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
committed by
GitHub
parent
456dac1303
commit
a6b2e1865c
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user