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