elasticsearch-response-specs.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. define([
  2. 'plugins/datasource/elasticsearch/elasticResponse',
  3. ], function(ElasticResponse) {
  4. 'use strict';
  5. describe('ElasticResponse', function() {
  6. var targets;
  7. var response;
  8. var result;
  9. describe('simple query and count', function() {
  10. beforeEach(function() {
  11. targets = [{
  12. refId: 'A',
  13. metrics: [{type: 'count', id: '1'}],
  14. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '2'}],
  15. }];
  16. response = {
  17. responses: [{
  18. aggregations: {
  19. "2": {
  20. buckets: [
  21. {
  22. doc_count: 10,
  23. key: 1000
  24. },
  25. {
  26. doc_count: 15,
  27. key: 2000
  28. }
  29. ]
  30. }
  31. }
  32. }]
  33. };
  34. result = new ElasticResponse(targets, response).getTimeSeries();
  35. });
  36. it('should return 1 series', function() {
  37. expect(result.data.length).to.be(1);
  38. expect(result.data[0].datapoints.length).to.be(2);
  39. expect(result.data[0].datapoints[0][0]).to.be(10);
  40. expect(result.data[0].datapoints[0][1]).to.be(1000);
  41. });
  42. });
  43. describe('simple query count & avg aggregation', function() {
  44. var result;
  45. beforeEach(function() {
  46. targets = [{
  47. refId: 'A',
  48. metrics: [{type: 'count', id: '1'}, {type: 'avg', field: 'value', id: '2'}],
  49. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '3'}],
  50. }];
  51. response = {
  52. responses: [{
  53. aggregations: {
  54. "3": {
  55. buckets: [
  56. {
  57. "2": {value: 88},
  58. doc_count: 10,
  59. key: 1000
  60. },
  61. {
  62. "2": {value: 99},
  63. doc_count: 15,
  64. key: 2000
  65. }
  66. ]
  67. }
  68. }
  69. }]
  70. };
  71. result = new ElasticResponse(targets, response).getTimeSeries();
  72. });
  73. it('should return 2 series', function() {
  74. expect(result.data.length).to.be(2);
  75. expect(result.data[0].datapoints.length).to.be(2);
  76. expect(result.data[0].datapoints[0][0]).to.be(10);
  77. expect(result.data[0].datapoints[0][1]).to.be(1000);
  78. expect(result.data[1].target).to.be("A value avg");
  79. expect(result.data[1].datapoints[0][0]).to.be(88);
  80. expect(result.data[1].datapoints[1][0]).to.be(99);
  81. });
  82. });
  83. describe('single group by query', function() {
  84. var result;
  85. beforeEach(function() {
  86. targets = [{
  87. refId: 'A',
  88. metrics: [{type: 'count', id: '1'}],
  89. bucketAggs: [{type: 'terms', field: 'host', id: '2'}, {type: 'date_histogram', field: '@timestamp', id: '3'}],
  90. }];
  91. response = {
  92. responses: [{
  93. aggregations: {
  94. "2": {
  95. buckets: [
  96. {
  97. "3": {
  98. buckets: [
  99. {doc_count: 1, key: 1000},
  100. {doc_count: 3, key: 2000}
  101. ]
  102. },
  103. doc_count: 4,
  104. key: 'server1',
  105. },
  106. {
  107. "3": {
  108. buckets: [
  109. {doc_count: 2, key: 1000},
  110. {doc_count: 8, key: 2000}
  111. ]
  112. },
  113. doc_count: 10,
  114. key: 'server2',
  115. },
  116. ]
  117. }
  118. }
  119. }]
  120. };
  121. result = new ElasticResponse(targets, response).getTimeSeries();
  122. });
  123. it('should return 2 series', function() {
  124. expect(result.data.length).to.be(2);
  125. expect(result.data[0].datapoints.length).to.be(2);
  126. expect(result.data[0].target).to.be('A server1 count');
  127. expect(result.data[1].target).to.be('A server2 count');
  128. });
  129. });
  130. describe('with percentiles ', function() {
  131. var result;
  132. beforeEach(function() {
  133. targets = [{
  134. refId: 'A',
  135. metrics: [{type: 'percentiles', settings: {percents: [75, 90]}, id: '1'}],
  136. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '3'}],
  137. }];
  138. response = {
  139. responses: [{
  140. aggregations: {
  141. "3": {
  142. buckets: [
  143. {
  144. "1": {values: {"75": 3.3, "90": 5.5}},
  145. doc_count: 10,
  146. key: 1000
  147. },
  148. {
  149. "1": {values: {"75": 2.3, "90": 4.5}},
  150. doc_count: 15,
  151. key: 2000
  152. }
  153. ]
  154. }
  155. }
  156. }]
  157. };
  158. result = new ElasticResponse(targets, response).getTimeSeries();
  159. });
  160. it('should return 2 series', function() {
  161. expect(result.data.length).to.be(2);
  162. expect(result.data[0].datapoints.length).to.be(2);
  163. expect(result.data[0].target).to.be('A 75');
  164. expect(result.data[1].target).to.be('A 90');
  165. expect(result.data[0].datapoints[0][0]).to.be(3.3);
  166. expect(result.data[0].datapoints[0][1]).to.be(1000);
  167. expect(result.data[1].datapoints[1][0]).to.be(4.5);
  168. });
  169. });
  170. describe('with extended_stats ', function() {
  171. var result;
  172. beforeEach(function() {
  173. targets = [{
  174. refId: 'A',
  175. metrics: [{type: 'extended_stats', meta: {max: true, std_deviation_bounds_upper: true}, id: '1'}],
  176. bucketAggs: [{type: 'date_histogram', id: '3'}],
  177. }];
  178. response = {
  179. responses: [{
  180. aggregations: {
  181. "3": {
  182. buckets: [
  183. {
  184. "1": {max: 10.2, min: 5.5, std_deviation_bounds: {upper: 3, lower: -2}},
  185. doc_count: 10,
  186. key: 1000
  187. },
  188. {
  189. "1": {max: 7.2, min: 3.5, std_deviation_bounds: {upper: 4, lower: -1}},
  190. doc_count: 15,
  191. key: 2000
  192. }
  193. ]
  194. }
  195. }
  196. }]
  197. };
  198. result = new ElasticResponse(targets, response).getTimeSeries();
  199. });
  200. it('should return 2 series', function() {
  201. expect(result.data.length).to.be(2);
  202. expect(result.data[0].datapoints.length).to.be(2);
  203. expect(result.data[0].target).to.be('A max');
  204. expect(result.data[1].target).to.be('A std_deviation_bounds_upper');
  205. expect(result.data[0].datapoints[0][0]).to.be(10.2);
  206. expect(result.data[0].datapoints[1][0]).to.be(7.2);
  207. expect(result.data[1].datapoints[0][0]).to.be(3);
  208. expect(result.data[1].datapoints[1][0]).to.be(4);
  209. });
  210. });
  211. });
  212. });