influx_series.test.ts 8.7 KB

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