elasticsearch-querybuilder-specs.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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: [
  42. {type: 'count', id: '1'},
  43. {type: 'avg', field: '@value', id: '5'}
  44. ],
  45. bucketAggs: [
  46. {type: 'terms', field: '@host', settings: {size: 5, order: 'asc', orderBy: '5'}, id: '2' },
  47. {type: 'date_histogram', field: '@timestamp', id: '3'}
  48. ],
  49. }, 100, 1000);
  50. var firstLevel = query.aggs["2"];
  51. var secondLevel = firstLevel.aggs["3"];
  52. expect(firstLevel.aggs["5"].avg.field).to.be("@value");
  53. expect(secondLevel.aggs["5"].avg.field).to.be("@value");
  54. });
  55. it('with metric percentiles', function() {
  56. var query = builder.build({
  57. metrics: [
  58. {
  59. id: '1',
  60. type: 'percentiles',
  61. field: '@load_time',
  62. settings: {
  63. percents: [1,2,3,4]
  64. }
  65. }
  66. ],
  67. bucketAggs: [
  68. {type: 'date_histogram', field: '@timestamp', id: '3'}
  69. ],
  70. }, 100, 1000);
  71. var firstLevel = query.aggs["3"];
  72. expect(firstLevel.aggs["1"].percentiles.field).to.be("@load_time");
  73. expect(firstLevel.aggs["1"].percentiles.percents).to.eql([1,2,3,4]);
  74. });
  75. });
  76. });