-
Notifications
You must be signed in to change notification settings - Fork 3.4k
/
step_evaluator.go
51 lines (39 loc) · 1.2 KB
/
step_evaluator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package logql
import (
"github.com/prometheus/prometheus/promql"
)
type StepResult interface {
SampleVector() promql.Vector
QuantileSketchVec() ProbabilisticQuantileVector
}
type SampleVector promql.Vector
var _ StepResult = SampleVector{}
func (p SampleVector) SampleVector() promql.Vector {
return promql.Vector(p)
}
func (p SampleVector) QuantileSketchVec() ProbabilisticQuantileVector {
return ProbabilisticQuantileVector{}
}
// StepEvaluator evaluate a single step of a query.
type StepEvaluator interface {
// while Next returns a promql.Value, the only acceptable types are Scalar and Vector.
Next() (ok bool, ts int64, r StepResult)
// Close all resources used.
Close() error
// Reports any error
Error() error
// Explain returns a print of the step evaluation tree
Explain(Node)
}
type EmptyEvaluator[R StepResult] struct {
value R
}
var _ StepEvaluator = EmptyEvaluator[SampleVector]{}
// Close implements StepEvaluator.
func (EmptyEvaluator[_]) Close() error { return nil }
// Error implements StepEvaluator.
func (EmptyEvaluator[_]) Error() error { return nil }
// Next implements StepEvaluator.
func (e EmptyEvaluator[_]) Next() (ok bool, ts int64, r StepResult) {
return false, 0, e.value
}