diff --git a/pkg/expr/transform.go b/pkg/expr/transform.go index c0d12b495f0..fb327613fe9 100644 --- a/pkg/expr/transform.go +++ b/pkg/expr/transform.go @@ -1,6 +1,7 @@ package expr import ( + "context" "encoding/json" "fmt" "time" @@ -8,7 +9,6 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana/pkg/models" "github.com/prometheus/client_golang/prometheus" - "golang.org/x/net/context" ) var ( diff --git a/pkg/tsdb/azuremonitor/deprecated/applicationinsights-datasource.go b/pkg/tsdb/azuremonitor/deprecated/applicationinsights-datasource.go index c75b79ea252..4520522531e 100644 --- a/pkg/tsdb/azuremonitor/deprecated/applicationinsights-datasource.go +++ b/pkg/tsdb/azuremonitor/deprecated/applicationinsights-datasource.go @@ -14,13 +14,13 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" + "go.opentelemetry.io/otel/attribute" + "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/azlog" azTime "github.com/grafana/grafana/pkg/tsdb/azuremonitor/time" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/types" "github.com/grafana/grafana/pkg/util/errutil" - "go.opentelemetry.io/otel/attribute" - "golang.org/x/net/context/ctxhttp" ) // ApplicationInsightsDatasource calls the application insights query API. @@ -158,7 +158,7 @@ func (e *ApplicationInsightsDatasource) executeQuery(ctx context.Context, query tracer.Inject(ctx, req.Header, span) azlog.Debug("ApplicationInsights", "Request URL", req.URL.String()) - res, err := ctxhttp.Do(ctx, client, req) + res, err := client.Do(req) if err != nil { dataResponse.Error = err return dataResponse, nil @@ -200,7 +200,7 @@ func (e *ApplicationInsightsDatasource) executeQuery(ctx context.Context, query func (e *ApplicationInsightsDatasource) createRequest(ctx context.Context, dsInfo types.DatasourceInfo, url string) (*http.Request, error) { appInsightsAppID := dsInfo.Settings.AppInsightsAppId - req, err := http.NewRequest(http.MethodGet, url, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("Failed to create request", err) diff --git a/pkg/tsdb/azuremonitor/deprecated/insights-analytics-datasource.go b/pkg/tsdb/azuremonitor/deprecated/insights-analytics-datasource.go index 27a6c866e67..00d29951fca 100644 --- a/pkg/tsdb/azuremonitor/deprecated/insights-analytics-datasource.go +++ b/pkg/tsdb/azuremonitor/deprecated/insights-analytics-datasource.go @@ -12,14 +12,14 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" + "go.opentelemetry.io/otel/attribute" + "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/azlog" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/loganalytics" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/macros" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/types" "github.com/grafana/grafana/pkg/util/errutil" - "go.opentelemetry.io/otel/attribute" - "golang.org/x/net/context/ctxhttp" ) type InsightsAnalyticsDatasource struct { @@ -121,7 +121,7 @@ func (e *InsightsAnalyticsDatasource) executeQuery(ctx context.Context, query *I } azlog.Debug("ApplicationInsights", "Request URL", req.URL.String()) - res, err := ctxhttp.Do(ctx, client, req) + res, err := client.Do(req) if err != nil { return dataResponseError(err) } @@ -180,7 +180,7 @@ func (e *InsightsAnalyticsDatasource) executeQuery(ctx context.Context, query *I func (e *InsightsAnalyticsDatasource) createRequest(ctx context.Context, dsInfo types.DatasourceInfo, url string) (*http.Request, error) { appInsightsAppID := dsInfo.Settings.AppInsightsAppId - req, err := http.NewRequest(http.MethodGet, url, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("Failed to create request", err) diff --git a/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go b/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go index cc96a88ebac..6370b36392d 100644 --- a/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go +++ b/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go @@ -15,14 +15,14 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" + "go.opentelemetry.io/otel/attribute" + "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/azlog" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/macros" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/types" "github.com/grafana/grafana/pkg/util/errutil" - "go.opentelemetry.io/otel/attribute" - "golang.org/x/net/context/ctxhttp" ) // AzureLogAnalyticsDatasource calls the Azure Log Analytics API's @@ -173,7 +173,7 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A tracer.Inject(ctx, req.Header, span) azlog.Debug("AzureLogAnalytics", "Request ApiURL", req.URL.String()) - res, err := ctxhttp.Do(ctx, client, req) + res, err := client.Do(req) if err != nil { return dataResponseErrorWithExecuted(err) } @@ -224,7 +224,7 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A } func (e *AzureLogAnalyticsDatasource) createRequest(ctx context.Context, dsInfo types.DatasourceInfo, url string) (*http.Request, error) { - req, err := http.NewRequest(http.MethodGet, url, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("failed to create request", err) diff --git a/pkg/tsdb/azuremonitor/metrics/azuremonitor-datasource.go b/pkg/tsdb/azuremonitor/metrics/azuremonitor-datasource.go index 3def772d76b..d8af26d066e 100644 --- a/pkg/tsdb/azuremonitor/metrics/azuremonitor-datasource.go +++ b/pkg/tsdb/azuremonitor/metrics/azuremonitor-datasource.go @@ -14,6 +14,8 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" + "go.opentelemetry.io/otel/attribute" + "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/azlog" @@ -21,8 +23,6 @@ import ( azTime "github.com/grafana/grafana/pkg/tsdb/azuremonitor/time" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/types" "github.com/grafana/grafana/pkg/util/errutil" - "go.opentelemetry.io/otel/attribute" - "golang.org/x/net/context/ctxhttp" ) // AzureMonitorDatasource calls the Azure Monitor API - one of the four API's supported @@ -179,7 +179,7 @@ func (e *AzureMonitorDatasource) executeQuery(ctx context.Context, query *types. azlog.Debug("AzureMonitor", "Request ApiURL", req.URL.String()) azlog.Debug("AzureMonitor", "Target", query.Target) - res, err := ctxhttp.Do(ctx, cli, req) + res, err := cli.Do(req) if err != nil { dataResponse.Error = err return dataResponse @@ -212,7 +212,7 @@ func (e *AzureMonitorDatasource) executeQuery(ctx context.Context, query *types. } func (e *AzureMonitorDatasource) createRequest(ctx context.Context, dsInfo types.DatasourceInfo, url string) (*http.Request, error) { - req, err := http.NewRequest(http.MethodGet, url, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("Failed to create request", err) diff --git a/pkg/tsdb/azuremonitor/resourcegraph/azure-resource-graph-datasource.go b/pkg/tsdb/azuremonitor/resourcegraph/azure-resource-graph-datasource.go index f99a837a6bc..ad26abfaa5e 100644 --- a/pkg/tsdb/azuremonitor/resourcegraph/azure-resource-graph-datasource.go +++ b/pkg/tsdb/azuremonitor/resourcegraph/azure-resource-graph-datasource.go @@ -14,6 +14,7 @@ import ( "github.com/grafana/grafana-azure-sdk-go/azsettings" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" + "go.opentelemetry.io/otel/attribute" "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/tracing" @@ -23,8 +24,6 @@ import ( "github.com/grafana/grafana/pkg/tsdb/azuremonitor/macros" "github.com/grafana/grafana/pkg/tsdb/azuremonitor/types" "github.com/grafana/grafana/pkg/util/errutil" - "go.opentelemetry.io/otel/attribute" - "golang.org/x/net/context/ctxhttp" ) // AzureResourceGraphResponse is the json response object from the Azure Resource Graph Analytics API. @@ -180,7 +179,7 @@ func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query * tracer.Inject(ctx, req.Header, span) azlog.Debug("AzureResourceGraph", "Request ApiURL", req.URL.String()) - res, err := ctxhttp.Do(ctx, client, req) + res, err := client.Do(req) if err != nil { return dataResponseErrorWithExecuted(err) } @@ -227,7 +226,7 @@ func AddConfigLinks(frame data.Frame, dl string) data.Frame { } func (e *AzureResourceGraphDatasource) createRequest(ctx context.Context, dsInfo types.DatasourceInfo, reqBody []byte, url string) (*http.Request, error) { - req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(reqBody)) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewBuffer(reqBody)) if err != nil { azlog.Debug("Failed to create request", "error", err) return nil, errutil.Wrap("failed to create request", err) diff --git a/pkg/tsdb/elasticsearch/client/client.go b/pkg/tsdb/elasticsearch/client/client.go index 2371ddf0e54..3118693b2b7 100644 --- a/pkg/tsdb/elasticsearch/client/client.go +++ b/pkg/tsdb/elasticsearch/client/client.go @@ -20,8 +20,6 @@ import ( "github.com/grafana/grafana/pkg/infra/httpclient" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/tsdb/intervalv2" - - "golang.org/x/net/context/ctxhttp" ) type DatasourceInfo struct { @@ -161,9 +159,9 @@ func (c *baseClientImpl) executeRequest(method, uriPath, uriQuery string, body [ var req *http.Request if method == http.MethodPost { - req, err = http.NewRequest(http.MethodPost, u.String(), bytes.NewBuffer(body)) + req, err = http.NewRequestWithContext(c.ctx, http.MethodPost, u.String(), bytes.NewBuffer(body)) } else { - req, err = http.NewRequest(http.MethodGet, u.String(), nil) + req, err = http.NewRequestWithContext(c.ctx, http.MethodGet, u.String(), nil) } if err != nil { return nil, err @@ -193,7 +191,7 @@ func (c *baseClientImpl) executeRequest(method, uriPath, uriQuery string, body [ clientLog.Debug("Executed request", "took", elapsed) }() //nolint:bodyclose - resp, err := ctxhttp.Do(c.ctx, httpClient, req) + resp, err := httpClient.Do(req) if err != nil { return nil, err } diff --git a/pkg/tsdb/graphite/graphite.go b/pkg/tsdb/graphite/graphite.go index bc3b61e9e9b..2844ac5ad70 100644 --- a/pkg/tsdb/graphite/graphite.go +++ b/pkg/tsdb/graphite/graphite.go @@ -15,7 +15,6 @@ import ( "time" "go.opentelemetry.io/otel/attribute" - "golang.org/x/net/context/ctxhttp" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/datasource" @@ -148,7 +147,7 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) s.logger.Debug("Graphite request", "params", formData) } - graphiteReq, err := s.createRequest(dsInfo, formData) + graphiteReq, err := s.createRequest(ctx, dsInfo, formData) if err != nil { return &result, err } @@ -163,7 +162,7 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) defer span.End() s.tracer.Inject(ctx, graphiteReq.Header, span) - res, err := ctxhttp.Do(ctx, dsInfo.HTTPClient, graphiteReq) + res, err := dsInfo.HTTPClient.Do(graphiteReq) if err != nil { return &result, err } @@ -252,14 +251,14 @@ func (s *Service) toDataFrames(response *http.Response) (frames data.Frames, err return frames, nil } -func (s *Service) createRequest(dsInfo *datasourceInfo, data url.Values) (*http.Request, error) { +func (s *Service) createRequest(ctx context.Context, dsInfo *datasourceInfo, data url.Values) (*http.Request, error) { u, err := url.Parse(dsInfo.URL) if err != nil { return nil, err } u.Path = path.Join(u.Path, "render") - req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(data.Encode())) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, u.String(), strings.NewReader(data.Encode())) if err != nil { s.logger.Info("Failed to create request", "error", err) return nil, fmt.Errorf("failed to create request: %w", err) diff --git a/pkg/tsdb/opentsdb/opentsdb.go b/pkg/tsdb/opentsdb/opentsdb.go index 8dc65d0ff5c..6143fae3dbf 100644 --- a/pkg/tsdb/opentsdb/opentsdb.go +++ b/pkg/tsdb/opentsdb/opentsdb.go @@ -16,11 +16,11 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend/datasource" "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" "github.com/grafana/grafana-plugin-sdk-go/data" + "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/httpclient" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/setting" - "golang.org/x/net/context/ctxhttp" ) type Service struct { @@ -86,12 +86,12 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) return nil, err } - request, err := s.createRequest(dsInfo, tsdbQuery) + request, err := s.createRequest(ctx, dsInfo, tsdbQuery) if err != nil { return &backend.QueryDataResponse{}, err } - res, err := ctxhttp.Do(ctx, dsInfo.HTTPClient, request) + res, err := dsInfo.HTTPClient.Do(request) if err != nil { return &backend.QueryDataResponse{}, err } @@ -104,7 +104,7 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) return result, nil } -func (s *Service) createRequest(dsInfo *datasourceInfo, data OpenTsdbQuery) (*http.Request, error) { +func (s *Service) createRequest(ctx context.Context, dsInfo *datasourceInfo, data OpenTsdbQuery) (*http.Request, error) { u, err := url.Parse(dsInfo.URL) if err != nil { return nil, err @@ -117,7 +117,7 @@ func (s *Service) createRequest(dsInfo *datasourceInfo, data OpenTsdbQuery) (*ht return nil, fmt.Errorf("failed to create request: %w", err) } - req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(string(postData))) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, u.String(), strings.NewReader(string(postData))) if err != nil { s.logger.Info("Failed to create request", "error", err) return nil, fmt.Errorf("failed to create request: %w", err) diff --git a/pkg/tsdb/opentsdb/opentsdb_test.go b/pkg/tsdb/opentsdb/opentsdb_test.go index 7ef63ee7e54..19ba68bd5d1 100644 --- a/pkg/tsdb/opentsdb/opentsdb_test.go +++ b/pkg/tsdb/opentsdb/opentsdb_test.go @@ -1,6 +1,7 @@ package opentsdb import ( + "context" "io/ioutil" "net/http" "strings" @@ -10,9 +11,10 @@ import ( "github.com/google/go-cmp/cmp" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" - "github.com/grafana/grafana/pkg/infra/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/grafana/grafana/pkg/infra/log" ) func TestOpenTsdbExecutor(t *testing.T) { @@ -21,7 +23,7 @@ func TestOpenTsdbExecutor(t *testing.T) { } t.Run("create request", func(t *testing.T) { - req, err := service.createRequest(&datasourceInfo{}, OpenTsdbQuery{}) + req, err := service.createRequest(context.Background(), &datasourceInfo{}, OpenTsdbQuery{}) require.NoError(t, err) assert.Equal(t, "POST", req.Method)