| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173 |
- import _ from "lodash";
- import $ from "jquery";
- import {isVersionGtOrEq} from "app/core/utils/version";
- var index = [];
- var categories = {
- Combine: [],
- Transform: [],
- Calculate: [],
- Filter: [],
- Special: []
- };
- function addFuncDef(funcDef) {
- funcDef.params = funcDef.params || [];
- funcDef.defaultParams = funcDef.defaultParams || [];
- if (funcDef.category) {
- funcDef.category.push(funcDef);
- }
- index[funcDef.name] = funcDef;
- index[funcDef.shortName || funcDef.name] = funcDef;
- }
- var optionalSeriesRefArgs = [
- { name: "other", type: "value_or_series", optional: true },
- { name: "other", type: "value_or_series", optional: true },
- { name: "other", type: "value_or_series", optional: true },
- { name: "other", type: "value_or_series", optional: true },
- { name: "other", type: "value_or_series", optional: true }
- ];
- addFuncDef({
- name: "scaleToSeconds",
- category: categories.Transform,
- params: [{ name: "seconds", type: "int" }],
- defaultParams: [1]
- });
- addFuncDef({
- name: "perSecond",
- category: categories.Transform,
- params: [{ name: "max value", type: "int", optional: true }],
- defaultParams: []
- });
- addFuncDef({
- name: "holtWintersForecast",
- category: categories.Calculate
- });
- addFuncDef({
- name: "holtWintersConfidenceBands",
- category: categories.Calculate,
- params: [{ name: "delta", type: "int" }],
- defaultParams: [3]
- });
- addFuncDef({
- name: "holtWintersAberration",
- category: categories.Calculate,
- params: [{ name: "delta", type: "int" }],
- defaultParams: [3]
- });
- addFuncDef({
- name: "nPercentile",
- category: categories.Calculate,
- params: [{ name: "Nth percentile", type: "int" }],
- defaultParams: [95]
- });
- addFuncDef({
- name: "diffSeries",
- params: optionalSeriesRefArgs,
- defaultParams: ["#A"],
- category: categories.Calculate
- });
- addFuncDef({
- name: "stddevSeries",
- params: optionalSeriesRefArgs,
- defaultParams: [""],
- category: categories.Calculate
- });
- addFuncDef({
- name: "divideSeries",
- params: optionalSeriesRefArgs,
- defaultParams: ["#A"],
- category: categories.Calculate
- });
- addFuncDef({
- name: "multiplySeries",
- params: optionalSeriesRefArgs,
- defaultParams: ["#A"],
- category: categories.Calculate
- });
- addFuncDef({
- name: "asPercent",
- params: optionalSeriesRefArgs,
- defaultParams: ["#A"],
- category: categories.Calculate
- });
- addFuncDef({
- name: "group",
- params: optionalSeriesRefArgs,
- defaultParams: ["#A", "#B"],
- category: categories.Combine
- });
- addFuncDef({
- name: "sumSeries",
- shortName: "sum",
- category: categories.Combine,
- params: optionalSeriesRefArgs,
- defaultParams: [""]
- });
- addFuncDef({
- name: "averageSeries",
- shortName: "avg",
- category: categories.Combine,
- params: optionalSeriesRefArgs,
- defaultParams: [""]
- });
- addFuncDef({
- name: "rangeOfSeries",
- category: categories.Combine
- });
- addFuncDef({
- name: "percentileOfSeries",
- category: categories.Combine,
- params: [
- { name: "n", type: "int" },
- { name: "interpolate", type: "boolean", options: ["true", "false"] }
- ],
- defaultParams: [95, "false"]
- });
- addFuncDef({
- name: "sumSeriesWithWildcards",
- category: categories.Combine,
- params: [
- { name: "node", type: "int" },
- { name: "node", type: "int", optional: true },
- { name: "node", type: "int", optional: true },
- { name: "node", type: "int", optional: true }
- ],
- defaultParams: [3]
- });
- addFuncDef({
- name: "maxSeries",
- shortName: "max",
- category: categories.Combine
- });
- addFuncDef({
- name: "minSeries",
- shortName: "min",
- category: categories.Combine
- });
- addFuncDef({
- name: "averageSeriesWithWildcards",
- category: categories.Combine,
- params: [
- { name: "node", type: "int" },
- { name: "node", type: "int", optional: true }
- ],
- defaultParams: [3]
- });
- addFuncDef({
- name: "alias",
- category: categories.Special,
- params: [{ name: "alias", type: "string" }],
- defaultParams: ["alias"]
- });
- addFuncDef({
- name: "aliasSub",
- category: categories.Special,
- params: [
- { name: "search", type: "string" },
- { name: "replace", type: "string" }
- ],
- defaultParams: ["", "\\1"]
- });
- addFuncDef({
- name: "stacked",
- category: categories.Special,
- params: [{ name: "stack", type: "string" }],
- defaultParams: ["stacked"]
- });
- addFuncDef({
- name: "consolidateBy",
- category: categories.Special,
- params: [
- {
- name: "function",
- type: "string",
- options: ["sum", "average", "min", "max"]
- }
- ],
- defaultParams: ["max"]
- });
- addFuncDef({
- name: "cumulative",
- category: categories.Special,
- params: [],
- defaultParams: []
- });
- addFuncDef({
- name: "groupByNode",
- category: categories.Special,
- params: [
- {
- name: "node",
- type: "int",
- options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
- },
- {
- name: "function",
- type: "string",
- options: ["sum", "avg", "maxSeries"]
- }
- ],
- defaultParams: [3, "sum"]
- });
- addFuncDef({
- name: "aliasByNode",
- category: categories.Special,
- params: [
- {
- name: "node",
- type: "int",
- options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
- },
- {
- name: "node",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- },
- {
- name: "node",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- },
- {
- name: "node",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- }
- ],
- defaultParams: [3]
- });
- addFuncDef({
- name: "substr",
- category: categories.Special,
- params: [
- {
- name: "start",
- type: "int",
- options: [-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
- },
- {
- name: "stop",
- type: "int",
- options: [-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
- }
- ],
- defaultParams: [0, 0]
- });
- addFuncDef({
- name: "sortByName",
- category: categories.Special,
- params: [
- {
- name: "natural",
- type: "boolean",
- options: ["true", "false"],
- optional: true
- }
- ],
- defaultParams: ["false"]
- });
- addFuncDef({
- name: "sortByMaxima",
- category: categories.Special
- });
- addFuncDef({
- name: "sortByMinima",
- category: categories.Special
- });
- addFuncDef({
- name: "sortByTotal",
- category: categories.Special
- });
- addFuncDef({
- name: "aliasByMetric",
- category: categories.Special
- });
- addFuncDef({
- name: "randomWalk",
- fake: true,
- category: categories.Special,
- params: [{ name: "name", type: "string" }],
- defaultParams: ["randomWalk"]
- });
- addFuncDef({
- name: "countSeries",
- category: categories.Special
- });
- addFuncDef({
- name: "constantLine",
- category: categories.Special,
- params: [{ name: "value", type: "int" }],
- defaultParams: [10]
- });
- addFuncDef({
- name: "cactiStyle",
- category: categories.Special
- });
- addFuncDef({
- name: "keepLastValue",
- category: categories.Special,
- params: [{ name: "n", type: "int" }],
- defaultParams: [100]
- });
- addFuncDef({
- name: "changed",
- category: categories.Special,
- params: [],
- defaultParams: []
- });
- addFuncDef({
- name: "scale",
- category: categories.Transform,
- params: [{ name: "factor", type: "int" }],
- defaultParams: [1]
- });
- addFuncDef({
- name: "offset",
- category: categories.Transform,
- params: [{ name: "amount", type: "int" }],
- defaultParams: [10]
- });
- addFuncDef({
- name: "transformNull",
- category: categories.Transform,
- params: [{ name: "amount", type: "int" }],
- defaultParams: [0]
- });
- addFuncDef({
- name: "integral",
- category: categories.Transform
- });
- addFuncDef({
- name: "derivative",
- category: categories.Transform
- });
- addFuncDef({
- name: "nonNegativeDerivative",
- category: categories.Transform,
- params: [{ name: "max value or 0", type: "int", optional: true }],
- defaultParams: [""]
- });
- addFuncDef({
- name: "timeShift",
- category: categories.Transform,
- params: [
- {
- name: "amount",
- type: "select",
- options: ["1h", "6h", "12h", "1d", "2d", "7d", "14d", "30d"]
- }
- ],
- defaultParams: ["1d"]
- });
- addFuncDef({
- name: "timeStack",
- category: categories.Transform,
- params: [
- {
- name: "timeShiftUnit",
- type: "select",
- options: ["1h", "6h", "12h", "1d", "2d", "7d", "14d", "30d"]
- },
- { name: "timeShiftStart", type: "int" },
- { name: "timeShiftEnd", type: "int" }
- ],
- defaultParams: ["1d", 0, 7]
- });
- addFuncDef({
- name: "summarize",
- category: categories.Transform,
- params: [
- { name: "interval", type: "string" },
- {
- name: "func",
- type: "select",
- options: ["sum", "avg", "min", "max", "last"]
- },
- {
- name: "alignToFrom",
- type: "boolean",
- optional: true,
- options: ["false", "true"]
- }
- ],
- defaultParams: ["1h", "sum", "false"]
- });
- addFuncDef({
- name: "smartSummarize",
- category: categories.Transform,
- params: [
- { name: "interval", type: "string" },
- {
- name: "func",
- type: "select",
- options: ["sum", "avg", "min", "max", "last"]
- }
- ],
- defaultParams: ["1h", "sum"]
- });
- addFuncDef({
- name: "absolute",
- category: categories.Transform
- });
- addFuncDef({
- name: "hitcount",
- category: categories.Transform,
- params: [{ name: "interval", type: "string" }],
- defaultParams: ["10s"]
- });
- addFuncDef({
- name: "log",
- category: categories.Transform,
- params: [{ name: "base", type: "int" }],
- defaultParams: ["10"]
- });
- addFuncDef({
- name: "averageAbove",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [25]
- });
- addFuncDef({
- name: "averageBelow",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [25]
- });
- addFuncDef({
- name: "currentAbove",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [25]
- });
- addFuncDef({
- name: "currentBelow",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [25]
- });
- addFuncDef({
- name: "maximumAbove",
- category: categories.Filter,
- params: [{ name: "value", type: "int" }],
- defaultParams: [0]
- });
- addFuncDef({
- name: "maximumBelow",
- category: categories.Filter,
- params: [{ name: "value", type: "int" }],
- defaultParams: [0]
- });
- addFuncDef({
- name: "minimumAbove",
- category: categories.Filter,
- params: [{ name: "value", type: "int" }],
- defaultParams: [0]
- });
- addFuncDef({
- name: "minimumBelow",
- category: categories.Filter,
- params: [{ name: "value", type: "int" }],
- defaultParams: [0]
- });
- addFuncDef({
- name: "limit",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "mostDeviant",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [10]
- });
- addFuncDef({
- name: "exclude",
- category: categories.Filter,
- params: [{ name: "exclude", type: "string" }],
- defaultParams: ["exclude"]
- });
- addFuncDef({
- name: "highestCurrent",
- category: categories.Filter,
- params: [{ name: "count", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "highestMax",
- category: categories.Filter,
- params: [{ name: "count", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "lowestCurrent",
- category: categories.Filter,
- params: [{ name: "count", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "movingAverage",
- category: categories.Filter,
- params: [
- {
- name: "windowSize",
- type: "int_or_interval",
- options: ["5", "7", "10", "5min", "10min", "30min", "1hour"]
- }
- ],
- defaultParams: [10]
- });
- addFuncDef({
- name: "movingMedian",
- category: categories.Filter,
- params: [
- {
- name: "windowSize",
- type: "int_or_interval",
- options: ["5", "7", "10", "5min", "10min", "30min", "1hour"]
- }
- ],
- defaultParams: ["5"]
- });
- addFuncDef({
- name: "stdev",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }, { name: "tolerance", type: "int" }],
- defaultParams: [5, 0.1]
- });
- addFuncDef({
- name: "highestAverage",
- category: categories.Filter,
- params: [{ name: "count", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "lowestAverage",
- category: categories.Filter,
- params: [{ name: "count", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "removeAbovePercentile",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "removeAboveValue",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "removeBelowPercentile",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "removeBelowValue",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [5]
- });
- addFuncDef({
- name: "useSeriesAbove",
- category: categories.Filter,
- params: [
- { name: "value", type: "int" },
- { name: "search", type: "string" },
- { name: "replace", type: "string" }
- ],
- defaultParams: [0, "search", "replace"]
- });
- ////////////////////
- // Graphite 1.0.x //
- ////////////////////
- addFuncDef({
- name: "aggregateLine",
- category: categories.Combine,
- params: [
- {
- name: "func",
- type: "select",
- options: ["sum", "avg", "min", "max", "last"]
- }
- ],
- defaultParams: ["avg"],
- version: "1.0"
- });
- addFuncDef({
- name: "averageOutsidePercentile",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [95],
- version: "1.0"
- });
- addFuncDef({
- name: "delay",
- category: categories.Transform,
- params: [{ name: "steps", type: "int" }],
- defaultParams: [1],
- version: "1.0"
- });
- addFuncDef({
- name: "exponentialMovingAverage",
- category: categories.Calculate,
- params: [
- {
- name: "windowSize",
- type: "int_or_interval",
- options: ["5", "7", "10", "5min", "10min", "30min", "1hour"]
- }
- ],
- defaultParams: [10],
- version: "1.0"
- });
- addFuncDef({
- name: "fallbackSeries",
- category: categories.Special,
- params: [{ name: "fallback", type: "string" }],
- defaultParams: ["constantLine(0)"],
- version: "1.0"
- });
- addFuncDef({
- name: "grep",
- category: categories.Filter,
- params: [{ name: "grep", type: "string" }],
- defaultParams: ["grep"],
- version: "1.0"
- });
- addFuncDef({
- name: "groupByNodes",
- category: categories.Special,
- params: [
- {
- name: "function",
- type: "string",
- options: ["sum", "avg", "maxSeries"]
- },
- {
- name: "node",
- type: "int",
- options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
- },
- {
- name: "node",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- },
- {
- name: "node",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- },
- {
- name: "node",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- }
- ],
- defaultParams: ["sum", 3],
- version: "1.0"
- });
- addFuncDef({
- name: "integralByInterval",
- category: categories.Transform,
- params: [
- {
- name: "intervalUnit",
- type: "select",
- options: ["1h", "6h", "12h", "1d", "2d", "7d", "14d", "30d"]
- }
- ],
- defaultParams: ["1d"],
- version: "1.0"
- });
- addFuncDef({
- name: "interpolate",
- category: categories.Transform,
- params: [{ name: "limit", type: "int", optional: true }],
- defaultParams: [],
- version: "1.0"
- });
- addFuncDef({
- name: "invert",
- category: categories.Transform,
- version: "1.0"
- });
- addFuncDef({
- name: "isNonNull",
- category: categories.Combine,
- version: "1.0"
- });
- addFuncDef({
- name: "linearRegression",
- category: categories.Calculate,
- params: [
- {
- name: "startSourceAt",
- type: "select",
- options: ["-1h", "-6h", "-12h", "-1d", "-2d", "-7d", "-14d", "-30d"],
- optional: true
- },
- {
- name: "endSourceAt",
- type: "select",
- options: ["-1h", "-6h", "-12h", "-1d", "-2d", "-7d", "-14d", "-30d"],
- optional: true
- }
- ],
- defaultParams: [],
- version: "1.0"
- });
- addFuncDef({
- name: "mapSeries",
- shortName: "map",
- params: [{ name: "node", type: "int" }],
- defaultParams: [3],
- category: categories.Combine,
- version: "1.0"
- });
- addFuncDef({
- name: "movingMin",
- category: categories.Calculate,
- params: [
- {
- name: "windowSize",
- type: "int_or_interval",
- options: ["5", "7", "10", "5min", "10min", "30min", "1hour"]
- }
- ],
- defaultParams: [10],
- version: "1.0"
- });
- addFuncDef({
- name: "movingMax",
- category: categories.Calculate,
- params: [
- {
- name: "windowSize",
- type: "int_or_interval",
- options: ["5", "7", "10", "5min", "10min", "30min", "1hour"]
- }
- ],
- defaultParams: [10],
- version: "1.0"
- });
- addFuncDef({
- name: "movingSum",
- category: categories.Calculate,
- params: [
- {
- name: "windowSize",
- type: "int_or_interval",
- options: ["5", "7", "10", "5min", "10min", "30min", "1hour"]
- }
- ],
- defaultParams: [10],
- version: "1.0"
- });
- addFuncDef({
- name: "multiplySeriesWithWildcards",
- category: categories.Calculate,
- params: [
- {
- name: "position",
- type: "int",
- options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
- },
- {
- name: "position",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- },
- {
- name: "position",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- },
- {
- name: "position",
- type: "int",
- options: [0, -1, -2, -3, -4, -5, -6, -7],
- optional: true
- }
- ],
- defaultParams: [2],
- version: "1.0"
- });
- addFuncDef({
- name: "offsetToZero",
- category: categories.Transform,
- version: "1.0"
- });
- addFuncDef({
- name: "pow",
- category: categories.Transform,
- params: [{ name: "factor", type: "int" }],
- defaultParams: [10],
- version: "1.0"
- });
- addFuncDef({
- name: "powSeries",
- category: categories.Transform,
- params: optionalSeriesRefArgs,
- defaultParams: [""],
- version: "1.0"
- });
- addFuncDef({
- name: "reduceSeries",
- shortName: "reduce",
- params: [
- {
- name: "function",
- type: "string",
- options: ["asPercent", "diffSeries", "divideSeries"]
- },
- {
- name: "reduceNode",
- type: "int",
- options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
- },
- { name: "reduceMatchers", type: "string" },
- { name: "reduceMatchers", type: "string" }
- ],
- defaultParams: ["asPercent", 2, "used_bytes", "total_bytes"],
- category: categories.Combine,
- version: "1.0"
- });
- addFuncDef({
- name: "removeBetweenPercentile",
- category: categories.Filter,
- params: [{ name: "n", type: "int" }],
- defaultParams: [95],
- version: "1.0"
- });
- addFuncDef({
- name: "removeEmptySeries",
- category: categories.Filter,
- version: "1.0"
- });
- addFuncDef({
- name: "squareRoot",
- category: categories.Transform,
- version: "1.0"
- });
- addFuncDef({
- name: "timeSlice",
- category: categories.Transform,
- params: [
- {
- name: "startSliceAt",
- type: "select",
- options: ["-1h", "-6h", "-12h", "-1d", "-2d", "-7d", "-14d", "-30d"]
- },
- {
- name: "endSliceAt",
- type: "select",
- options: ["-1h", "-6h", "-12h", "-1d", "-2d", "-7d", "-14d", "-30d"],
- optional: true
- }
- ],
- defaultParams: ["-1h"],
- version: "1.0"
- });
- addFuncDef({
- name: "weightedAverage",
- category: categories.Filter,
- params: [
- { name: "other", type: "value_or_series", optional: true },
- {
- name: "node",
- type: "int",
- options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
- }
- ],
- defaultParams: ["#A", 4],
- version: "1.0"
- });
- addFuncDef({
- name: "seriesByTag",
- category: categories.Special,
- params: [
- { name: "tagExpression", type: "string" },
- { name: "tagExpression", type: "string", optional: true },
- { name: "tagExpression", type: "string", optional: true },
- { name: "tagExpression", type: "string", optional: true }
- ],
- version: "1.1"
- });
- addFuncDef({
- name: "groupByTags",
- category: categories.Special,
- params: [
- {
- name: "function",
- type: "string",
- options: ["sum", "avg", "maxSeries"]
- },
- { name: "tag", type: "string" },
- { name: "tag", type: "string", optional: true },
- { name: "tag", type: "string", optional: true },
- { name: "tag", type: "string", optional: true }
- ],
- defaultParams: ["sum", "tag"],
- version: "1.1"
- });
- addFuncDef({
- name: "aliasByTags",
- category: categories.Special,
- params: [
- { name: "tag", type: "string" },
- { name: "tag", type: "string", optional: true },
- { name: "tag", type: "string", optional: true },
- { name: "tag", type: "string", optional: true }
- ],
- defaultParams: ["tag"],
- version: "1.1"
- });
- _.each(categories, function(funcList, catName) {
- categories[catName] = _.sortBy(funcList, "name");
- });
- function isVersionRelatedFunction(func, graphiteVersion) {
- return (
- isVersionGtOrEq(graphiteVersion, func.version) || !func.version
- );
- }
- export class FuncInstance {
- def: any;
- params: any;
- text: any;
- added: boolean;
- constructor(funcDef, options) {
- this.def = funcDef;
- this.params = [];
- if (options && options.withDefaultParams) {
- this.params = funcDef.defaultParams.slice(0);
- }
- this.updateText();
- }
- render(metricExp) {
- var str = this.def.name + "(";
- var parameters = _.map(
- this.params,
- function(value, index) {
- var paramType = this.def.params[index].type;
- if (
- paramType === "int" ||
- paramType === "value_or_series" ||
- paramType === "boolean"
- ) {
- return value;
- } else if (paramType === "int_or_interval" && $.isNumeric(value)) {
- return value;
- }
- return "'" + value + "'";
- }.bind(this)
- );
- if (metricExp) {
- parameters.unshift(metricExp);
- }
- return str + parameters.join(", ") + ")";
- }
- _hasMultipleParamsInString(strValue, index) {
- if (strValue.indexOf(",") === -1) {
- return false;
- }
- return this.def.params[index + 1] && this.def.params[index + 1].optional;
- }
- updateParam(strValue, index) {
- // handle optional parameters
- // if string contains ',' and next param is optional, split and update both
- if (this._hasMultipleParamsInString(strValue, index)) {
- _.each(
- strValue.split(","),
- function(partVal, idx) {
- this.updateParam(partVal.trim(), index + idx);
- }.bind(this)
- );
- return;
- }
- if (strValue === "" && this.def.params[index].optional) {
- this.params.splice(index, 1);
- } else {
- this.params[index] = strValue;
- }
- this.updateText();
- }
- updateText() {
- if (this.params.length === 0) {
- this.text = this.def.name + "()";
- return;
- }
- var text = this.def.name + "(";
- text += this.params.join(", ");
- text += ")";
- this.text = text;
- }
- }
- export default {
- createFuncInstance: function(funcDef, options?) {
- if (_.isString(funcDef)) {
- if (!index[funcDef]) {
- throw { message: "Method not found " + name };
- }
- funcDef = index[funcDef];
- }
- return new FuncInstance(funcDef, options);
- },
- getFuncDef: function(name) {
- return index[name];
- },
- getCategories: function(graphiteVersion) {
- var filteredCategories: any = {};
- _.each(categories, function(functions, category) {
- var filteredFuncs = _.filter(functions, function(func) {
- return isVersionRelatedFunction(func, graphiteVersion);
- });
- if (filteredFuncs.length) {
- filteredCategories[category] = filteredFuncs;
- }
- });
- return filteredCategories;
- }
- };
|