mirror of
https://github.com/grafana/grafana.git
synced 2024-11-26 19:00:54 -06:00
e9d6135e33
* replace math expression with predicates
89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
package expr
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/data"
|
|
|
|
"github.com/grafana/grafana/pkg/expr/mathexp"
|
|
"github.com/grafana/grafana/pkg/infra/tracing"
|
|
"github.com/grafana/grafana/pkg/util"
|
|
)
|
|
|
|
func BenchmarkThreshold(b *testing.B) {
|
|
results := make(mathexp.Values, 0, 1000)
|
|
for i := 0; i < cap(results); i++ {
|
|
n := newNumber(data.Labels{"test": fmt.Sprintf("series-%d", i)}, util.Pointer(float64(i)))
|
|
results = append(results, n)
|
|
}
|
|
ctx := context.Background()
|
|
timeNow := time.Now()
|
|
vars := mathexp.Vars{
|
|
"A": newResults(results...),
|
|
}
|
|
trace := tracing.InitializeTracerForTest()
|
|
b.ResetTimer()
|
|
b.Run("greater than", func(b *testing.B) {
|
|
greater, err := NewThresholdCommand("B", "A", ThresholdIsAbove, []float64{500})
|
|
if err != nil {
|
|
b.Fatalf("error: %s", err)
|
|
}
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_, _ = greater.Execute(ctx, timeNow, vars, trace)
|
|
}
|
|
})
|
|
b.Run("less than", func(b *testing.B) {
|
|
greater, err := NewThresholdCommand("B", "A", ThresholdIsAbove, []float64{500})
|
|
if err != nil {
|
|
b.Fatalf("error: %s", err)
|
|
}
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_, _ = greater.Execute(ctx, timeNow, vars, trace)
|
|
}
|
|
})
|
|
b.Run("within range", func(b *testing.B) {
|
|
greater, err := NewThresholdCommand("B", "A", ThresholdIsWithinRange, []float64{400.0, 600.0})
|
|
if err != nil {
|
|
b.Fatalf("error: %s", err)
|
|
}
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_, _ = greater.Execute(ctx, timeNow, vars, trace)
|
|
}
|
|
})
|
|
b.Run("within range, no labels", func(b *testing.B) {
|
|
greater, err := NewThresholdCommand("B", "A", ThresholdIsWithinRange, []float64{400.0, 600.0})
|
|
if err != nil {
|
|
b.Fatalf("error: %s", err)
|
|
}
|
|
|
|
results := make(mathexp.Values, 0, 1000)
|
|
for i := 0; i < cap(results); i++ {
|
|
n := newNumber(nil, util.Pointer(float64(i)))
|
|
results = append(results, n)
|
|
}
|
|
vars := mathexp.Vars{
|
|
"A": newResults(results...),
|
|
}
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_, _ = greater.Execute(ctx, timeNow, vars, trace)
|
|
}
|
|
})
|
|
b.Run("outside range", func(b *testing.B) {
|
|
greater, err := NewThresholdCommand("B", "A", ThresholdIsOutsideRange, []float64{400.0, 600.0})
|
|
if err != nil {
|
|
b.Fatalf("error: %s", err)
|
|
}
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_, _ = greater.Execute(ctx, timeNow, vars, trace)
|
|
}
|
|
})
|
|
}
|