* add function to convert StateTransition to LokiEntry * add QueryResultBuilder * update backtesting to produce result similar to historian * make shouldRecord public * filter out noop transitions * add experimental front-end * add new fields * move conversion of api model to AlertRule to validation * add extra labels * calculate tick timestamp using the same logic as in scheduler * implement correct logic of calculating first evaluation timestamp * add uid, group and folder uid they are needed for jitter strategy * add JitterOffsetInDuration and JitterStrategy.String() * add config `backtesting_max_evaluations` to [unified_alerting] (not documented for now) * remove obsolete tests * elevate permisisons for backtesting endpoint * move backtesting to separate dir
31 lines
656 B
Go
31 lines
656 B
Go
package backtesting
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/services/ngalert/eval"
|
|
)
|
|
|
|
// QueryEvaluator is evaluator of regular alert rule queries
|
|
type queryEvaluator struct {
|
|
eval eval.ConditionEvaluator
|
|
}
|
|
|
|
func (d *queryEvaluator) Eval(ctx context.Context, from time.Time, interval time.Duration, evaluations int, callback callbackFunc) error {
|
|
for idx, now := 0, from; idx < evaluations; idx, now = idx+1, now.Add(interval) {
|
|
results, err := d.eval.Evaluate(ctx, now)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
cont, err := callback(idx, now, results)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !cont {
|
|
break
|
|
}
|
|
}
|
|
return nil
|
|
}
|