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:
Yuriy Tseretyan
2022-10-26 16:13:58 -04:00
committed by GitHub
parent 596b4fecb0
commit 2d20c8db7b
15 changed files with 79 additions and 42 deletions
+27 -3
View File
@@ -50,14 +50,38 @@ type Query struct {
}
// TimeRange is a time.Time based TimeRange.
type TimeRange struct {
type TimeRange interface {
AbsoluteTime(now time.Time) backend.TimeRange
}
type AbsoluteTimeRange struct {
From time.Time
To time.Time
}
func (r AbsoluteTimeRange) AbsoluteTime(_ time.Time) backend.TimeRange {
return backend.TimeRange{
From: r.From,
To: r.To,
}
}
// RelativeTimeRange is a time range relative to some absolute time.
type RelativeTimeRange struct {
From time.Duration
To time.Duration
}
func (r RelativeTimeRange) AbsoluteTime(t time.Time) backend.TimeRange {
return backend.TimeRange{
From: t.Add(r.From),
To: t.Add(r.To),
}
}
// TransformData takes Queries which are either expressions nodes
// or are datasource requests.
func (s *Service) TransformData(ctx context.Context, req *Request) (r *backend.QueryDataResponse, err error) {
func (s *Service) TransformData(ctx context.Context, now time.Time, req *Request) (r *backend.QueryDataResponse, err error) {
if s.isDisabled() {
return nil, fmt.Errorf("server side expressions are disabled")
}
@@ -83,7 +107,7 @@ func (s *Service) TransformData(ctx context.Context, req *Request) (r *backend.Q
}
// Execute the pipeline
responses, err := s.ExecutePipeline(ctx, pipeline)
responses, err := s.ExecutePipeline(ctx, now, pipeline)
if err != nil {
return nil, err
}