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:
+27
-3
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user