@@ -14,33 +14,39 @@ const (
14
14
stepBatch = 10
15
15
)
16
16
17
- func LogicalPlanGenMiddleware (lookbackDelta time. Duration , enablePerStepStats bool , disableDuplicateLabelChecks bool ) Middleware {
17
+ func LogicalPlanGenMiddleware () Middleware {
18
18
return MiddlewareFunc (func (next Handler ) Handler {
19
19
return logicalPlanGen {
20
- lookbackDelta : lookbackDelta ,
21
- enabledPerStepStats : enablePerStepStats ,
22
- next : next ,
23
- disableDuplicateLabelChecks : disableDuplicateLabelChecks ,
20
+ next : next ,
24
21
}
25
22
})
26
23
}
27
24
28
25
type logicalPlanGen struct {
29
- lookbackDelta time.Duration
30
- enabledPerStepStats bool
31
- next Handler
32
- disableDuplicateLabelChecks bool
26
+ next Handler
33
27
}
34
28
35
- func (l logicalPlanGen ) NewInstantLogicalPlan (qs string , ts time.Time ) ([]byte , error ) {
36
-
37
- qOpts := query.Options {
38
- Start : ts ,
39
- End : ts ,
40
- Step : 0 ,
41
- StepsBatch : stepBatch ,
42
- LookbackDelta : l .lookbackDelta ,
43
- EnablePerStepStats : l .disableDuplicateLabelChecks ,
29
+ func (l logicalPlanGen ) NewLogicalPlan (qs string , start time.Time , end time.Time , step time.Duration ) (* logicalplan.Plan , error ) {
30
+
31
+ qOpts := query.Options {}
32
+ if step == 0 {
33
+ qOpts = query.Options {
34
+ Start : start ,
35
+ End : start ,
36
+ Step : 0 ,
37
+ StepsBatch : stepBatch ,
38
+ LookbackDelta : 0 ,
39
+ EnablePerStepStats : false ,
40
+ }
41
+ } else {
42
+ qOpts = query.Options {
43
+ Start : start ,
44
+ End : end ,
45
+ Step : step ,
46
+ StepsBatch : stepBatch ,
47
+ LookbackDelta : 0 ,
48
+ EnablePerStepStats : false ,
49
+ }
44
50
}
45
51
46
52
expr , err := parser .NewParser (qs , parser .WithFunctions (parser .Functions )).ParseExpr ()
@@ -49,52 +55,15 @@ func (l logicalPlanGen) NewInstantLogicalPlan(qs string, ts time.Time) ([]byte,
49
55
}
50
56
51
57
planOpts := logicalplan.PlanOptions {
52
- DisableDuplicateLabelCheck : l . disableDuplicateLabelChecks ,
58
+ DisableDuplicateLabelCheck : false ,
53
59
}
54
60
55
61
logicalPlan := logicalplan .NewFromAST (expr , & qOpts , planOpts )
56
62
optimizedPlan , _ := logicalPlan .Optimize (logicalplan .DefaultOptimizers )
57
63
58
- // TODO: Add distributed optimizer for remote node insertion
59
-
60
- byteLP , err := logicalplan .Marshal (optimizedPlan .Root ())
61
- if err != nil {
62
- return nil , err
63
- }
64
+ //TODO: Add distributed query optimizer
64
65
65
- return byteLP , nil
66
- }
67
-
68
- func (l logicalPlanGen ) NewRangeLogicalPlan (qs string , start , end time.Time , interval time.Duration ) ([]byte , error ) {
69
-
70
- qOpts := query.Options {
71
- Start : start ,
72
- End : end ,
73
- Step : interval ,
74
- StepsBatch : stepBatch ,
75
- LookbackDelta : l .lookbackDelta ,
76
- EnablePerStepStats : l .enabledPerStepStats ,
77
- }
78
-
79
- expr , err := parser .NewParser (qs , parser .WithFunctions (parser .Functions )).ParseExpr ()
80
- if err != nil {
81
- return nil , err
82
- }
83
-
84
- planOpts := logicalplan.PlanOptions {
85
- DisableDuplicateLabelCheck : l .disableDuplicateLabelChecks ,
86
- }
87
-
88
- lPlan := logicalplan .NewFromAST (expr , & qOpts , planOpts )
89
- optimizedPlan , _ := lPlan .Optimize (logicalplan .DefaultOptimizers )
90
- byteLP , err := logicalplan .Marshal (optimizedPlan .Root ())
91
- if err != nil {
92
- return nil , err
93
- }
94
-
95
- // TODO: Add distributed optimizer for remote node insertion
96
-
97
- return byteLP , nil
66
+ return & optimizedPlan , nil
98
67
}
99
68
100
69
func (l logicalPlanGen ) Do (ctx context.Context , r Request ) (Response , error ) {
@@ -105,20 +74,16 @@ func (l logicalPlanGen) Do(ctx context.Context, r Request) (Response, error) {
105
74
106
75
startTime := time .Unix (0 , promReq .Start * int64 (time .Millisecond ))
107
76
endTime := time .Unix (0 , promReq .End * int64 (time .Millisecond ))
108
- duration := time .Duration (promReq .Step ) * time .Millisecond
77
+ step := time .Duration (promReq .Step ) * time .Millisecond
109
78
110
- var byteLP []byte
111
79
var err error
112
- if promReq .Step != 0 {
113
- byteLP , err = l .NewRangeLogicalPlan (promReq .Query , startTime , endTime , duration )
114
- } else {
115
- byteLP , err = l .NewInstantLogicalPlan (promReq .Query , startTime )
116
- }
117
80
81
+ newLogicalPlan , err := l .NewLogicalPlan (promReq .Query , startTime , endTime , step )
118
82
if err != nil {
119
83
return nil , err
120
84
}
121
- promReq .LogicalPlan = byteLP
85
+
86
+ promReq .LogicalPlan = newLogicalPlan
122
87
123
88
return l .next .Do (ctx , r )
124
89
}
0 commit comments