mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
|
|
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
|
||
|
|
}
|