elasticsearch-response-specs.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. define([
  2. 'app/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].target).to.be('Count');
  39. expect(result.data[0].datapoints.length).to.be(2);
  40. expect(result.data[0].datapoints[0][0]).to.be(10);
  41. expect(result.data[0].datapoints[0][1]).to.be(1000);
  42. });
  43. });
  44. describe('simple query count & avg aggregation', function() {
  45. var result;
  46. beforeEach(function() {
  47. targets = [{
  48. refId: 'A',
  49. metrics: [{type: 'count', id: '1'}, {type: 'avg', field: 'value', id: '2'}],
  50. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '3'}],
  51. }];
  52. response = {
  53. responses: [{
  54. aggregations: {
  55. "3": {
  56. buckets: [
  57. {
  58. "2": {value: 88},
  59. doc_count: 10,
  60. key: 1000
  61. },
  62. {
  63. "2": {value: 99},
  64. doc_count: 15,
  65. key: 2000
  66. }
  67. ]
  68. }
  69. }
  70. }]
  71. };
  72. result = new ElasticResponse(targets, response).getTimeSeries();
  73. });
  74. it('should return 2 series', function() {
  75. expect(result.data.length).to.be(2);
  76. expect(result.data[0].datapoints.length).to.be(2);
  77. expect(result.data[0].datapoints[0][0]).to.be(10);
  78. expect(result.data[0].datapoints[0][1]).to.be(1000);
  79. expect(result.data[1].target).to.be("Average value");
  80. expect(result.data[1].datapoints[0][0]).to.be(88);
  81. expect(result.data[1].datapoints[1][0]).to.be(99);
  82. });
  83. });
  84. describe('single group by query one metric', function() {
  85. var result;
  86. beforeEach(function() {
  87. targets = [{
  88. refId: 'A',
  89. metrics: [{type: 'count', id: '1'}],
  90. bucketAggs: [{type: 'terms', field: 'host', id: '2'}, {type: 'date_histogram', field: '@timestamp', id: '3'}],
  91. }];
  92. response = {
  93. responses: [{
  94. aggregations: {
  95. "2": {
  96. buckets: [
  97. {
  98. "3": {
  99. buckets: [
  100. {doc_count: 1, key: 1000},
  101. {doc_count: 3, key: 2000}
  102. ]
  103. },
  104. doc_count: 4,
  105. key: 'server1',
  106. },
  107. {
  108. "3": {
  109. buckets: [
  110. {doc_count: 2, key: 1000},
  111. {doc_count: 8, key: 2000}
  112. ]
  113. },
  114. doc_count: 10,
  115. key: 'server2',
  116. },
  117. ]
  118. }
  119. }
  120. }]
  121. };
  122. result = new ElasticResponse(targets, response).getTimeSeries();
  123. });
  124. it('should return 2 series', function() {
  125. expect(result.data.length).to.be(2);
  126. expect(result.data[0].datapoints.length).to.be(2);
  127. expect(result.data[0].target).to.be('server1');
  128. expect(result.data[1].target).to.be('server2');
  129. });
  130. });
  131. describe('single group by query two metrics', function() {
  132. var result;
  133. beforeEach(function() {
  134. targets = [{
  135. refId: 'A',
  136. metrics: [{type: 'count', id: '1'}, {type: 'avg', field: '@value', id: '4'}],
  137. bucketAggs: [{type: 'terms', field: 'host', id: '2'}, {type: 'date_histogram', field: '@timestamp', id: '3'}],
  138. }];
  139. response = {
  140. responses: [{
  141. aggregations: {
  142. "2": {
  143. buckets: [
  144. {
  145. "3": {
  146. buckets: [
  147. { "4": {value: 10}, doc_count: 1, key: 1000},
  148. { "4": {value: 12}, doc_count: 3, key: 2000}
  149. ]
  150. },
  151. doc_count: 4,
  152. key: 'server1',
  153. },
  154. {
  155. "3": {
  156. buckets: [
  157. { "4": {value: 20}, doc_count: 1, key: 1000},
  158. { "4": {value: 32}, doc_count: 3, key: 2000}
  159. ]
  160. },
  161. doc_count: 10,
  162. key: 'server2',
  163. },
  164. ]
  165. }
  166. }
  167. }]
  168. };
  169. result = new ElasticResponse(targets, response).getTimeSeries();
  170. });
  171. it('should return 2 series', function() {
  172. expect(result.data.length).to.be(4);
  173. expect(result.data[0].datapoints.length).to.be(2);
  174. expect(result.data[0].target).to.be('server1 Count');
  175. expect(result.data[1].target).to.be('server1 Average @value');
  176. expect(result.data[2].target).to.be('server2 Count');
  177. expect(result.data[3].target).to.be('server2 Average @value');
  178. });
  179. });
  180. describe('with percentiles ', function() {
  181. var result;
  182. beforeEach(function() {
  183. targets = [{
  184. refId: 'A',
  185. metrics: [{type: 'percentiles', settings: {percents: [75, 90]}, id: '1'}],
  186. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '3'}],
  187. }];
  188. response = {
  189. responses: [{
  190. aggregations: {
  191. "3": {
  192. buckets: [
  193. {
  194. "1": {values: {"75": 3.3, "90": 5.5}},
  195. doc_count: 10,
  196. key: 1000
  197. },
  198. {
  199. "1": {values: {"75": 2.3, "90": 4.5}},
  200. doc_count: 15,
  201. key: 2000
  202. }
  203. ]
  204. }
  205. }
  206. }]
  207. };
  208. result = new ElasticResponse(targets, response).getTimeSeries();
  209. });
  210. it('should return 2 series', function() {
  211. expect(result.data.length).to.be(2);
  212. expect(result.data[0].datapoints.length).to.be(2);
  213. expect(result.data[0].target).to.be('p75');
  214. expect(result.data[1].target).to.be('p90');
  215. expect(result.data[0].datapoints[0][0]).to.be(3.3);
  216. expect(result.data[0].datapoints[0][1]).to.be(1000);
  217. expect(result.data[1].datapoints[1][0]).to.be(4.5);
  218. });
  219. });
  220. describe('with extended_stats', function() {
  221. var result;
  222. beforeEach(function() {
  223. targets = [{
  224. refId: 'A',
  225. metrics: [{type: 'extended_stats', meta: {max: true, std_deviation_bounds_upper: true}, id: '1'}],
  226. bucketAggs: [{type: 'terms', field: 'host', id: '3'}, {type: 'date_histogram', id: '4'}],
  227. }];
  228. response = {
  229. responses: [{
  230. aggregations: {
  231. "3": {
  232. buckets: [
  233. {
  234. key: 'server1',
  235. "4": {
  236. buckets: [{
  237. "1": {max: 10.2, min: 5.5, std_deviation_bounds: {upper: 3, lower: -2}},
  238. doc_count: 10,
  239. key: 1000
  240. }]
  241. }
  242. },
  243. {
  244. key: 'server2',
  245. "4": {
  246. buckets: [{
  247. "1": {max: 10.2, min: 5.5, std_deviation_bounds: {upper: 3, lower: -2}},
  248. doc_count: 10,
  249. key: 1000
  250. }]
  251. }
  252. },
  253. ]
  254. }
  255. }
  256. }]
  257. };
  258. result = new ElasticResponse(targets, response).getTimeSeries();
  259. });
  260. it('should return 4 series', function() {
  261. expect(result.data.length).to.be(4);
  262. expect(result.data[0].datapoints.length).to.be(1);
  263. expect(result.data[0].target).to.be('server1 Max');
  264. expect(result.data[1].target).to.be('server1 Std Dev Upper');
  265. expect(result.data[0].datapoints[0][0]).to.be(10.2);
  266. expect(result.data[1].datapoints[0][0]).to.be(3);
  267. });
  268. });
  269. describe('single group by with alias pattern', function() {
  270. var result;
  271. beforeEach(function() {
  272. targets = [{
  273. refId: 'A',
  274. metrics: [{type: 'count', id: '1'}],
  275. alias: '{{term @host}} {{metric}} and!',
  276. bucketAggs: [
  277. {type: 'terms', field: '@host', id: '2'},
  278. {type: 'date_histogram', field: '@timestamp', id: '3'}
  279. ],
  280. }];
  281. response = {
  282. responses: [{
  283. aggregations: {
  284. "2": {
  285. buckets: [
  286. {
  287. "3": {
  288. buckets: [
  289. {doc_count: 1, key: 1000},
  290. {doc_count: 3, key: 2000}
  291. ]
  292. },
  293. doc_count: 4,
  294. key: 'server1',
  295. },
  296. {
  297. "3": {
  298. buckets: [
  299. {doc_count: 2, key: 1000},
  300. {doc_count: 8, key: 2000}
  301. ]
  302. },
  303. doc_count: 10,
  304. key: 'server2',
  305. },
  306. ]
  307. }
  308. }
  309. }]
  310. };
  311. result = new ElasticResponse(targets, response).getTimeSeries();
  312. });
  313. it('should return 2 series', function() {
  314. expect(result.data.length).to.be(2);
  315. expect(result.data[0].datapoints.length).to.be(2);
  316. expect(result.data[0].target).to.be('server1 Count and!');
  317. expect(result.data[1].target).to.be('server2 Count and!');
  318. });
  319. });
  320. });
  321. });