elasticsearch-specs.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. define([
  2. 'helpers',
  3. 'moment',
  4. 'plugins/datasource/elasticsearch/datasource',
  5. 'aws-sdk',
  6. ], function(helpers, moment) {
  7. 'use strict';
  8. describe('ElasticDatasource', function() {
  9. var ctx = new helpers.ServiceTestContext();
  10. beforeEach(module('grafana.services'));
  11. beforeEach(ctx.providePhase(['templateSrv', 'backendSrv']));
  12. beforeEach(ctx.createService('ElasticDatasource'));
  13. beforeEach(function() {
  14. ctx.ds = new ctx.service({jsonData: {}});
  15. });
  16. describe('When testing datasource with index pattern', function() {
  17. beforeEach(function(){
  18. ctx.ds = new ctx.service({
  19. url: 'http://es.com',
  20. index: '[asd-]YYYY.MM.DD',
  21. jsonData: { interval: 'daily' }
  22. });
  23. })
  24. it('should translate index pattern to current day', function() {
  25. var requestOptions;
  26. ctx.backendSrv.datasourceRequest = function(options) {
  27. requestOptions = options;
  28. return ctx.$q.when({});
  29. };
  30. ctx.ds.testDatasource();
  31. ctx.$rootScope.$apply();
  32. var today = moment().format("YYYY.MM.DD");
  33. expect(requestOptions.url).to.be("http://es.com/asd-" + today + '/_stats');
  34. });
  35. });
  36. describe('When processing es response', function() {
  37. describe('simple query and count', function() {
  38. var result;
  39. beforeEach(function() {
  40. result = ctx.ds._processTimeSeries([{
  41. refId: 'A',
  42. metrics: [{type: 'count', id: '1'}],
  43. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '2'}],
  44. }], {
  45. responses: [{
  46. aggregations: {
  47. "2": {
  48. buckets: [
  49. {
  50. doc_count: 10,
  51. key: 1000
  52. },
  53. {
  54. doc_count: 15,
  55. key: 2000
  56. }
  57. ]
  58. }
  59. }
  60. }]
  61. });
  62. });
  63. it('should return 1 series', function() {
  64. expect(result.data.length).to.be(1);
  65. expect(result.data[0].datapoints.length).to.be(2);
  66. expect(result.data[0].datapoints[0][0]).to.be(10);
  67. expect(result.data[0].datapoints[0][1]).to.be(1000);
  68. });
  69. });
  70. describe('simple query count & avg aggregation', function() {
  71. var result;
  72. beforeEach(function() {
  73. result = ctx.ds._processTimeSeries([{
  74. refId: 'A',
  75. metrics: [{type: 'count', id: '1'}, {type: 'avg', field: 'value', id: '2'}],
  76. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '3'}],
  77. }], {
  78. responses: [{
  79. aggregations: {
  80. "3": {
  81. buckets: [
  82. {
  83. "2": {value: 88},
  84. doc_count: 10,
  85. key: 1000
  86. },
  87. {
  88. "2": {value: 99},
  89. doc_count: 15,
  90. key: 2000
  91. }
  92. ]
  93. }
  94. }
  95. }]
  96. });
  97. });
  98. it('should return 2 series', function() {
  99. expect(result.data.length).to.be(2);
  100. expect(result.data[0].datapoints.length).to.be(2);
  101. expect(result.data[0].datapoints[0][0]).to.be(10);
  102. expect(result.data[0].datapoints[0][1]).to.be(1000);
  103. expect(result.data[1].target).to.be("A value avg");
  104. expect(result.data[1].datapoints[0][0]).to.be(88);
  105. expect(result.data[1].datapoints[1][0]).to.be(99);
  106. });
  107. });
  108. describe('single group by query', function() {
  109. var result;
  110. beforeEach(function() {
  111. result = ctx.ds._processTimeSeries([{
  112. refId: 'A',
  113. metrics: [{type: 'count', id: '1'}],
  114. bucketAggs: [{type: 'terms', field: 'host', id: '2'}, {type: 'date_histogram', field: '@timestamp', id: '3'}],
  115. }], {
  116. responses: [{
  117. aggregations: {
  118. "2": {
  119. buckets: [
  120. {
  121. "3": {
  122. buckets: [
  123. {doc_count: 1, key: 1000},
  124. {doc_count: 3, key: 2000}
  125. ]
  126. },
  127. doc_count: 4,
  128. key: 'server1',
  129. },
  130. {
  131. "3": {
  132. buckets: [
  133. {doc_count: 2, key: 1000},
  134. {doc_count: 8, key: 2000}
  135. ]
  136. },
  137. doc_count: 10,
  138. key: 'server2',
  139. },
  140. ]
  141. }
  142. }
  143. }]
  144. });
  145. });
  146. it('should return 2 series', function() {
  147. expect(result.data.length).to.be(2);
  148. expect(result.data[0].datapoints.length).to.be(2);
  149. expect(result.data[0].target).to.be('A server1 count');
  150. expect(result.data[1].target).to.be('A server2 count');
  151. });
  152. });
  153. describe('with percentiles ', function() {
  154. var result;
  155. beforeEach(function() {
  156. result = ctx.ds._processTimeSeries([{
  157. refId: 'A',
  158. metrics: [{type: 'percentiles', settings: {percents: [75, 90]}, id: '1'}],
  159. bucketAggs: [{type: 'date_histogram', field: '@timestamp', id: '3'}],
  160. }], {
  161. responses: [{
  162. aggregations: {
  163. "3": {
  164. buckets: [
  165. {
  166. "1": {values: {"75": 3.3, "90": 5.5}},
  167. doc_count: 10,
  168. key: 1000
  169. },
  170. {
  171. "1": {values: {"75": 2.3, "90": 4.5}},
  172. doc_count: 15,
  173. key: 2000
  174. }
  175. ]
  176. }
  177. }
  178. }]
  179. });
  180. });
  181. it('should return 2 series', function() {
  182. expect(result.data.length).to.be(2);
  183. expect(result.data[0].datapoints.length).to.be(2);
  184. expect(result.data[0].target).to.be('A 75');
  185. expect(result.data[1].target).to.be('A 90');
  186. expect(result.data[0].datapoints[0][0]).to.be(3.3);
  187. expect(result.data[0].datapoints[0][1]).to.be(1000);
  188. expect(result.data[1].datapoints[1][0]).to.be(4.5);
  189. });
  190. });
  191. });
  192. });
  193. });