mirror of
https://github.com/grafana/grafana.git
synced 2025-08-02 14:52:16 +08:00
Elasticsearch: Fix processing of response with multiple group by for alerting (#65165)
* Elasticsearch: Fix processing of response with multiple group by on backend * Remove unused param from createFields * Switch comments
This commit is contained in:
@ -1472,14 +1472,14 @@ func TestResponseParser(t *testing.T) {
|
||||
|
||||
require.Len(t, result.response.Responses, 1)
|
||||
frames := result.response.Responses["A"].Frames
|
||||
require.True(t, len(frames) > 0) // FIXME
|
||||
require.True(t, len(frames) > 0)
|
||||
|
||||
for _, field := range frames[0].Fields {
|
||||
trueValue := true
|
||||
filterableConfig := data.FieldConfig{Filterable: &trueValue}
|
||||
|
||||
// we need to test that the only changed setting is `filterable`
|
||||
require.Equal(t, filterableConfig, *field.Config) // FIXME
|
||||
require.Equal(t, filterableConfig, *field.Config)
|
||||
}
|
||||
})
|
||||
})
|
||||
@ -1641,6 +1641,92 @@ func TestResponseParser(t *testing.T) {
|
||||
requireFloatAt(t, 2, f3, 0)
|
||||
requireFloatAt(t, 2, f3, 1)
|
||||
})
|
||||
|
||||
t.Run("With max and multiple terms agg", func(t *testing.T) {
|
||||
targets := map[string]string{
|
||||
"A": `{
|
||||
"metrics": [
|
||||
{
|
||||
"type": "max",
|
||||
"field": "counter",
|
||||
"id": "1"
|
||||
}
|
||||
],
|
||||
"bucketAggs": [{ "type": "terms", "field": "label", "id": "2" }, { "type": "terms", "field": "level", "id": "3" }]
|
||||
}`,
|
||||
}
|
||||
response := `{
|
||||
"responses": [{
|
||||
"aggregations": {
|
||||
"2": {
|
||||
"buckets": [
|
||||
{
|
||||
"key": "val3",
|
||||
"3": {
|
||||
"buckets": [
|
||||
{ "key": "info", "1": { "value": "299" } }, { "key": "error", "1": {"value": "300"} }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "val2",
|
||||
"3": {
|
||||
"buckets": [
|
||||
{"key": "info", "1": {"value": "300"}}, {"key": "error", "1": {"value": "298"} }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "val1",
|
||||
"3": {
|
||||
"buckets": [
|
||||
{"key": "info", "1": {"value": "299"}}, {"key": "error", "1": {"value": "296"} }
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}]
|
||||
}`
|
||||
|
||||
result, err := parseTestResponse(targets, response)
|
||||
assert.Nil(t, err)
|
||||
assert.Len(t, result.Responses, 1)
|
||||
frames := result.Responses["A"].Frames
|
||||
require.Len(t, frames, 1)
|
||||
requireFrameLength(t, frames[0], 6)
|
||||
require.Len(t, frames[0].Fields, 3)
|
||||
|
||||
f1 := frames[0].Fields[0]
|
||||
f2 := frames[0].Fields[1]
|
||||
f3 := frames[0].Fields[2]
|
||||
|
||||
require.Equal(t, "label", f1.Name)
|
||||
require.Equal(t, "level", f2.Name)
|
||||
require.Equal(t, "Max", f3.Name)
|
||||
|
||||
requireStringAt(t, "val3", f1, 0)
|
||||
requireStringAt(t, "val3", f1, 1)
|
||||
requireStringAt(t, "val2", f1, 2)
|
||||
requireStringAt(t, "val2", f1, 3)
|
||||
requireStringAt(t, "val1", f1, 4)
|
||||
requireStringAt(t, "val1", f1, 5)
|
||||
|
||||
requireStringAt(t, "info", f2, 0)
|
||||
requireStringAt(t, "error", f2, 1)
|
||||
requireStringAt(t, "info", f2, 2)
|
||||
requireStringAt(t, "error", f2, 3)
|
||||
requireStringAt(t, "info", f2, 4)
|
||||
requireStringAt(t, "error", f2, 5)
|
||||
|
||||
requireFloatAt(t, 299, f3, 0)
|
||||
requireFloatAt(t, 300, f3, 1)
|
||||
requireFloatAt(t, 300, f3, 2)
|
||||
requireFloatAt(t, 298, f3, 3)
|
||||
requireFloatAt(t, 299, f3, 4)
|
||||
requireFloatAt(t, 296, f3, 5)
|
||||
})
|
||||
}
|
||||
|
||||
func parseTestResponse(tsdbQueries map[string]string, responseBody string) (*backend.QueryDataResponse, error) {
|
||||
|
Reference in New Issue
Block a user