influx_series.jest.ts 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. import InfluxSeries from '../influx_series';
  2. describe('when generating timeseries from influxdb response', function() {
  3. describe('given multiple fields for series', function() {
  4. var options = {
  5. alias: '',
  6. series: [
  7. {
  8. name: 'cpu',
  9. tags: {app: 'test', server: 'server1'},
  10. columns: ['time', 'mean', 'max', 'min'],
  11. values: [[1431946625000, 10, 11, 9], [1431946626000, 20, 21, 19]]
  12. }
  13. ]
  14. };
  15. describe('and no alias', function() {
  16. it('should generate multiple datapoints for each column', function() {
  17. var series = new InfluxSeries(options);
  18. var result = series.getTimeSeries();
  19. expect(result.length).toBe(3);
  20. expect(result[0].target).toBe('cpu.mean {app: test, server: server1}');
  21. expect(result[0].datapoints[0][0]).toBe(10);
  22. expect(result[0].datapoints[0][1]).toBe(1431946625000);
  23. expect(result[0].datapoints[1][0]).toBe(20);
  24. expect(result[0].datapoints[1][1]).toBe(1431946626000);
  25. expect(result[1].target).toBe('cpu.max {app: test, server: server1}');
  26. expect(result[1].datapoints[0][0]).toBe(11);
  27. expect(result[1].datapoints[0][1]).toBe(1431946625000);
  28. expect(result[1].datapoints[1][0]).toBe(21);
  29. expect(result[1].datapoints[1][1]).toBe(1431946626000);
  30. expect(result[2].target).toBe('cpu.min {app: test, server: server1}');
  31. expect(result[2].datapoints[0][0]).toBe(9);
  32. expect(result[2].datapoints[0][1]).toBe(1431946625000);
  33. expect(result[2].datapoints[1][0]).toBe(19);
  34. expect(result[2].datapoints[1][1]).toBe(1431946626000);
  35. });
  36. });
  37. describe('and simple alias', function() {
  38. it('should use alias', function() {
  39. options.alias = 'new series';
  40. var series = new InfluxSeries(options);
  41. var result = series.getTimeSeries();
  42. expect(result[0].target).toBe('new series');
  43. expect(result[1].target).toBe('new series');
  44. expect(result[2].target).toBe('new series');
  45. });
  46. });
  47. describe('and alias patterns', function() {
  48. it('should replace patterns', function() {
  49. options.alias = 'alias: $m -> $tag_server ([[measurement]])';
  50. var series = new InfluxSeries(options);
  51. var result = series.getTimeSeries();
  52. expect(result[0].target).toBe('alias: cpu -> server1 (cpu)');
  53. expect(result[1].target).toBe('alias: cpu -> server1 (cpu)');
  54. expect(result[2].target).toBe('alias: cpu -> server1 (cpu)');
  55. });
  56. });
  57. });
  58. describe('given measurement with default fieldname', function() {
  59. var options = { series: [
  60. {
  61. name: 'cpu',
  62. tags: {app: 'test', server: 'server1'},
  63. columns: ['time', 'value'],
  64. values: [["2015-05-18T10:57:05Z", 10], ["2015-05-18T10:57:06Z", 12]]
  65. },
  66. {
  67. name: 'cpu',
  68. tags: {app: 'test2', server: 'server2'},
  69. columns: ['time', 'value'],
  70. values: [["2015-05-18T10:57:05Z", 15], ["2015-05-18T10:57:06Z", 16]]
  71. }
  72. ]};
  73. describe('and no alias', function() {
  74. it('should generate label with no field', function() {
  75. var series = new InfluxSeries(options);
  76. var result = series.getTimeSeries();
  77. expect(result[0].target).toBe('cpu {app: test, server: server1}');
  78. expect(result[1].target).toBe('cpu {app: test2, server: server2}');
  79. });
  80. });
  81. });
  82. describe('given two series', function() {
  83. var options = {
  84. alias: '',
  85. series: [
  86. {
  87. name: 'cpu',
  88. tags: {app: 'test', server: 'server1'},
  89. columns: ['time', 'mean'],
  90. values: [[1431946625000, 10], [1431946626000, 12]]
  91. },
  92. {
  93. name: 'cpu',
  94. tags: {app: 'test2', server: 'server2'},
  95. columns: ['time', 'mean'],
  96. values: [[1431946625000, 15], [1431946626000, 16]]
  97. }
  98. ]
  99. };
  100. describe('and no alias', function() {
  101. it('should generate two time series', function() {
  102. var series = new InfluxSeries(options);
  103. var result = series.getTimeSeries();
  104. expect(result.length).toBe(2);
  105. expect(result[0].target).toBe('cpu.mean {app: test, server: server1}');
  106. expect(result[0].datapoints[0][0]).toBe(10);
  107. expect(result[0].datapoints[0][1]).toBe(1431946625000);
  108. expect(result[0].datapoints[1][0]).toBe(12);
  109. expect(result[0].datapoints[1][1]).toBe(1431946626000);
  110. expect(result[1].target).toBe('cpu.mean {app: test2, server: server2}');
  111. expect(result[1].datapoints[0][0]).toBe(15);
  112. expect(result[1].datapoints[0][1]).toBe(1431946625000);
  113. expect(result[1].datapoints[1][0]).toBe(16);
  114. expect(result[1].datapoints[1][1]).toBe(1431946626000);
  115. });
  116. });
  117. describe('and simple alias', function() {
  118. it('should use alias', function() {
  119. options.alias = 'new series';
  120. var series = new InfluxSeries(options);
  121. var result = series.getTimeSeries();
  122. expect(result[0].target).toBe('new series');
  123. });
  124. });
  125. describe('and alias patterns', function() {
  126. it('should replace patterns', function() {
  127. options.alias = 'alias: $m -> $tag_server ([[measurement]])';
  128. var series = new InfluxSeries(options);
  129. var result = series.getTimeSeries();
  130. expect(result[0].target).toBe('alias: cpu -> server1 (cpu)');
  131. expect(result[1].target).toBe('alias: cpu -> server2 (cpu)');
  132. });
  133. });
  134. });
  135. describe('given measurement with dots', function() {
  136. var options = {
  137. alias: '',
  138. series: [
  139. {
  140. name: 'app.prod.server1.count',
  141. tags: {},
  142. columns: ['time', 'mean'],
  143. values: [[1431946625000, 10], [1431946626000, 12]]
  144. }
  145. ]
  146. };
  147. it('should replace patterns', function() {
  148. options.alias = 'alias: $1 -> [[3]]';
  149. var series = new InfluxSeries(options);
  150. var result = series.getTimeSeries();
  151. expect(result[0].target).toBe('alias: prod -> count');
  152. });
  153. });
  154. describe('given table response', function() {
  155. var options = {
  156. alias: '',
  157. series: [
  158. {
  159. name: 'app.prod.server1.count',
  160. tags: {datacenter: 'Africa', server: 'server2'},
  161. columns: ['time', 'value2', 'value'],
  162. values: [[1431946625000, 23, 10], [1431946626000, 25, 12]]
  163. }
  164. ]
  165. };
  166. it('should return table', function() {
  167. var series = new InfluxSeries(options);
  168. var table = series.getTable();
  169. expect(table.type).toBe('table');
  170. expect(table.columns.length).toBe(5);
  171. expect(table.rows[0]).toEqual([1431946625000, 'Africa', 'server2', 23, 10]);
  172. });
  173. });
  174. describe('given annotation response', function() {
  175. describe('with empty tagsColumn', function() {
  176. var options = {
  177. alias: '',
  178. annotation: {},
  179. series: [
  180. {
  181. name: "logins.count",
  182. tags: {datacenter: 'Africa', server: 'server2'},
  183. columns: ["time", "datacenter", "hostname", "source", "value"],
  184. values: [
  185. [1481549440372, "America", "10.1.100.10", "backend", 215.7432653659507],
  186. ]
  187. }
  188. ]
  189. };
  190. it('should multiple tags', function() {
  191. var series = new InfluxSeries(options);
  192. var annotations = series.getAnnotations();
  193. expect(annotations[0].tags.length).toBe(0);
  194. });
  195. });
  196. describe('given annotation response', function() {
  197. var options = {
  198. alias: '',
  199. annotation: {
  200. tagsColumn: 'datacenter, source'
  201. },
  202. series: [
  203. {
  204. name: "logins.count",
  205. tags: {datacenter: 'Africa', server: 'server2'},
  206. columns: ["time", "datacenter", "hostname", "source", "value"],
  207. values: [
  208. [1481549440372, "America", "10.1.100.10", "backend", 215.7432653659507],
  209. ]
  210. }
  211. ]
  212. };
  213. it('should multiple tags', function() {
  214. var series = new InfluxSeries(options);
  215. var annotations = series.getAnnotations();
  216. expect(annotations[0].tags.length).toBe(2);
  217. expect(annotations[0].tags[0]).toBe('America');
  218. expect(annotations[0].tags[1]).toBe('backend');
  219. });
  220. });
  221. });
  222. });