query_def.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. define([
  2. 'lodash'
  3. ],
  4. function (_) {
  5. 'use strict';
  6. return {
  7. metricAggTypes: [
  8. {text: "Count", value: 'count', requiresField: false},
  9. {text: "Average", value: 'avg', requiresField: true, supportsInlineScript: true, supportsMissing: true},
  10. {text: "Sum", value: 'sum', requiresField: true, supportsInlineScript: true, supportsMissing: true},
  11. {text: "Max", value: 'max', requiresField: true, supportsInlineScript: true, supportsMissing: true},
  12. {text: "Min", value: 'min', requiresField: true, supportsInlineScript: true, supportsMissing: true},
  13. {text: "Extended Stats", value: 'extended_stats', requiresField: true, supportsMissing: true, supportsInlineScript: true},
  14. {text: "Percentiles", value: 'percentiles', requiresField: true, supportsMissing: true, supportsInlineScript: true},
  15. {text: "Unique Count", value: "cardinality", requiresField: true, supportsMissing: true},
  16. {text: "Moving Average", value: 'moving_avg', requiresField: false, isPipelineAgg: true, minVersion: 2},
  17. {text: "Derivative", value: 'derivative', requiresField: false, isPipelineAgg: true, minVersion: 2 },
  18. {text: "Raw Document", value: "raw_document", requiresField: false}
  19. ],
  20. bucketAggTypes: [
  21. {text: "Terms", value: 'terms', requiresField: true},
  22. {text: "Filters", value: 'filters' },
  23. {text: "Geo Hash Grid", value: 'geohash_grid', requiresField: true},
  24. {text: "Date Histogram", value: 'date_histogram', requiresField: true},
  25. {text: "Histogram", value: 'histogram', requiresField: true},
  26. ],
  27. orderByOptions: [
  28. {text: "Doc Count", value: '_count' },
  29. {text: "Term value", value: '_term' },
  30. ],
  31. orderOptions: [
  32. {text: "Top", value: 'desc' },
  33. {text: "Bottom", value: 'asc' },
  34. ],
  35. sizeOptions: [
  36. {text: "No limit", value: '0' },
  37. {text: "1", value: '1' },
  38. {text: "2", value: '2' },
  39. {text: "3", value: '3' },
  40. {text: "5", value: '5' },
  41. {text: "10", value: '10' },
  42. {text: "15", value: '15' },
  43. {text: "20", value: '20' },
  44. ],
  45. extendedStats: [
  46. {text: 'Avg', value: 'avg'},
  47. {text: 'Min', value: 'min'},
  48. {text: 'Max', value: 'max'},
  49. {text: 'Sum', value: 'sum'},
  50. {text: 'Count', value: 'count'},
  51. {text: 'Std Dev', value: 'std_deviation'},
  52. {text: 'Std Dev Upper', value: 'std_deviation_bounds_upper'},
  53. {text: 'Std Dev Lower', value: 'std_deviation_bounds_lower'},
  54. ],
  55. intervalOptions: [
  56. {text: 'auto', value: 'auto'},
  57. {text: '10s', value: '10s'},
  58. {text: '1m', value: '1m'},
  59. {text: '5m', value: '5m'},
  60. {text: '10m', value: '10m'},
  61. {text: '20m', value: '20m'},
  62. {text: '1h', value: '1h'},
  63. {text: '1d', value: '1d'},
  64. ],
  65. movingAvgModelOptions: [
  66. {text: 'Simple', value: 'simple'},
  67. {text: 'Linear', value: 'linear'},
  68. {text: 'Exponentially Weighted', value: 'ewma'},
  69. {text: 'Holt Linear', value: 'holt'},
  70. {text: 'Holt Winters', value: 'holt_winters'},
  71. ],
  72. pipelineOptions: {
  73. 'moving_avg' : [
  74. {text: 'window', default: 5},
  75. {text: 'model', default: 'simple'},
  76. {text: 'predict', default: undefined},
  77. {text: 'minimize', default: false},
  78. ],
  79. 'derivative': [
  80. {text: 'unit', default: undefined},
  81. ]
  82. },
  83. movingAvgModelSettings: {
  84. 'simple' : [],
  85. 'linear' : [],
  86. 'ewma' : [
  87. {text: "Alpha", value: "alpha", default: undefined}],
  88. 'holt' : [
  89. {text: "Alpha", value: "alpha", default: undefined},
  90. {text: "Beta", value: "beta", default: undefined},
  91. ],
  92. 'holt_winters' : [
  93. {text: "Alpha", value: "alpha", default: undefined},
  94. {text: "Beta", value: "beta", default: undefined},
  95. {text: "Gamma", value: "gamma", default: undefined},
  96. {text: "Period", value: "period", default: undefined},
  97. {text: "Pad", value: "pad", default: undefined, isCheckbox: true},
  98. ],
  99. },
  100. getMetricAggTypes: function(esVersion) {
  101. return _.filter(this.metricAggTypes, function(f) {
  102. if (f.minVersion) {
  103. return f.minVersion <= esVersion;
  104. } else {
  105. return true;
  106. }
  107. });
  108. },
  109. getPipelineOptions: function(metric) {
  110. if (!this.isPipelineAgg(metric.type)) {
  111. return [];
  112. }
  113. return this.pipelineOptions[metric.type];
  114. },
  115. isPipelineAgg: function(metricType) {
  116. if (metricType) {
  117. var po = this.pipelineOptions[metricType];
  118. return po !== null && po !== undefined;
  119. }
  120. return false;
  121. },
  122. getPipelineAggOptions: function(targets) {
  123. var self = this;
  124. var result = [];
  125. _.each(targets.metrics, function(metric) {
  126. if (!self.isPipelineAgg(metric.type)) {
  127. result.push({text: self.describeMetric(metric), value: metric.id });
  128. }
  129. });
  130. return result;
  131. },
  132. getMovingAvgSettings: function(model, filtered) {
  133. var filteredResult = [];
  134. if (filtered) {
  135. _.each(this.movingAvgModelSettings[model], function(setting) {
  136. if (!(setting.isCheckbox)) {
  137. filteredResult.push(setting);
  138. }
  139. });
  140. return filteredResult;
  141. }
  142. return this.movingAvgModelSettings[model];
  143. },
  144. getOrderByOptions: function(target) {
  145. var self = this;
  146. var metricRefs = [];
  147. _.each(target.metrics, function(metric) {
  148. if (metric.type !== 'count') {
  149. metricRefs.push({text: self.describeMetric(metric), value: metric.id});
  150. }
  151. });
  152. return this.orderByOptions.concat(metricRefs);
  153. },
  154. describeOrder: function(order) {
  155. var def = _.find(this.orderOptions, {value: order});
  156. return def.text;
  157. },
  158. describeMetric: function(metric) {
  159. var def = _.find(this.metricAggTypes, {value: metric.type});
  160. return def.text + ' ' + metric.field;
  161. },
  162. describeOrderBy: function(orderBy, target) {
  163. var def = _.find(this.orderByOptions, {value: orderBy});
  164. if (def) {
  165. return def.text;
  166. }
  167. var metric = _.find(target.metrics, {id: orderBy});
  168. if (metric) {
  169. return this.describeMetric(metric);
  170. } else {
  171. return "metric not found";
  172. }
  173. },
  174. };
  175. });