Alerting: Fix mathexp.NoData cannot be reduced (#55347)

This commit fixes a bug where queries from datasources such as InfluxDB that returned no data would not create a DatasourceNoData alert, but instead an error "can only reduce type series, got type noData".
This commit is contained in:
George Robinson 2022-09-21 10:01:51 +01:00 committed by GitHub
parent 28ebdf1641
commit 7d20766ae9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 0 deletions

View File

@ -171,6 +171,8 @@ func (gr *ReduceCommand) Execute(_ context.Context, vars mathexp.Vars) (mathexp.
Text: fmt.Sprintf("Reduce operation is not needed. Input query or expression %s is already reduced data.", gr.VarToReduce),
})
newRes.Values = append(newRes.Values, copyV)
case mathexp.NoData:
newRes.Values = append(newRes.Values, v.New())
default:
return newRes, fmt.Errorf("can only reduce type series, got type %v", val.Type())
}

View File

@ -8,6 +8,7 @@ import (
"testing"
"github.com/grafana/grafana-plugin-sdk-go/data"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
ptr "github.com/xorcare/pointer"
@ -136,6 +137,32 @@ func TestReduceExecute(t *testing.T) {
}
})
})
t.Run("should return new NoData", func(t *testing.T) {
var noData mathexp.Values = []mathexp.Value{
mathexp.NoData{Frame: data.NewFrame("no data")},
}
vars := map[string]mathexp.Results{
varToReduce: {
Values: noData,
},
}
results, err := cmd.Execute(context.Background(), vars)
require.NoError(t, err)
require.Len(t, results.Values, 1)
v := results.Values[0]
assert.Equal(t, v, mathexp.NoData{}.New())
// should not be able to change the original frame
v.AsDataFrame().Name = "there is still no data"
assert.NotEqual(t, v, mathexp.NoData{}.New())
assert.NotEqual(t, v, noData[0])
assert.Equal(t, "no data", noData[0].AsDataFrame().Name)
})
}
func randomReduceFunc() string {