Files
grafana/pkg/services/ngalert/eval/eval_bench_test.go

60 lines
1.5 KiB
Go
Raw Normal View History

package eval
import (
"context"
"strconv"
"testing"
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/data"
"github.com/grafana/grafana/pkg/expr"
"github.com/grafana/grafana/pkg/services/ngalert/models"
"github.com/grafana/grafana/pkg/util"
)
func BenchmarkEvaluate(b *testing.B) {
var dataResp backend.QueryDataResponse
seedDataResponse(&dataResp, 10000)
var evaluator ConditionEvaluator = &conditionEvaluator{
expressionService: &fakeExpressionService{
hook: func(ctx context.Context, now time.Time, pipeline expr.DataPipeline) (*backend.QueryDataResponse, error) {
return &dataResp, nil
},
},
condition: models.Condition{
Condition: "B",
},
}
for i := 0; i < b.N; i++ {
_, err := evaluator.Evaluate(context.Background(), time.Now())
if err != nil {
b.Fatalf("Unexpected error: %s", err)
}
}
}
func seedDataResponse(r *backend.QueryDataResponse, n int) {
resps := make(backend.Responses, n)
for i := 0; i < n; i++ {
labels := data.Labels{
"foo": strconv.Itoa(i),
"bar": strconv.Itoa(i + 1),
}
a, b := resps["A"], resps["B"]
a.Frames = append(a.Frames, &data.Frame{
Fields: data.Fields{
data.NewField("Time", labels, []time.Time{time.Now()}),
data.NewField("Value", labels, []*float64{util.Pointer(1.0)}),
},
})
b.Frames = append(b.Frames, &data.Frame{
Fields: data.Fields{
data.NewField("Value", labels, []*float64{util.Pointer(1.0)}),
},
})
resps["A"], resps["B"] = a, b
}
r.Responses = resps
}