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 }