From d4d69cfd4ec52201e855c0f671d5b4f6eb337ad2 Mon Sep 17 00:00:00 2001 From: "grafana-delivery-bot[bot]" <132647405+grafana-delivery-bot[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:52:28 +0200 Subject: [PATCH] [v11.0.x] Google Cloud Monitor: Fix interface conversion for incorrect type in `cloudMonitoringProm.run` (#85928) Google Cloud Monitor: Fix interface conversion for incorrect type in `cloudMonitoringProm.run` (#85811) (cherry picked from commit 0ec8ccbf66c6d64bdab75163bff91d059466b8f3) Co-authored-by: Adam Yeats <16296989+adamyeats@users.noreply.github.com> --- pkg/tsdb/cloud-monitoring/promql_query.go | 6 +-- .../cloud-monitoring/promql_query_test.go | 37 ++++++++++++++++++- pkg/tsdb/cloud-monitoring/types.go | 8 ---- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/pkg/tsdb/cloud-monitoring/promql_query.go b/pkg/tsdb/cloud-monitoring/promql_query.go index 2ee2aba24ab..16efb08e154 100644 --- a/pkg/tsdb/cloud-monitoring/promql_query.go +++ b/pkg/tsdb/cloud-monitoring/promql_query.go @@ -23,12 +23,12 @@ func (promQLQ *cloudMonitoringProm) run(ctx context.Context, req *backend.QueryD projectName, err := s.ensureProject(ctx, dsInfo, promQLQ.parameters.ProjectName) if err != nil { dr.Error = err - return dr, promResponse{}, "", nil + return dr, backend.DataResponse{}, "", nil } r, err := createRequest(ctx, &dsInfo, path.Join("/v1/projects", projectName, "location/global/prometheus/api/v1/query_range"), nil) if err != nil { dr.Error = err - return dr, promResponse{}, "", nil + return dr, backend.DataResponse{}, "", nil } span := traceReq(ctx, req, dsInfo, r, "") @@ -44,7 +44,7 @@ func (promQLQ *cloudMonitoringProm) run(ctx context.Context, req *backend.QueryD res, err := doRequestProm(r, dsInfo, requestBody) if err != nil { dr.Error = err - return dr, promResponse{}, "", nil + return dr, backend.DataResponse{}, "", nil } defer func() { diff --git a/pkg/tsdb/cloud-monitoring/promql_query_test.go b/pkg/tsdb/cloud-monitoring/promql_query_test.go index 03caad70134..3b6af147f77 100644 --- a/pkg/tsdb/cloud-monitoring/promql_query_test.go +++ b/pkg/tsdb/cloud-monitoring/promql_query_test.go @@ -1,6 +1,8 @@ package cloudmonitoring import ( + "context" + "fmt" "io" "net/http" "os" @@ -8,13 +10,16 @@ import ( "testing" "github.com/grafana/grafana-plugin-sdk-go/backend" + "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/experimental" + "github.com/grafana/grafana/pkg/tsdb/cloud-monitoring/kinds/dataquery" "github.com/stretchr/testify/require" ) func TestPromqlQuery(t *testing.T) { - service := &Service{} t.Run("parseResponse is returned", func(t *testing.T) { + service := &Service{} fileData, err := os.ReadFile("./test-data/11-prom-response.json") reader := strings.NewReader(string(fileData)) res := http.Response{Body: io.NopCloser(reader)} @@ -30,4 +35,34 @@ func TestPromqlQuery(t *testing.T) { frame := dataRes.Frames[0] experimental.CheckGoldenJSONFrame(t, "test-data", "parse-response-is-returned", frame, false) }) + + t.Run("parseResponse is returned with error", func(t *testing.T) { + dsInfo := datasourceInfo{ + authenticationType: gceAuthentication, + } + + im := datasource.NewInstanceManager(func(_ context.Context, s backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { + return &dsInfo, nil + }) + + service := &Service{ + im: im, + gceDefaultProjectGetter: func(ctx context.Context, scope string) (string, error) { + return "", fmt.Errorf("not found!") + }, + } + + query := &cloudMonitoringProm{ + parameters: &dataquery.PromQLQuery{ + ProjectName: "", + }, + } + + dr, parsedProm, _, _ := query.run(context.Background(), &backend.QueryDataRequest{}, service, dsInfo, service.logger) + require.Error(t, dr.Error) + require.Equal(t, "not found!", dr.Error.Error()) + + err := query.parseResponse(dr, parsedProm, "", service.logger) + require.NoError(t, err) + }) } diff --git a/pkg/tsdb/cloud-monitoring/types.go b/pkg/tsdb/cloud-monitoring/types.go index ce4136247e7..39610af7500 100644 --- a/pkg/tsdb/cloud-monitoring/types.go +++ b/pkg/tsdb/cloud-monitoring/types.go @@ -97,14 +97,6 @@ type ( Unit string `json:"unit"` NextPageToken string `json:"nextPageToken"` } - - promResponse struct { - Status string `json:"status"` - Data struct { - Result any `json:"result"` - ResultType string `json:"resultType"` - } `json:"data"` - } ) type pointIterator interface {