mirror of
https://github.com/grafana/grafana.git
synced 2025-02-09 23:16:16 -06:00
OpenTSDB: Use refid to support alerting on multiple queries (#77575)
* add refid to responses * add test for refId
This commit is contained in:
parent
f40de8b613
commit
ef7b583169
@ -70,6 +70,8 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest)
|
||||
|
||||
q := req.Queries[0]
|
||||
|
||||
myRefID := q.RefID
|
||||
|
||||
tsdbQuery.Start = q.TimeRange.From.UnixNano() / int64(time.Millisecond)
|
||||
tsdbQuery.End = q.TimeRange.To.UnixNano() / int64(time.Millisecond)
|
||||
|
||||
@ -105,7 +107,7 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest)
|
||||
}
|
||||
}()
|
||||
|
||||
result, err := s.parseResponse(logger, res)
|
||||
result, err := s.parseResponse(logger, res, myRefID)
|
||||
if err != nil {
|
||||
return &backend.QueryDataResponse{}, err
|
||||
}
|
||||
@ -136,7 +138,7 @@ func (s *Service) createRequest(ctx context.Context, logger log.Logger, dsInfo *
|
||||
return req, nil
|
||||
}
|
||||
|
||||
func (s *Service) parseResponse(logger log.Logger, res *http.Response) (*backend.QueryDataResponse, error) {
|
||||
func (s *Service) parseResponse(logger log.Logger, res *http.Response, myRefID string) (*backend.QueryDataResponse, error) {
|
||||
resp := backend.NewQueryDataResponse()
|
||||
|
||||
body, err := io.ReadAll(res.Body)
|
||||
@ -181,9 +183,9 @@ func (s *Service) parseResponse(logger log.Logger, res *http.Response) (*backend
|
||||
data.NewField("time", nil, timeVector),
|
||||
data.NewField("value", tags, values)))
|
||||
}
|
||||
result := resp.Responses["A"]
|
||||
result := resp.Responses[myRefID]
|
||||
result.Frames = frames
|
||||
resp.Responses["A"] = result
|
||||
resp.Responses[myRefID] = result
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ func TestOpenTsdbExecutor(t *testing.T) {
|
||||
t.Run("Parse response should handle invalid JSON", func(t *testing.T) {
|
||||
response := `{ invalid }`
|
||||
|
||||
result, err := service.parseResponse(logger, &http.Response{Body: io.NopCloser(strings.NewReader(response))})
|
||||
result, err := service.parseResponse(logger, &http.Response{Body: io.NopCloser(strings.NewReader(response))}, "A")
|
||||
require.Nil(t, result)
|
||||
require.Error(t, err)
|
||||
})
|
||||
@ -63,7 +63,7 @@ func TestOpenTsdbExecutor(t *testing.T) {
|
||||
|
||||
resp := http.Response{Body: io.NopCloser(strings.NewReader(response))}
|
||||
resp.StatusCode = 200
|
||||
result, err := service.parseResponse(logger, &resp)
|
||||
result, err := service.parseResponse(logger, &resp, "A")
|
||||
require.NoError(t, err)
|
||||
|
||||
frame := result.Responses["A"]
|
||||
@ -73,6 +73,41 @@ func TestOpenTsdbExecutor(t *testing.T) {
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("ref id is not hard coded", func(t *testing.T) {
|
||||
myRefid := "reference id"
|
||||
|
||||
response := `
|
||||
[
|
||||
{
|
||||
"metric": "test",
|
||||
"dps": {
|
||||
"1405544146": 50.0
|
||||
},
|
||||
"tags" : {
|
||||
"env": "prod",
|
||||
"app": "grafana"
|
||||
}
|
||||
}
|
||||
]`
|
||||
|
||||
testFrame := data.NewFrame("test",
|
||||
data.NewField("time", nil, []time.Time{
|
||||
time.Date(2014, 7, 16, 20, 55, 46, 0, time.UTC),
|
||||
}),
|
||||
data.NewField("value", map[string]string{"env": "prod", "app": "grafana"}, []float64{
|
||||
50}),
|
||||
)
|
||||
|
||||
resp := http.Response{Body: io.NopCloser(strings.NewReader(response))}
|
||||
resp.StatusCode = 200
|
||||
result, err := service.parseResponse(logger, &resp, myRefid)
|
||||
require.NoError(t, err)
|
||||
|
||||
if diff := cmp.Diff(testFrame, result.Responses[myRefid].Frames[0], data.FrameTestCompareOptions()...); diff != "" {
|
||||
t.Errorf("Result mismatch (-want +got):\n%s", diff)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Build metric with downsampling enabled", func(t *testing.T) {
|
||||
query := backend.DataQuery{
|
||||
JSON: []byte(`
|
||||
|
Loading…
Reference in New Issue
Block a user