github.com/go-graphite/carbonapi@v0.17.0/expr/functions/glue.go (about)

     1  package functions
     2  
     3  import (
     4  	"sort"
     5  	"strings"
     6  
     7  	"github.com/go-graphite/carbonapi/expr/functions/absolute"
     8  	"github.com/go-graphite/carbonapi/expr/functions/aggregate"
     9  	"github.com/go-graphite/carbonapi/expr/functions/aggregateLine"
    10  	"github.com/go-graphite/carbonapi/expr/functions/aggregateSeriesLists"
    11  	"github.com/go-graphite/carbonapi/expr/functions/aggregateWithWildcards"
    12  	"github.com/go-graphite/carbonapi/expr/functions/alias"
    13  	"github.com/go-graphite/carbonapi/expr/functions/aliasByBase64"
    14  	"github.com/go-graphite/carbonapi/expr/functions/aliasByMetric"
    15  	"github.com/go-graphite/carbonapi/expr/functions/aliasByNode"
    16  	"github.com/go-graphite/carbonapi/expr/functions/aliasByPostgres"
    17  	"github.com/go-graphite/carbonapi/expr/functions/aliasByRedis"
    18  	"github.com/go-graphite/carbonapi/expr/functions/aliasQuery"
    19  	"github.com/go-graphite/carbonapi/expr/functions/aliasSub"
    20  	"github.com/go-graphite/carbonapi/expr/functions/asPercent"
    21  	"github.com/go-graphite/carbonapi/expr/functions/averageOutsidePercentile"
    22  	"github.com/go-graphite/carbonapi/expr/functions/baselines"
    23  	"github.com/go-graphite/carbonapi/expr/functions/below"
    24  	"github.com/go-graphite/carbonapi/expr/functions/cactiStyle"
    25  	"github.com/go-graphite/carbonapi/expr/functions/cairo"
    26  	"github.com/go-graphite/carbonapi/expr/functions/changed"
    27  	"github.com/go-graphite/carbonapi/expr/functions/compressPeriodicGaps"
    28  	"github.com/go-graphite/carbonapi/expr/functions/consolidateBy"
    29  	"github.com/go-graphite/carbonapi/expr/functions/constantLine"
    30  	"github.com/go-graphite/carbonapi/expr/functions/cumulative"
    31  	"github.com/go-graphite/carbonapi/expr/functions/delay"
    32  	"github.com/go-graphite/carbonapi/expr/functions/derivative"
    33  	"github.com/go-graphite/carbonapi/expr/functions/divideSeries"
    34  	"github.com/go-graphite/carbonapi/expr/functions/ewma"
    35  	"github.com/go-graphite/carbonapi/expr/functions/exclude"
    36  	"github.com/go-graphite/carbonapi/expr/functions/exp"
    37  	"github.com/go-graphite/carbonapi/expr/functions/exponentialMovingAverage"
    38  	"github.com/go-graphite/carbonapi/expr/functions/fallbackSeries"
    39  	"github.com/go-graphite/carbonapi/expr/functions/fft"
    40  	"github.com/go-graphite/carbonapi/expr/functions/filter"
    41  	"github.com/go-graphite/carbonapi/expr/functions/graphiteWeb"
    42  	"github.com/go-graphite/carbonapi/expr/functions/grep"
    43  	"github.com/go-graphite/carbonapi/expr/functions/group"
    44  	"github.com/go-graphite/carbonapi/expr/functions/groupByNode"
    45  	"github.com/go-graphite/carbonapi/expr/functions/groupByTags"
    46  	"github.com/go-graphite/carbonapi/expr/functions/heatMap"
    47  	"github.com/go-graphite/carbonapi/expr/functions/highestLowest"
    48  	"github.com/go-graphite/carbonapi/expr/functions/hitcount"
    49  	"github.com/go-graphite/carbonapi/expr/functions/holtWintersAberration"
    50  	"github.com/go-graphite/carbonapi/expr/functions/holtWintersConfidenceArea"
    51  	"github.com/go-graphite/carbonapi/expr/functions/holtWintersConfidenceBands"
    52  	"github.com/go-graphite/carbonapi/expr/functions/holtWintersForecast"
    53  	"github.com/go-graphite/carbonapi/expr/functions/identity"
    54  	"github.com/go-graphite/carbonapi/expr/functions/ifft"
    55  	"github.com/go-graphite/carbonapi/expr/functions/integral"
    56  	"github.com/go-graphite/carbonapi/expr/functions/integralByInterval"
    57  	"github.com/go-graphite/carbonapi/expr/functions/integralWithReset"
    58  	"github.com/go-graphite/carbonapi/expr/functions/interpolate"
    59  	"github.com/go-graphite/carbonapi/expr/functions/invert"
    60  	"github.com/go-graphite/carbonapi/expr/functions/isNotNull"
    61  	"github.com/go-graphite/carbonapi/expr/functions/join"
    62  	"github.com/go-graphite/carbonapi/expr/functions/keepLastValue"
    63  	"github.com/go-graphite/carbonapi/expr/functions/kolmogorovSmirnovTest2"
    64  	"github.com/go-graphite/carbonapi/expr/functions/legendValue"
    65  	"github.com/go-graphite/carbonapi/expr/functions/limit"
    66  	"github.com/go-graphite/carbonapi/expr/functions/linearRegression"
    67  	"github.com/go-graphite/carbonapi/expr/functions/logarithm"
    68  	"github.com/go-graphite/carbonapi/expr/functions/logit"
    69  	"github.com/go-graphite/carbonapi/expr/functions/lowPass"
    70  	"github.com/go-graphite/carbonapi/expr/functions/mapSeries"
    71  	"github.com/go-graphite/carbonapi/expr/functions/minMax"
    72  	"github.com/go-graphite/carbonapi/expr/functions/mostDeviant"
    73  	"github.com/go-graphite/carbonapi/expr/functions/moving"
    74  	"github.com/go-graphite/carbonapi/expr/functions/movingMedian"
    75  	"github.com/go-graphite/carbonapi/expr/functions/nPercentile"
    76  	"github.com/go-graphite/carbonapi/expr/functions/nonNegativeDerivative"
    77  	"github.com/go-graphite/carbonapi/expr/functions/offset"
    78  	"github.com/go-graphite/carbonapi/expr/functions/offsetToZero"
    79  	"github.com/go-graphite/carbonapi/expr/functions/pearson"
    80  	"github.com/go-graphite/carbonapi/expr/functions/pearsonClosest"
    81  	"github.com/go-graphite/carbonapi/expr/functions/perSecond"
    82  	"github.com/go-graphite/carbonapi/expr/functions/percentileOfSeries"
    83  	"github.com/go-graphite/carbonapi/expr/functions/polyfit"
    84  	"github.com/go-graphite/carbonapi/expr/functions/pow"
    85  	"github.com/go-graphite/carbonapi/expr/functions/powSeries"
    86  	"github.com/go-graphite/carbonapi/expr/functions/randomWalk"
    87  	"github.com/go-graphite/carbonapi/expr/functions/rangeOfSeries"
    88  	"github.com/go-graphite/carbonapi/expr/functions/reduce"
    89  	"github.com/go-graphite/carbonapi/expr/functions/removeBelowSeries"
    90  	"github.com/go-graphite/carbonapi/expr/functions/removeBetweenPercentile"
    91  	"github.com/go-graphite/carbonapi/expr/functions/removeEmptySeries"
    92  	"github.com/go-graphite/carbonapi/expr/functions/round"
    93  	"github.com/go-graphite/carbonapi/expr/functions/scale"
    94  	"github.com/go-graphite/carbonapi/expr/functions/scaleToSeconds"
    95  	"github.com/go-graphite/carbonapi/expr/functions/seriesByTag"
    96  	"github.com/go-graphite/carbonapi/expr/functions/seriesList"
    97  	"github.com/go-graphite/carbonapi/expr/functions/setXFilesFactor"
    98  	"github.com/go-graphite/carbonapi/expr/functions/sigmoid"
    99  	"github.com/go-graphite/carbonapi/expr/functions/sinFunction"
   100  	"github.com/go-graphite/carbonapi/expr/functions/slo"
   101  	"github.com/go-graphite/carbonapi/expr/functions/smartSummarize"
   102  	"github.com/go-graphite/carbonapi/expr/functions/sortBy"
   103  	"github.com/go-graphite/carbonapi/expr/functions/sortByName"
   104  	"github.com/go-graphite/carbonapi/expr/functions/squareRoot"
   105  	"github.com/go-graphite/carbonapi/expr/functions/stdev"
   106  	"github.com/go-graphite/carbonapi/expr/functions/substr"
   107  	"github.com/go-graphite/carbonapi/expr/functions/summarize"
   108  	"github.com/go-graphite/carbonapi/expr/functions/timeFunction"
   109  	"github.com/go-graphite/carbonapi/expr/functions/timeShift"
   110  	"github.com/go-graphite/carbonapi/expr/functions/timeShiftByMetric"
   111  	"github.com/go-graphite/carbonapi/expr/functions/timeSlice"
   112  	"github.com/go-graphite/carbonapi/expr/functions/timeStack"
   113  	"github.com/go-graphite/carbonapi/expr/functions/toLowerCase"
   114  	"github.com/go-graphite/carbonapi/expr/functions/toUpperCase"
   115  	"github.com/go-graphite/carbonapi/expr/functions/transformNull"
   116  	"github.com/go-graphite/carbonapi/expr/functions/tukey"
   117  	"github.com/go-graphite/carbonapi/expr/functions/unique"
   118  	"github.com/go-graphite/carbonapi/expr/functions/verticalLine"
   119  	"github.com/go-graphite/carbonapi/expr/functions/weightedAverage"
   120  	"github.com/go-graphite/carbonapi/expr/interfaces"
   121  	"github.com/go-graphite/carbonapi/expr/metadata"
   122  )
   123  
   124  type initFunc struct {
   125  	name     string
   126  	filename string
   127  	order    interfaces.Order
   128  	f        func(configFile string) []interfaces.FunctionMetadata
   129  }
   130  
   131  func New(configs map[string]string) {
   132  	funcs := []initFunc{
   133  		{name: "absolute", filename: "absolute", order: absolute.GetOrder(), f: absolute.New},
   134  		{name: "aggregate", filename: "aggregate", order: aggregate.GetOrder(), f: aggregate.New},
   135  		{name: "aggregateLine", filename: "aggregateLine", order: aggregateLine.GetOrder(), f: aggregateLine.New},
   136  		{name: "aggregateSeriesLists", filename: "aggregateSeriesLists", order: aggregateSeriesLists.GetOrder(), f: aggregateSeriesLists.New},
   137  		{name: "aggregateWithWildcards", filename: "aggregateWithWildcards", order: aggregateWithWildcards.GetOrder(), f: aggregateWithWildcards.New},
   138  		{name: "alias", filename: "alias", order: alias.GetOrder(), f: alias.New},
   139  		{name: "aliasByBase64", filename: "aliasByBase64", order: aliasByBase64.GetOrder(), f: aliasByBase64.New},
   140  		{name: "aliasByMetric", filename: "aliasByMetric", order: aliasByMetric.GetOrder(), f: aliasByMetric.New},
   141  		{name: "aliasByNode", filename: "aliasByNode", order: aliasByNode.GetOrder(), f: aliasByNode.New},
   142  		{name: "aliasByPostgres", filename: "aliasByPostgres", order: aliasByPostgres.GetOrder(), f: aliasByPostgres.New},
   143  		{name: "aliasByRedis", filename: "aliasByRedis", order: aliasByRedis.GetOrder(), f: aliasByRedis.New},
   144  		{name: "aliasQuery", filename: "aliasQuery", order: aliasQuery.GetOrder(), f: aliasQuery.New},
   145  		{name: "aliasSub", filename: "aliasSub", order: aliasSub.GetOrder(), f: aliasSub.New},
   146  		{name: "asPercent", filename: "asPercent", order: asPercent.GetOrder(), f: asPercent.New},
   147  		{name: "averageOutsidePercentile", filename: "averageOutsidePercentile", order: averageOutsidePercentile.GetOrder(), f: averageOutsidePercentile.New},
   148  		{name: "baselines", filename: "baselines", order: baselines.GetOrder(), f: baselines.New},
   149  		{name: "below", filename: "below", order: below.GetOrder(), f: below.New},
   150  		{name: "cactiStyle", filename: "cactiStyle", order: cactiStyle.GetOrder(), f: cactiStyle.New},
   151  		{name: "cairo", filename: "cairo", order: cairo.GetOrder(), f: cairo.New},
   152  		{name: "changed", filename: "changed", order: changed.GetOrder(), f: changed.New},
   153  		{name: "compressPeriodicGaps", filename: "compressPeriodicGaps", order: compressPeriodicGaps.GetOrder(), f: compressPeriodicGaps.New},
   154  		{name: "consolidateBy", filename: "consolidateBy", order: consolidateBy.GetOrder(), f: consolidateBy.New},
   155  		{name: "constantLine", filename: "constantLine", order: constantLine.GetOrder(), f: constantLine.New},
   156  		{name: "cumulative", filename: "cumulative", order: cumulative.GetOrder(), f: cumulative.New},
   157  		{name: "delay", filename: "delay", order: delay.GetOrder(), f: delay.New},
   158  		{name: "derivative", filename: "derivative", order: derivative.GetOrder(), f: derivative.New},
   159  		{name: "divideSeries", filename: "divideSeries", order: divideSeries.GetOrder(), f: divideSeries.New},
   160  		{name: "ewma", filename: "ewma", order: ewma.GetOrder(), f: ewma.New},
   161  		{name: "exclude", filename: "exclude", order: exclude.GetOrder(), f: exclude.New},
   162  		{name: "exp", filename: "exp", order: exp.GetOrder(), f: exp.New},
   163  		{name: "exponentialMovingAverage", filename: "exponentialMovingAverage", order: exponentialMovingAverage.GetOrder(), f: exponentialMovingAverage.New},
   164  		{name: "fallbackSeries", filename: "fallbackSeries", order: fallbackSeries.GetOrder(), f: fallbackSeries.New},
   165  		{name: "fft", filename: "fft", order: fft.GetOrder(), f: fft.New},
   166  		{name: "filter", filename: "filter", order: filter.GetOrder(), f: filter.New},
   167  		{name: "graphiteWeb", filename: "graphiteWeb", order: graphiteWeb.GetOrder(), f: graphiteWeb.New},
   168  		{name: "grep", filename: "grep", order: grep.GetOrder(), f: grep.New},
   169  		{name: "group", filename: "group", order: group.GetOrder(), f: group.New},
   170  		{name: "groupByNode", filename: "groupByNode", order: groupByNode.GetOrder(), f: groupByNode.New},
   171  		{name: "groupByTags", filename: "groupByTags", order: groupByTags.GetOrder(), f: groupByTags.New},
   172  		{name: "heatMap", filename: "heatMap", order: heatMap.GetOrder(), f: heatMap.New},
   173  		{name: "highestLowest", filename: "highestLowest", order: highestLowest.GetOrder(), f: highestLowest.New},
   174  		{name: "hitcount", filename: "hitcount", order: hitcount.GetOrder(), f: hitcount.New},
   175  		{name: "holtWintersAberration", filename: "holtWintersAberration", order: holtWintersAberration.GetOrder(), f: holtWintersAberration.New},
   176  		{name: "holtWintersConfidenceArea", filename: "holtWintersConfidenceArea", order: holtWintersConfidenceArea.GetOrder(), f: holtWintersConfidenceArea.New},
   177  		{name: "holtWintersConfidenceBands", filename: "holtWintersConfidenceBands", order: holtWintersConfidenceBands.GetOrder(), f: holtWintersConfidenceBands.New},
   178  		{name: "holtWintersForecast", filename: "holtWintersForecast", order: holtWintersForecast.GetOrder(), f: holtWintersForecast.New},
   179  		{name: "identity", filename: "identity", order: identity.GetOrder(), f: identity.New},
   180  		{name: "ifft", filename: "ifft", order: ifft.GetOrder(), f: ifft.New},
   181  		{name: "integral", filename: "integral", order: integral.GetOrder(), f: integral.New},
   182  		{name: "integralByInterval", filename: "integralByInterval", order: integralByInterval.GetOrder(), f: integralByInterval.New},
   183  		{name: "integralWithReset", filename: "integralWithReset", order: integralWithReset.GetOrder(), f: integralWithReset.New},
   184  		{name: "interpolate", filename: "interpolate", order: interpolate.GetOrder(), f: interpolate.New},
   185  		{name: "invert", filename: "invert", order: invert.GetOrder(), f: invert.New},
   186  		{name: "isNotNull", filename: "isNotNull", order: isNotNull.GetOrder(), f: isNotNull.New},
   187  		{name: "join", filename: "join", order: join.GetOrder(), f: join.New},
   188  		{name: "keepLastValue", filename: "keepLastValue", order: keepLastValue.GetOrder(), f: keepLastValue.New},
   189  		{name: "kolmogorovSmirnovTest2", filename: "kolmogorovSmirnovTest2", order: kolmogorovSmirnovTest2.GetOrder(), f: kolmogorovSmirnovTest2.New},
   190  		{name: "legendValue", filename: "legendValue", order: legendValue.GetOrder(), f: legendValue.New},
   191  		{name: "limit", filename: "limit", order: limit.GetOrder(), f: limit.New},
   192  		{name: "linearRegression", filename: "linearRegression", order: linearRegression.GetOrder(), f: linearRegression.New},
   193  		{name: "logarithm", filename: "logarithm", order: logarithm.GetOrder(), f: logarithm.New},
   194  		{name: "logit", filename: "logit", order: logit.GetOrder(), f: logit.New},
   195  		{name: "lowPass", filename: "lowPass", order: lowPass.GetOrder(), f: lowPass.New},
   196  		{name: "mapSeries", filename: "mapSeries", order: mapSeries.GetOrder(), f: mapSeries.New},
   197  		{name: "minMax", filename: "minMax", order: minMax.GetOrder(), f: minMax.New},
   198  		{name: "mostDeviant", filename: "mostDeviant", order: mostDeviant.GetOrder(), f: mostDeviant.New},
   199  		{name: "moving", filename: "moving", order: moving.GetOrder(), f: moving.New},
   200  		{name: "movingMedian", filename: "movingMedian", order: movingMedian.GetOrder(), f: movingMedian.New},
   201  		{name: "nPercentile", filename: "nPercentile", order: nPercentile.GetOrder(), f: nPercentile.New},
   202  		{name: "nonNegativeDerivative", filename: "nonNegativeDerivative", order: nonNegativeDerivative.GetOrder(), f: nonNegativeDerivative.New},
   203  		{name: "offset", filename: "offset", order: offset.GetOrder(), f: offset.New},
   204  		{name: "offsetToZero", filename: "offsetToZero", order: offsetToZero.GetOrder(), f: offsetToZero.New},
   205  		{name: "pearson", filename: "pearson", order: pearson.GetOrder(), f: pearson.New},
   206  		{name: "pearsonClosest", filename: "pearsonClosest", order: pearsonClosest.GetOrder(), f: pearsonClosest.New},
   207  		{name: "perSecond", filename: "perSecond", order: perSecond.GetOrder(), f: perSecond.New},
   208  		{name: "percentileOfSeries", filename: "percentileOfSeries", order: percentileOfSeries.GetOrder(), f: percentileOfSeries.New},
   209  		{name: "polyfit", filename: "polyfit", order: polyfit.GetOrder(), f: polyfit.New},
   210  		{name: "pow", filename: "pow", order: pow.GetOrder(), f: pow.New},
   211  		{name: "powSeries", filename: "powSeries", order: powSeries.GetOrder(), f: powSeries.New},
   212  		{name: "randomWalk", filename: "randomWalk", order: randomWalk.GetOrder(), f: randomWalk.New},
   213  		{name: "rangeOfSeries", filename: "rangeOfSeries", order: rangeOfSeries.GetOrder(), f: rangeOfSeries.New},
   214  		{name: "reduce", filename: "reduce", order: reduce.GetOrder(), f: reduce.New},
   215  		{name: "removeBelowSeries", filename: "removeBelowSeries", order: removeBelowSeries.GetOrder(), f: removeBelowSeries.New},
   216  		{name: "removeBetweenPercentile", filename: "removeBetweenPercentile", order: removeBetweenPercentile.GetOrder(), f: removeBetweenPercentile.New},
   217  		{name: "removeEmptySeries", filename: "removeEmptySeries", order: removeEmptySeries.GetOrder(), f: removeEmptySeries.New},
   218  		{name: "round", filename: "round", order: round.GetOrder(), f: round.New},
   219  		{name: "scale", filename: "scale", order: scale.GetOrder(), f: scale.New},
   220  		{name: "scaleToSeconds", filename: "scaleToSeconds", order: scaleToSeconds.GetOrder(), f: scaleToSeconds.New},
   221  		{name: "seriesByTag", filename: "seriesByTag", order: seriesByTag.GetOrder(), f: seriesByTag.New},
   222  		{name: "seriesList", filename: "seriesList", order: seriesList.GetOrder(), f: seriesList.New},
   223  		{name: "setXFilesFactor", filename: "setXFilesFactor", order: setXFilesFactor.GetOrder(), f: setXFilesFactor.New},
   224  		{name: "sigmoid", filename: "sigmoid", order: sigmoid.GetOrder(), f: sigmoid.New},
   225  		{name: "sinFunction", filename: "sinFunction", order: sinFunction.GetOrder(), f: sinFunction.New},
   226  		{name: "slo", filename: "slo", order: slo.GetOrder(), f: slo.New},
   227  		{name: "smartSummarize", filename: "smartSummarize", order: smartSummarize.GetOrder(), f: smartSummarize.New},
   228  		{name: "sortBy", filename: "sortBy", order: sortBy.GetOrder(), f: sortBy.New},
   229  		{name: "sortByName", filename: "sortByName", order: sortByName.GetOrder(), f: sortByName.New},
   230  		{name: "squareRoot", filename: "squareRoot", order: squareRoot.GetOrder(), f: squareRoot.New},
   231  		{name: "stdev", filename: "stdev", order: stdev.GetOrder(), f: stdev.New},
   232  		{name: "substr", filename: "substr", order: substr.GetOrder(), f: substr.New},
   233  		{name: "summarize", filename: "summarize", order: summarize.GetOrder(), f: summarize.New},
   234  		{name: "timeFunction", filename: "timeFunction", order: timeFunction.GetOrder(), f: timeFunction.New},
   235  		{name: "timeShift", filename: "timeShift", order: timeShift.GetOrder(), f: timeShift.New},
   236  		{name: "timeShiftByMetric", filename: "timeShiftByMetric", order: timeShiftByMetric.GetOrder(), f: timeShiftByMetric.New},
   237  		{name: "timeSlice", filename: "timeSlice", order: timeSlice.GetOrder(), f: timeSlice.New},
   238  		{name: "timeStack", filename: "timeStack", order: timeStack.GetOrder(), f: timeStack.New},
   239  		{name: "toLowerCase", filename: "toLowerCase", order: toLowerCase.GetOrder(), f: toLowerCase.New},
   240  		{name: "toUpperCase", filename: "toUpperCase", order: toUpperCase.GetOrder(), f: toUpperCase.New},
   241  		{name: "transformNull", filename: "transformNull", order: transformNull.GetOrder(), f: transformNull.New},
   242  		{name: "tukey", filename: "tukey", order: tukey.GetOrder(), f: tukey.New},
   243  		{name: "unique", filename: "unique", order: unique.GetOrder(), f: unique.New},
   244  		{name: "verticalLine", filename: "verticalLine", order: verticalLine.GetOrder(), f: verticalLine.New},
   245  		{name: "weightedAverage", filename: "weightedAverage", order: weightedAverage.GetOrder(), f: weightedAverage.New},
   246  	}
   247  
   248  	sort.Slice(funcs, func(i, j int) bool {
   249  		if funcs[i].order == interfaces.Any && funcs[j].order == interfaces.Last {
   250  			return true
   251  		}
   252  		if funcs[i].order == interfaces.Last && funcs[j].order == interfaces.Any {
   253  			return false
   254  		}
   255  		return funcs[i].name > funcs[j].name
   256  	})
   257  
   258  	for _, f := range funcs {
   259  		md := f.f(configs[strings.ToLower(f.name)])
   260  		for _, m := range md {
   261  			metadata.RegisterFunctionWithFilename(m.Name, f.filename, m.F)
   262  		}
   263  	}
   264  }