@@ -136,43 +136,15 @@ func (s *Server) findSeriesRemote(orgId int, patterns []string, seenAfter int64,
136
136
}
137
137
138
138
func (s * Server ) renderMetrics (ctx * middleware.Context , request models.GraphiteRender ) {
139
+
139
140
now := time .Now ()
140
141
defaultFrom := uint32 (now .Add (- time .Duration (24 ) * time .Hour ).Unix ())
141
142
defaultTo := uint32 (now .Unix ())
142
-
143
- var loc * time.Location
144
- switch request .Tz {
145
- case "" :
146
- loc = timeZone
147
- case "local" :
148
- loc = time .Local
149
- default :
150
- var err error
151
- loc , err = time .LoadLocation (request .Tz )
152
- if err != nil {
153
- response .Write (ctx , response .NewError (http .StatusBadRequest , err .Error ()))
154
- return
155
- }
156
- }
157
-
158
- from := request .From
159
- to := request .To
160
- if to == "" {
161
- to = request .Until
162
- }
163
-
164
- fromUnix , err := dur .ParseDateTime (from , loc , now , defaultFrom )
165
- if err != nil {
166
- response .Write (ctx , response .NewError (http .StatusBadRequest , err .Error ()))
167
- return
168
- }
169
-
170
- toUnix , err := dur .ParseDateTime (to , loc , now , defaultTo )
143
+ fromUnix , toUnix , err := getFromTo (request .FromTo , now , defaultFrom , defaultTo )
171
144
if err != nil {
172
145
response .Write (ctx , response .NewError (http .StatusBadRequest , err .Error ()))
173
146
return
174
147
}
175
-
176
148
if fromUnix >= toUnix {
177
149
response .Write (ctx , response .NewError (http .StatusBadRequest , InvalidTimeRangeErr .Error ()))
178
150
return
@@ -246,8 +218,15 @@ func (s *Server) renderMetrics(ctx *middleware.Context, request models.GraphiteR
246
218
}
247
219
248
220
func (s * Server ) metricsFind (ctx * middleware.Context , request models.GraphiteFind ) {
221
+ now := time .Now ()
222
+ var defaultFrom , defaultTo uint32
223
+ fromUnix , toUnix , err := getFromTo (request .FromTo , now , defaultFrom , defaultTo )
224
+ if err != nil {
225
+ response .Write (ctx , response .NewError (http .StatusBadRequest , err .Error ()))
226
+ return
227
+ }
249
228
nodes := make ([]idx.Node , 0 )
250
- series , err := s .findSeries (ctx .OrgId , []string {request .Query }, request . From )
229
+ series , err := s .findSeries (ctx .OrgId , []string {request .Query }, int64 ( fromUnix ) )
251
230
if err != nil {
252
231
response .Write (ctx , response .WrapError (err ))
253
232
return
@@ -273,7 +252,7 @@ func (s *Server) metricsFind(ctx *middleware.Context, request models.GraphiteFin
273
252
case "completer" :
274
253
response .Write (ctx , response .NewJson (200 , findCompleter (nodes ), request .Jsonp ))
275
254
case "pickle" :
276
- response .Write (ctx , response .NewPickle (200 , findPickle (nodes , request )))
255
+ response .Write (ctx , response .NewPickle (200 , findPickle (nodes , request , fromUnix , toUnix )))
277
256
}
278
257
}
279
258
@@ -383,11 +362,11 @@ func findCompleter(nodes []idx.Node) models.SeriesCompleter {
383
362
return result
384
363
}
385
364
386
- func findPickle (nodes []idx.Node , request models.GraphiteFind ) models.SeriesPickle {
365
+ func findPickle (nodes []idx.Node , request models.GraphiteFind , fromUnix , toUnix uint32 ) models.SeriesPickle {
387
366
result := make ([]models.SeriesPickleItem , len (nodes ))
388
367
var intervals [][]int64
389
- if request . From != 0 && request . Until != 0 {
390
- intervals = [][]int64 {{request . From , request . Until }}
368
+ if fromUnix != 0 && toUnix != 0 {
369
+ intervals = [][]int64 {{int64 ( fromUnix ), int64 ( toUnix ) }}
391
370
}
392
371
for i , g := range nodes {
393
372
result [i ] = models .NewSeriesPickleItem (g .Path , g .Leaf , intervals )
@@ -598,3 +577,38 @@ func (s *Server) executePlan(orgId int, plan expr.Plan) ([]models.Series, error)
598
577
planRunDuration .Value (time .Since (preRun ))
599
578
return out , err
600
579
}
580
+
581
+ func getFromTo (ft models.FromTo , now time.Time , defaultFrom , defaultTo uint32 ) (uint32 , uint32 , error ) {
582
+ loc , err := getLocation (ft .Tz )
583
+ if err != nil {
584
+ return 0 , 0 , err
585
+ }
586
+
587
+ from := ft .From
588
+ to := ft .To
589
+ if to == "" {
590
+ to = ft .Until
591
+ }
592
+
593
+ fromUnix , err := dur .ParseDateTime (from , loc , now , defaultFrom )
594
+ if err != nil {
595
+ return 0 , 0 , err
596
+ }
597
+
598
+ toUnix , err := dur .ParseDateTime (to , loc , now , defaultTo )
599
+ if err != nil {
600
+ return 0 , 0 , err
601
+ }
602
+
603
+ return fromUnix , toUnix , nil
604
+ }
605
+
606
+ func getLocation (desc string ) (* time.Location , error ) {
607
+ switch desc {
608
+ case "" :
609
+ return timeZone , nil
610
+ case "local" :
611
+ return time .Local , nil
612
+ }
613
+ return time .LoadLocation (desc )
614
+ }
0 commit comments