@@ -259,15 +259,45 @@ func walkRangeAggregation(e *syntax.RangeAggregationExpr, params logql.Params) (
259259 builder = builder .Cast (unwrapIdentifier , unwrapOperation )
260260 }
261261
262- rangeAggType := convertRangeAggregationType (e .Operation )
263- if rangeAggType == types .RangeAggregationTypeInvalid {
262+ var rangeAggType types.RangeAggregationType
263+ switch e .Operation {
264+ case syntax .OpRangeTypeCount :
265+ rangeAggType = types .RangeAggregationTypeCount
266+ case syntax .OpRangeTypeSum :
267+ rangeAggType = types .RangeAggregationTypeSum
268+ //case syntax.OpRangeTypeMax:
269+ // rangeAggType = types.RangeAggregationTypeMax
270+ //case syntax.OpRangeTypeMin:
271+ // rangeAggType = types.RangeAggregationTypeMin
272+ //case syntax.OpRangeTypeBytesRate:
273+ // rangeAggType = types.RangeAggregationTypeBytes // bytes_rate is implemented as bytes_over_time/$interval
274+ case syntax .OpRangeTypeRate :
275+ if e .Left .Unwrap != nil {
276+ rangeAggType = types .RangeAggregationTypeSum // rate of an unwrap is implemented as sum_over_time/$interval
277+ } else {
278+ rangeAggType = types .RangeAggregationTypeCount // rate is implemented as count_over_time/$interval
279+ }
280+ default :
264281 return nil , errUnimplemented
265282 }
266283
267284 builder = builder .RangeAggregation (
268285 nil , rangeAggType , params .Start (), params .End (), params .Step (), rangeInterval ,
269286 )
270287
288+ switch e .Operation {
289+ //case syntax.OpRangeTypeBytesRate:
290+ // // bytes_rate is implemented as bytes_over_time/$interval
291+ // builder = builder.BinOpRight(types.BinaryOpDiv, &Literal{
292+ // Literal: NewLiteral(rangeInterval.Seconds()),
293+ // })
294+ case syntax .OpRangeTypeRate :
295+ // rate is implemented as count_over_time/$interval
296+ builder = builder .BinOpRight (types .BinaryOpDiv , & Literal {
297+ Literal : NewLiteral (rangeInterval .Seconds ()),
298+ })
299+ }
300+
271301 return builder .Value (), nil
272302}
273303
@@ -426,21 +456,6 @@ func convertVectorAggregationType(op string) types.VectorAggregationType {
426456 }
427457}
428458
429- func convertRangeAggregationType (op string ) types.RangeAggregationType {
430- switch op {
431- case syntax .OpRangeTypeCount :
432- return types .RangeAggregationTypeCount
433- case syntax .OpRangeTypeSum :
434- return types .RangeAggregationTypeSum
435- //case syntax.OpRangeTypeMax:
436- // return types.RangeAggregationTypeMax
437- //case syntax.OpRangeTypeMin:
438- // return types.RangeAggregationTypeMin
439- default :
440- return types .RangeAggregationTypeInvalid
441- }
442- }
443-
444459func convertMatcherType (t labels.MatchType ) types.BinaryOp {
445460 switch t {
446461 case labels .MatchEqual :
0 commit comments