elasticsearch-querybuilder-specs.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. define([
  2. 'app/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 raw query', function() {
  20. var query = builder.build({
  21. rawQuery: '{"query": "$lucene_query"}',
  22. });
  23. expect(query.query).to.be("$lucene_query");
  24. });
  25. it('with multiple bucket aggs', function() {
  26. var query = builder.build({
  27. metrics: [{type: 'count', id: '1'}],
  28. timeField: '@timestamp',
  29. bucketAggs: [
  30. {type: 'terms', field: '@host', id: '2'},
  31. {type: 'date_histogram', field: '@timestamp', id: '3'}
  32. ],
  33. });
  34. expect(query.aggs["2"].terms.field).to.be("@host");
  35. expect(query.aggs["2"].aggs["3"].date_histogram.field).to.be("@timestamp");
  36. });
  37. it('with select field', function() {
  38. var query = builder.build({
  39. metrics: [{type: 'avg', field: '@value', id: '1'}],
  40. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '2'}],
  41. }, 100, 1000);
  42. var aggs = query.aggs["2"].aggs;
  43. expect(aggs["1"].avg.field).to.be("@value");
  44. });
  45. it('with term agg and order by metric agg', function() {
  46. var query = builder.build({
  47. metrics: [
  48. {type: 'count', id: '1'},
  49. {type: 'avg', field: '@value', id: '5'}
  50. ],
  51. bucketAggs: [
  52. {type: 'terms', field: '@host', settings: {size: 5, order: 'asc', orderBy: '5'}, id: '2' },
  53. {type: 'date_histogram', field: '@timestamp', id: '3'}
  54. ],
  55. }, 100, 1000);
  56. var firstLevel = query.aggs["2"];
  57. var secondLevel = firstLevel.aggs["3"];
  58. expect(firstLevel.aggs["5"].avg.field).to.be("@value");
  59. expect(secondLevel.aggs["5"].avg.field).to.be("@value");
  60. });
  61. it('with metric percentiles', function() {
  62. var query = builder.build({
  63. metrics: [
  64. {
  65. id: '1',
  66. type: 'percentiles',
  67. field: '@load_time',
  68. settings: {
  69. percents: [1,2,3,4]
  70. }
  71. }
  72. ],
  73. bucketAggs: [
  74. {type: 'date_histogram', field: '@timestamp', id: '3'}
  75. ],
  76. }, 100, 1000);
  77. var firstLevel = query.aggs["3"];
  78. expect(firstLevel.aggs["1"].percentiles.field).to.be("@load_time");
  79. expect(firstLevel.aggs["1"].percentiles.percents).to.eql([1,2,3,4]);
  80. });
  81. it('with filters aggs', function() {
  82. var query = builder.build({
  83. metrics: [{type: 'count', id: '1'}],
  84. timeField: '@timestamp',
  85. bucketAggs: [
  86. {
  87. id: '2',
  88. type: 'filters',
  89. settings: {
  90. filters: [
  91. {query: '@metric:cpu' },
  92. {query: '@metric:logins.count' },
  93. ]
  94. }
  95. },
  96. {type: 'date_histogram', field: '@timestamp', id: '4'}
  97. ],
  98. });
  99. expect(query.aggs["2"].filters.filters["@metric:cpu"].query.query_string.query).to.be("@metric:cpu");
  100. expect(query.aggs["2"].filters.filters["@metric:logins.count"].query.query_string.query).to.be("@metric:logins.count");
  101. expect(query.aggs["2"].aggs["4"].date_histogram.field).to.be("@timestamp");
  102. });
  103. });
  104. });