Allow using alternative PromQL engines for rule evaluation
Signed-off-by: Charles Korn <charles.korn@grafana.com>
This commit is contained in:
		
							parent
							
								
									e6b7bbcb6a
								
							
						
					
					
						commit
						4e77e8e5ef
					
				|  | @ -115,6 +115,13 @@ func (e ErrStorage) Error() string { | ||||||
| 	return e.Err.Error() | 	return e.Err.Error() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // QueryEngine defines the interface for the *promql.Engine, so it can be replaced, wrapped or mocked.
 | ||||||
|  | type QueryEngine interface { | ||||||
|  | 	SetQueryLogger(l QueryLogger) | ||||||
|  | 	NewInstantQuery(ctx context.Context, q storage.Queryable, opts QueryOpts, qs string, ts time.Time) (Query, error) | ||||||
|  | 	NewRangeQuery(ctx context.Context, q storage.Queryable, opts QueryOpts, qs string, start, end time.Time, interval time.Duration) (Query, error) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // QueryLogger is an interface that can be used to log all the queries logged
 | // QueryLogger is an interface that can be used to log all the queries logged
 | ||||||
| // by the engine.
 | // by the engine.
 | ||||||
| type QueryLogger interface { | type QueryLogger interface { | ||||||
|  |  | ||||||
|  | @ -43,7 +43,7 @@ type QueryFunc func(ctx context.Context, q string, t time.Time) (promql.Vector, | ||||||
| // EngineQueryFunc returns a new query function that executes instant queries against
 | // EngineQueryFunc returns a new query function that executes instant queries against
 | ||||||
| // the given engine.
 | // the given engine.
 | ||||||
| // It converts scalar into vector results.
 | // It converts scalar into vector results.
 | ||||||
| func EngineQueryFunc(engine *promql.Engine, q storage.Queryable) QueryFunc { | func EngineQueryFunc(engine promql.QueryEngine, q storage.Queryable) QueryFunc { | ||||||
| 	return func(ctx context.Context, qs string, t time.Time) (promql.Vector, error) { | 	return func(ctx context.Context, qs string, t time.Time) (promql.Vector, error) { | ||||||
| 		q, err := engine.NewInstantQuery(ctx, q, nil, qs, t) | 		q, err := engine.NewInstantQuery(ctx, q, nil, qs, t) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  |  | ||||||
|  | @ -177,13 +177,6 @@ type TSDBAdminStats interface { | ||||||
| 	WALReplayStatus() (tsdb.WALReplayStatus, error) | 	WALReplayStatus() (tsdb.WALReplayStatus, error) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // QueryEngine defines the interface for the *promql.Engine, so it can be replaced, wrapped or mocked.
 |  | ||||||
| type QueryEngine interface { |  | ||||||
| 	SetQueryLogger(l promql.QueryLogger) |  | ||||||
| 	NewInstantQuery(ctx context.Context, q storage.Queryable, opts promql.QueryOpts, qs string, ts time.Time) (promql.Query, error) |  | ||||||
| 	NewRangeQuery(ctx context.Context, q storage.Queryable, opts promql.QueryOpts, qs string, start, end time.Time, interval time.Duration) (promql.Query, error) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type QueryOpts interface { | type QueryOpts interface { | ||||||
| 	EnablePerStepStats() bool | 	EnablePerStepStats() bool | ||||||
| 	LookbackDelta() time.Duration | 	LookbackDelta() time.Duration | ||||||
|  | @ -193,7 +186,7 @@ type QueryOpts interface { | ||||||
| // them using the provided storage and query engine.
 | // them using the provided storage and query engine.
 | ||||||
| type API struct { | type API struct { | ||||||
| 	Queryable         storage.SampleAndChunkQueryable | 	Queryable         storage.SampleAndChunkQueryable | ||||||
| 	QueryEngine       QueryEngine | 	QueryEngine       promql.QueryEngine | ||||||
| 	ExemplarQueryable storage.ExemplarQueryable | 	ExemplarQueryable storage.ExemplarQueryable | ||||||
| 
 | 
 | ||||||
| 	scrapePoolsRetriever  func(context.Context) ScrapePoolsRetriever | 	scrapePoolsRetriever  func(context.Context) ScrapePoolsRetriever | ||||||
|  | @ -226,7 +219,7 @@ type API struct { | ||||||
| 
 | 
 | ||||||
| // NewAPI returns an initialized API type.
 | // NewAPI returns an initialized API type.
 | ||||||
| func NewAPI( | func NewAPI( | ||||||
| 	qe QueryEngine, | 	qe promql.QueryEngine, | ||||||
| 	q storage.SampleAndChunkQueryable, | 	q storage.SampleAndChunkQueryable, | ||||||
| 	ap storage.Appendable, | 	ap storage.Appendable, | ||||||
| 	eq storage.ExemplarQueryable, | 	eq storage.ExemplarQueryable, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue