elasticsearch-querybuilder-specs.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. define([
  2. 'plugins/datasource/elasticsearch/queryBuilder'
  3. ], function(ElasticQueryBuilder) {
  4. 'use strict';
  5. describe('ElasticQueryBuilder', function() {
  6. var builder;
  7. beforeEach(function() {
  8. builder = new ElasticQueryBuilder({timeField: '@timestamp'});
  9. });
  10. it('with defaults', function() {
  11. var query = builder.build({
  12. metrics: [{type: 'Count', id: '0'}],
  13. timeField: '@timestamp',
  14. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '1'}],
  15. });
  16. expect(query.query.filtered.filter.bool.must[0].range["@timestamp"].gte).to.be("$timeFrom");
  17. expect(query.aggs["1"].date_histogram.extended_bounds.min).to.be("$timeFrom");
  18. });
  19. it('with multiple bucket aggs', function() {
  20. var query = builder.build({
  21. metrics: [{type: 'count', id: '1'}],
  22. timeField: '@timestamp',
  23. bucketAggs: [
  24. {type: 'terms', field: '@host', id: '2'},
  25. {type: 'date_histogram', field: '@timestamp', id: '3'}
  26. ],
  27. });
  28. expect(query.aggs["2"].terms.field).to.be("@host");
  29. expect(query.aggs["2"].aggs["3"].date_histogram.field).to.be("@timestamp");
  30. });
  31. it('with select field', function() {
  32. var query = builder.build({
  33. metrics: [{type: 'avg', field: '@value', id: '1'}],
  34. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '2'}],
  35. }, 100, 1000);
  36. var aggs = query.aggs["2"].aggs;
  37. expect(aggs["1"].avg.field).to.be("@value");
  38. });
  39. it('with term agg and order by metric agg', function() {
  40. var query = builder.build({
  41. metrics: [{type: 'count', id: '1'}, {type: 'avg', field: '@value', id: '5'}],
  42. bucketAggs: [
  43. {type: 'terms', field: '@host', size: 5, order: 'asc', orderBy: '5', id: '2' },
  44. {type: 'date_histogram', field: '@timestamp', id: '3'}
  45. ],
  46. }, 100, 1000);
  47. var firstLevel = query.aggs["2"];
  48. var secondLevel = firstLevel.aggs["3"];
  49. expect(firstLevel.aggs["5"].avg.field).to.be("@value");
  50. expect(secondLevel.aggs["5"].avg.field).to.be("@value");
  51. });
  52. it('with metric percentiles', function() {
  53. var query = builder.build({
  54. metrics: [
  55. {
  56. id: '1',
  57. type: 'percentiles',
  58. field: '@load_time',
  59. settings: {
  60. percents: [1,2,3,4]
  61. }
  62. }
  63. ],
  64. bucketAggs: [
  65. {type: 'date_histogram', field: '@timestamp', id: '3'}
  66. ],
  67. }, 100, 1000);
  68. var firstLevel = query.aggs["3"];
  69. expect(firstLevel.aggs["1"].percentiles.field).to.be("@load_time");
  70. expect(firstLevel.aggs["1"].percentiles.percents).to.eql([1,2,3,4]);
  71. });
  72. });
  73. });