Chore: Expression engine to support relative time range (#57474)
* make TimeRange interface and add relative range * make Execute methods support the current time * update resample to support relative time range * update DSNode to support relative time range * update query service to create queries with absolute time * make alerting evaluator create relative time ranges
This commit is contained in:
@@ -215,10 +215,7 @@ func getExprRequest(ctx EvaluationContext, data []models.AlertQuery, dsCacheServ
|
||||
}
|
||||
|
||||
req.Queries = append(req.Queries, expr.Query{
|
||||
TimeRange: expr.TimeRange{
|
||||
From: q.RelativeTimeRange.ToTimeRange(ctx.At).From,
|
||||
To: q.RelativeTimeRange.ToTimeRange(ctx.At).To,
|
||||
},
|
||||
TimeRange: q.RelativeTimeRange.ToTimeRange(),
|
||||
DataSource: ds,
|
||||
JSON: model,
|
||||
Interval: interval,
|
||||
@@ -334,7 +331,7 @@ func executeQueriesAndExpressions(ctx EvaluationContext, data []models.AlertQuer
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return exprService.TransformData(ctx.Ctx, queryDataReq)
|
||||
return exprService.TransformData(ctx.Ctx, ctx.At, queryDataReq)
|
||||
}
|
||||
|
||||
// datasourceUIDsToRefIDs returns a sorted slice of Ref IDs for each Datasource UID.
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/grafana/grafana/pkg/expr"
|
||||
)
|
||||
|
||||
@@ -70,10 +69,10 @@ func (rtr *RelativeTimeRange) isValid() bool {
|
||||
return rtr.From > rtr.To
|
||||
}
|
||||
|
||||
func (rtr *RelativeTimeRange) ToTimeRange(now time.Time) backend.TimeRange {
|
||||
return backend.TimeRange{
|
||||
From: now.Add(-time.Duration(rtr.From)),
|
||||
To: now.Add(-time.Duration(rtr.To)),
|
||||
func (rtr *RelativeTimeRange) ToTimeRange() expr.TimeRange {
|
||||
return expr.RelativeTimeRange{
|
||||
From: -time.Duration(rtr.From),
|
||||
To: -time.Duration(rtr.To),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -144,14 +144,14 @@ func (s *Service) handleExpressions(ctx context.Context, user *user.SignedInUser
|
||||
MaxDataPoints: pq.query.MaxDataPoints,
|
||||
QueryType: pq.query.QueryType,
|
||||
DataSource: pq.datasource,
|
||||
TimeRange: expr.TimeRange{
|
||||
TimeRange: expr.AbsoluteTimeRange{
|
||||
From: pq.query.TimeRange.From,
|
||||
To: pq.query.TimeRange.To,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
qdr, err := s.expressionService.TransformData(ctx, &exprReq)
|
||||
qdr, err := s.expressionService.TransformData(ctx, time.Now(), &exprReq) // use time now because all queries have absolute time range
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("expression request error: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user