gfunc.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. define([
  2. 'underscore'
  3. ],
  4. function (_) {
  5. 'use strict';
  6. var index = [];
  7. var categories = {
  8. Combine: [],
  9. Transform: [],
  10. Calculate: [],
  11. Filter: [],
  12. Special: []
  13. };
  14. function addFuncDef(funcDef) {
  15. funcDef.params = funcDef.params || [];
  16. funcDef.defaultParams = funcDef.defaultParams || [];
  17. if (funcDef.category) {
  18. funcDef.category.push(funcDef);
  19. }
  20. index[funcDef.name] = funcDef;
  21. index[funcDef.shortName || funcDef.name] = funcDef;
  22. }
  23. addFuncDef({
  24. name: 'scaleToSeconds',
  25. category: categories.Transform,
  26. params: [ { name: 'seconds', type: 'int' } ],
  27. defaultParams: [1],
  28. });
  29. addFuncDef({
  30. name: "holtWintersForecast",
  31. category: categories.Calculate,
  32. });
  33. addFuncDef({
  34. name: "holtWintersConfidenceBands",
  35. category: categories.Calculate,
  36. params: [ { name: "delta", type: 'int' } ],
  37. defaultParams: [3]
  38. });
  39. addFuncDef({
  40. name: "holtWintersAberration",
  41. category: categories.Calculate,
  42. params: [ { name: "delta", type: 'int' } ],
  43. defaultParams: [3]
  44. });
  45. addFuncDef({
  46. name: 'sumSeries',
  47. shortName: 'sum',
  48. category: categories.Combine,
  49. });
  50. addFuncDef({
  51. name: 'averageSeries',
  52. shortName: 'avg',
  53. category: categories.Combine,
  54. });
  55. addFuncDef({
  56. name: "alias",
  57. category: categories.Special,
  58. params: [ { name: "alias", type: 'string' } ],
  59. defaultParams: ['alias']
  60. });
  61. addFuncDef({
  62. name: "aliasSub",
  63. category: categories.Special,
  64. params: [ { name: "search", type: 'string' }, { name: "replace", type: 'string' } ],
  65. defaultParams: ['', '']
  66. });
  67. addFuncDef({
  68. name: "groupByNode",
  69. category: categories.Special,
  70. params: [
  71. {
  72. name: "node",
  73. type: "select",
  74. options: [1,2,3,4,5,6,7,8,9,10,12]
  75. },
  76. {
  77. name: "function",
  78. type: "select",
  79. options: ['sum', 'avg']
  80. }
  81. ],
  82. defaultParams: [3, "sum"]
  83. });
  84. addFuncDef({
  85. name: 'aliasByNode',
  86. category: categories.Special,
  87. params: [ { name: "node", type: "select", options: [1,2,3,4,5,6,7,8,9,10,12] } ],
  88. defaultParams: [3]
  89. });
  90. addFuncDef({
  91. name: 'aliasByMetric',
  92. category: categories.Special,
  93. });
  94. addFuncDef({
  95. name: 'randomWalk',
  96. category: categories.Special,
  97. params: [ { name: "name", type: "string", } ],
  98. defaultParams: ['randomWalk']
  99. });
  100. addFuncDef({
  101. name: 'countSeries',
  102. category: categories.Special
  103. });
  104. addFuncDef({
  105. name: 'constantLine',
  106. category: categories.Special,
  107. params: [ { name: "value", type: "int", } ],
  108. defaultParams: [10]
  109. });
  110. addFuncDef({
  111. name: 'scale',
  112. category: categories.Transform,
  113. params: [ { name: "factor", type: "int", } ],
  114. defaultParams: [1]
  115. });
  116. addFuncDef({
  117. name: 'integral',
  118. category: categories.Transform,
  119. });
  120. addFuncDef({
  121. name: 'derivative',
  122. category: categories.Transform,
  123. });
  124. addFuncDef({
  125. name: 'timeShift',
  126. category: categories.Transform,
  127. params: [ { name: "amount", type: "select", options: ['1h', '6h', '12h', '1d', '2d', '7d', '14d', '30d'] }],
  128. defaultParams: ['1d']
  129. });
  130. addFuncDef({
  131. name: 'summarize',
  132. category: categories.Transform,
  133. params: [ { name: "interval", type: "string" }],
  134. defaultParams: ['1h']
  135. });
  136. addFuncDef({
  137. name: 'absolute',
  138. category: categories.Transform,
  139. });
  140. addFuncDef({
  141. name: 'averageAbove',
  142. category: categories.Filter,
  143. params: [ { name: "n", type: "int", } ],
  144. defaultParams: [25]
  145. });
  146. addFuncDef({
  147. name: 'averageBelow',
  148. category: categories.Filter,
  149. params: [ { name: "n", type: "int", } ],
  150. defaultParams: [25]
  151. });
  152. _.each(categories, function(funcList, catName) {
  153. categories[catName] = _.sortBy(funcList, 'name');
  154. });
  155. function FuncInstance(funcDef) {
  156. this.def = funcDef;
  157. this.params = funcDef.defaultParams.slice(0);
  158. this.updateText();
  159. }
  160. FuncInstance.prototype.render = function (metricExp) {
  161. var str = this.def.name + '(';
  162. var parameters = _.map(this.params, function(value) {
  163. return _.isString(value) ? "'" + value + "'" : value;
  164. });
  165. if (metricExp !== undefined) {
  166. parameters.unshift(metricExp);
  167. }
  168. return str + parameters.join(',') + ')';
  169. };
  170. FuncInstance.prototype.updateText = function () {
  171. if (this.params.length === 0) {
  172. this.text = this.def.name + '()';
  173. return;
  174. }
  175. var text = this.def.name + '(';
  176. _.each(this.def.params, function(param, index) {
  177. text += this.params[index] + ', ';
  178. }, this);
  179. text = text.substring(0, text.length - 2);
  180. text += ')';
  181. this.text = text;
  182. };
  183. return {
  184. createFuncInstance: function(funcDef) {
  185. if (_.isString(funcDef)) {
  186. if (!index[funcDef]) {
  187. throw { message: 'Method not found ' + name };
  188. }
  189. funcDef = index[funcDef];
  190. }
  191. return new FuncInstance(funcDef);
  192. },
  193. getCategories: function() {
  194. return categories;
  195. }
  196. };
  197. });