From dceb4bd9240121f3043bdd5dfc11aa5916e5bbbb Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Thu, 27 May 2021 10:20:01 +0300 Subject: [PATCH] Implement percentile --- pkg/datasource/functions.go | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/pkg/datasource/functions.go b/pkg/datasource/functions.go index 20b0381..2af60a5 100644 --- a/pkg/datasource/functions.go +++ b/pkg/datasource/functions.go @@ -49,9 +49,10 @@ var frontendFuncMap map[string]bool func init() { seriesFuncMap = map[string]DataProcessingFunc{ - "groupBy": applyGroupBy, - "scale": applyScale, - "offset": applyOffset, + "groupBy": applyGroupBy, + "scale": applyScale, + "offset": applyOffset, + "percentile": applyPercentile, } aggFuncMap = map[string]AggDataProcessingFunc{ @@ -116,6 +117,28 @@ func applyGroupBy(series timeseries.TimeSeries, params ...interface{}) (timeseri return s, nil } +func applyPercentile(series timeseries.TimeSeries, params ...interface{}) (timeseries.TimeSeries, error) { + pInterval, err := MustString(params[0]) + percentile, err := MustFloat64(params[1]) + if err != nil { + return nil, errParsingFunctionParam(err) + } + + aggFunc := timeseries.AggPercentile(percentile) + if pInterval == RANGE_VARIABLE_VALUE { + s := series.GroupByRange(aggFunc) + return s, nil + } + + interval, err := gtime.ParseInterval(pInterval) + if err != nil { + return nil, errParsingFunctionParam(err) + } + + s := series.GroupBy(interval, aggFunc) + return s, nil +} + func applyScale(series timeseries.TimeSeries, params ...interface{}) (timeseries.TimeSeries, error) { pFactor, err := MustString(params[0]) if err != nil {