mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting: Sort NumberCaptureValues in EvaluationString (#71927)
This commit changes extractEvalString to sort NumberCaptureValues in ascending order of Var before building the output string. This means that users will see EvaluationString in a consistent order, but also make it possible to assert its output in tests.
This commit is contained in:
parent
dbc0642009
commit
89dcaaf049
@ -2,6 +2,7 @@ package eval
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/data"
|
||||
@ -43,20 +44,20 @@ func extractEvalString(frame *data.Frame) (s string) {
|
||||
}
|
||||
|
||||
if captures, ok := frame.Meta.Custom.([]NumberValueCapture); ok {
|
||||
// Sort captures in ascending order of "Var" so we can assert in tests
|
||||
sort.Slice(captures, func(i, j int) bool {
|
||||
return captures[i].Var < captures[j].Var
|
||||
})
|
||||
sb := strings.Builder{}
|
||||
|
||||
for i, capture := range captures {
|
||||
sb.WriteString("[ ")
|
||||
sb.WriteString(fmt.Sprintf("var='%s' ", capture.Var))
|
||||
sb.WriteString(fmt.Sprintf("labels={%s} ", capture.Labels))
|
||||
|
||||
valString := "null"
|
||||
if capture.Value != nil {
|
||||
valString = fmt.Sprintf("%v", *capture.Value)
|
||||
}
|
||||
|
||||
sb.WriteString(fmt.Sprintf("value=%v ", valString))
|
||||
|
||||
sb.WriteString("]")
|
||||
if i < len(captures)-1 {
|
||||
sb.WriteString(", ")
|
||||
@ -64,7 +65,6 @@ func extractEvalString(frame *data.Frame) (s string) {
|
||||
}
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
|
@ -40,6 +40,14 @@ func TestExtractEvalString(t *testing.T) {
|
||||
}, util.Pointer(1.0), withRefID("A")),
|
||||
outString: `[ var='A0' metric='Test' labels={host=foo} value=32.3 ], [ var='A1' metric='Test' labels={host=baz} value=10 ], [ var='A2' metric='TestA' labels={host=zip} value=11 ]`,
|
||||
},
|
||||
{
|
||||
desc: "Captures are sorted in ascending order of var",
|
||||
inFrame: newMetaFrame([]NumberValueCapture{
|
||||
{Var: "B", Labels: data.Labels{"host": "foo"}, Value: util.Pointer(1.0)},
|
||||
{Var: "A", Labels: data.Labels{"host": "foo"}, Value: util.Pointer(10.0)},
|
||||
}, util.Pointer(1.0)),
|
||||
outString: `[ var='A' labels={host=foo} value=10 ], [ var='B' labels={host=foo} value=1 ]`,
|
||||
},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.desc, func(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user