@@ -14,33 +14,39 @@ const (
1414 stepBatch = 10
1515)
1616
17- func LogicalPlanGenMiddleware (lookbackDelta time. Duration , enablePerStepStats bool , disableDuplicateLabelChecks bool ) Middleware {
17+ func LogicalPlanGenMiddleware () Middleware {
1818 return MiddlewareFunc (func (next Handler ) Handler {
1919 return logicalPlanGen {
20- lookbackDelta : lookbackDelta ,
21- enabledPerStepStats : enablePerStepStats ,
22- next : next ,
23- disableDuplicateLabelChecks : disableDuplicateLabelChecks ,
20+ next : next ,
2421 }
2522 })
2623}
2724
2825type logicalPlanGen struct {
29- lookbackDelta time.Duration
30- enabledPerStepStats bool
31- next Handler
32- disableDuplicateLabelChecks bool
26+ next Handler
3327}
3428
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+ }
4450 }
4551
4652 expr , err := parser .NewParser (qs , parser .WithFunctions (parser .Functions )).ParseExpr ()
@@ -49,52 +55,15 @@ func (l logicalPlanGen) NewInstantLogicalPlan(qs string, ts time.Time) ([]byte,
4955 }
5056
5157 planOpts := logicalplan.PlanOptions {
52- DisableDuplicateLabelCheck : l . disableDuplicateLabelChecks ,
58+ DisableDuplicateLabelCheck : false ,
5359 }
5460
5561 logicalPlan := logicalplan .NewFromAST (expr , & qOpts , planOpts )
5662 optimizedPlan , _ := logicalPlan .Optimize (logicalplan .DefaultOptimizers )
5763
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
6465
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
9867}
9968
10069func (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) {
10574
10675 startTime := time .Unix (0 , promReq .Start * int64 (time .Millisecond ))
10776 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
10978
110- var byteLP []byte
11179 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- }
11780
81+ newLogicalPlan , err := l .NewLogicalPlan (promReq .Query , startTime , endTime , step )
11882 if err != nil {
11983 return nil , err
12084 }
121- promReq .LogicalPlan = byteLP
85+
86+ promReq .LogicalPlan = newLogicalPlan
12287
12388 return l .next .Do (ctx , r )
12489}
0 commit comments