diff --git a/pkg/tests/api/prometheus/prometheus_test.go b/pkg/tests/api/prometheus/prometheus_test.go index cab8f2b7e8f..eb5c0dc34f2 100644 --- a/pkg/tests/api/prometheus/prometheus_test.go +++ b/pkg/tests/api/prometheus/prometheus_test.go @@ -87,7 +87,7 @@ func TestIntegrationPrometheus(t *testing.T) { // nolint:gosec resp, err := http.Post(u, "application/json", buf1) require.NoError(t, err) - require.Equal(t, http.StatusInternalServerError, resp.StatusCode) + require.Equal(t, http.StatusOK, resp.StatusCode) t.Cleanup(func() { err := resp.Body.Close() require.NoError(t, err) @@ -123,7 +123,7 @@ func TestIntegrationPrometheus(t *testing.T) { // nolint:gosec resp, err := http.Post(u, "application/json", buf1) require.NoError(t, err) - require.Equal(t, http.StatusInternalServerError, resp.StatusCode) + require.Equal(t, http.StatusOK, resp.StatusCode) t.Cleanup(func() { err := resp.Body.Close() require.NoError(t, err) diff --git a/pkg/tsdb/prometheus/querydata/request.go b/pkg/tsdb/prometheus/querydata/request.go index e37b22cfb71..7834c699491 100644 --- a/pkg/tsdb/prometheus/querydata/request.go +++ b/pkg/tsdb/prometheus/querydata/request.go @@ -125,23 +125,17 @@ func (s *QueryData) fetch(ctx context.Context, client *client.Client, q *models. if q.InstantQuery { res, err := s.instantQuery(traceCtx, client, q, headers) - if err != nil { - return nil, err - } - response.Error = res.Error + response.Error = err response.Frames = res.Frames } if q.RangeQuery { res, err := s.rangeQuery(traceCtx, client, q, headers) if err != nil { - return nil, err - } - if res.Error != nil { if response.Error == nil { - response.Error = res.Error + response.Error = err } else { - response.Error = fmt.Errorf("%v %w", response.Error, res.Error) // lovely + response.Error = fmt.Errorf("%v %w", response.Error, err) } } response.Frames = append(response.Frames, res.Frames...) diff --git a/pkg/tsdb/prometheus/querydata/response.go b/pkg/tsdb/prometheus/querydata/response.go index 019b6850196..69d38ae6a4d 100644 --- a/pkg/tsdb/prometheus/querydata/response.go +++ b/pkg/tsdb/prometheus/querydata/response.go @@ -29,11 +29,13 @@ func (s *QueryData) parseResponse(ctx context.Context, q *models.Query, res *htt MatrixWideSeries: s.enableWideSeries, VectorWideSeries: s.enableWideSeries, }) - if r.Frames == nil { - return r, fmt.Errorf("received empty response from prometheus") - } // The ExecutedQueryString can be viewed in QueryInspector in UI + // Add frame to attach metadata to it + if len(r.Frames) == 0 { + r.Frames = append(r.Frames, data.NewFrame("")) + } + for _, frame := range r.Frames { if s.enableWideSeries { addMetadataToWideFrame(q, frame) @@ -42,6 +44,10 @@ func (s *QueryData) parseResponse(ctx context.Context, q *models.Query, res *htt } } + if r.Error != nil { + return r, r.Error + } + r = s.processExemplars(q, r) return r, nil } diff --git a/pkg/tsdb/prometheus/testdata/exemplar.result.golden.jsonc b/pkg/tsdb/prometheus/testdata/exemplar.result.golden.jsonc index cc2da59edab..b1e6776bd6e 100644 --- a/pkg/tsdb/prometheus/testdata/exemplar.result.golden.jsonc +++ b/pkg/tsdb/prometheus/testdata/exemplar.result.golden.jsonc @@ -26,6 +26,16 @@ // +-----------------------------------+-----------------+--------------------------------------------+----------------+-------------------+-------------------+----------------+----------------+--------------------+----------------+------------------+-----------------+-------------------+----------------------------------+ // // +// +// Frame[1] { +// "executedQueryString": "Expr: histogram_quantile(0.99, sum(rate(traces_spanmetrics_duration_seconds_bucket[15s])) by (le))\nStep: 15s" +// } +// Name: +// Dimensions: 0 Fields by 0 Rows +// + +// + +// +// // 🌟 This was machine generated. Do not edit. 🌟 { "status": 200, @@ -1040,6 +1050,17 @@ ] ] } + }, + { + "schema": { + "meta": { + "executedQueryString": "Expr: histogram_quantile(0.99, sum(rate(traces_spanmetrics_duration_seconds_bucket[15s])) by (le))\nStep: 15s" + }, + "fields": [] + }, + "data": { + "values": [] + } } ] } \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/exemplar.result.streaming-wide.golden.jsonc b/pkg/tsdb/prometheus/testdata/exemplar.result.streaming-wide.golden.jsonc index cc2da59edab..b1e6776bd6e 100644 --- a/pkg/tsdb/prometheus/testdata/exemplar.result.streaming-wide.golden.jsonc +++ b/pkg/tsdb/prometheus/testdata/exemplar.result.streaming-wide.golden.jsonc @@ -26,6 +26,16 @@ // +-----------------------------------+-----------------+--------------------------------------------+----------------+-------------------+-------------------+----------------+----------------+--------------------+----------------+------------------+-----------------+-------------------+----------------------------------+ // // +// +// Frame[1] { +// "executedQueryString": "Expr: histogram_quantile(0.99, sum(rate(traces_spanmetrics_duration_seconds_bucket[15s])) by (le))\nStep: 15s" +// } +// Name: +// Dimensions: 0 Fields by 0 Rows +// + +// + +// +// // 🌟 This was machine generated. Do not edit. 🌟 { "status": 200, @@ -1040,6 +1050,17 @@ ] ] } + }, + { + "schema": { + "meta": { + "executedQueryString": "Expr: histogram_quantile(0.99, sum(rate(traces_spanmetrics_duration_seconds_bucket[15s])) by (le))\nStep: 15s" + }, + "fields": [] + }, + "data": { + "values": [] + } } ] } \ No newline at end of file