2021-10-29 15:49:45 +02:00
|
|
|
import produce from 'immer';
|
2022-04-22 14:33:13 +01:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
import InfluxSeries from '../influx_series';
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('when generating timeseries from influxdb response', () => {
|
|
|
|
|
describe('given multiple fields for series', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const options = {
|
2017-12-20 12:33:33 +01:00
|
|
|
alias: '',
|
2015-09-28 15:51:02 +02:00
|
|
|
series: [
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'cpu',
|
|
|
|
|
tags: { app: 'test', server: 'server1' },
|
|
|
|
|
columns: ['time', 'mean', 'max', 'min'],
|
2019-11-19 13:59:39 +00:00
|
|
|
values: [
|
|
|
|
|
[1431946625000, 10, 11, 9],
|
|
|
|
|
[1431946626000, 20, 21, 19],
|
|
|
|
|
],
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
|
|
|
|
],
|
2015-09-28 15:51:02 +02:00
|
|
|
};
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('and no alias', () => {
|
|
|
|
|
it('should generate multiple datapoints for each column', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(result.length).toBe(3);
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[0].target).toBe('cpu.mean {app: test, server: server1}');
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(result[0].datapoints[0][0]).toBe(10);
|
|
|
|
|
expect(result[0].datapoints[0][1]).toBe(1431946625000);
|
|
|
|
|
expect(result[0].datapoints[1][0]).toBe(20);
|
|
|
|
|
expect(result[0].datapoints[1][1]).toBe(1431946626000);
|
|
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[1].target).toBe('cpu.max {app: test, server: server1}');
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(result[1].datapoints[0][0]).toBe(11);
|
|
|
|
|
expect(result[1].datapoints[0][1]).toBe(1431946625000);
|
|
|
|
|
expect(result[1].datapoints[1][0]).toBe(21);
|
|
|
|
|
expect(result[1].datapoints[1][1]).toBe(1431946626000);
|
|
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[2].target).toBe('cpu.min {app: test, server: server1}');
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(result[2].datapoints[0][0]).toBe(9);
|
|
|
|
|
expect(result[2].datapoints[0][1]).toBe(1431946625000);
|
|
|
|
|
expect(result[2].datapoints[1][0]).toBe(19);
|
|
|
|
|
expect(result[2].datapoints[1][1]).toBe(1431946626000);
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('and simple alias', () => {
|
|
|
|
|
it('should use alias', () => {
|
2017-12-20 12:33:33 +01:00
|
|
|
options.alias = 'new series';
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[0].target).toBe('new series');
|
|
|
|
|
expect(result[1].target).toBe('new series');
|
|
|
|
|
expect(result[2].target).toBe('new series');
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('and alias patterns', () => {
|
|
|
|
|
it('should replace patterns', () => {
|
2017-12-20 12:33:33 +01:00
|
|
|
options.alias = 'alias: $m -> $tag_server ([[measurement]])';
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[0].target).toBe('alias: cpu -> server1 (cpu)');
|
|
|
|
|
expect(result[1].target).toBe('alias: cpu -> server1 (cpu)');
|
|
|
|
|
expect(result[2].target).toBe('alias: cpu -> server1 (cpu)');
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
2016-12-12 14:55:39 +01:00
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('given measurement with default fieldname', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const options = {
|
2017-12-19 16:06:54 +01:00
|
|
|
series: [
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'cpu',
|
|
|
|
|
tags: { app: 'test', server: 'server1' },
|
|
|
|
|
columns: ['time', 'value'],
|
2019-11-19 13:59:39 +00:00
|
|
|
values: [
|
|
|
|
|
['2015-05-18T10:57:05Z', 10],
|
|
|
|
|
['2015-05-18T10:57:06Z', 12],
|
|
|
|
|
],
|
2017-12-19 16:06:54 +01:00
|
|
|
},
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'cpu',
|
|
|
|
|
tags: { app: 'test2', server: 'server2' },
|
|
|
|
|
columns: ['time', 'value'],
|
2019-11-19 13:59:39 +00:00
|
|
|
values: [
|
|
|
|
|
['2015-05-18T10:57:05Z', 15],
|
|
|
|
|
['2015-05-18T10:57:06Z', 16],
|
|
|
|
|
],
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
|
|
|
|
],
|
2017-12-19 16:06:54 +01:00
|
|
|
};
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('and no alias', () => {
|
|
|
|
|
it('should generate label with no field', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[0].target).toBe('cpu {app: test, server: server1}');
|
|
|
|
|
expect(result[1].target).toBe('cpu {app: test2, server: server2}');
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
2016-12-12 14:55:39 +01:00
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('given two series', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const options = {
|
2017-12-20 12:33:33 +01:00
|
|
|
alias: '',
|
2015-09-28 15:51:02 +02:00
|
|
|
series: [
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'cpu',
|
|
|
|
|
tags: { app: 'test', server: 'server1' },
|
|
|
|
|
columns: ['time', 'mean'],
|
2019-11-19 13:59:39 +00:00
|
|
|
values: [
|
|
|
|
|
[1431946625000, 10],
|
|
|
|
|
[1431946626000, 12],
|
|
|
|
|
],
|
2015-09-28 15:51:02 +02:00
|
|
|
},
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'cpu',
|
|
|
|
|
tags: { app: 'test2', server: 'server2' },
|
|
|
|
|
columns: ['time', 'mean'],
|
2019-11-19 13:59:39 +00:00
|
|
|
values: [
|
|
|
|
|
[1431946625000, 15],
|
|
|
|
|
[1431946626000, 16],
|
|
|
|
|
],
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
|
|
|
|
],
|
2015-09-28 15:51:02 +02:00
|
|
|
};
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('and no alias', () => {
|
|
|
|
|
it('should generate two time series', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(result.length).toBe(2);
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[0].target).toBe('cpu.mean {app: test, server: server1}');
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(result[0].datapoints[0][0]).toBe(10);
|
|
|
|
|
expect(result[0].datapoints[0][1]).toBe(1431946625000);
|
|
|
|
|
expect(result[0].datapoints[1][0]).toBe(12);
|
|
|
|
|
expect(result[0].datapoints[1][1]).toBe(1431946626000);
|
2021-07-14 16:06:53 +02:00
|
|
|
expect(result[0].tags).toMatchObject({
|
|
|
|
|
app: 'test',
|
|
|
|
|
server: 'server1',
|
|
|
|
|
});
|
2017-11-20 14:31:51 +01:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[1].target).toBe('cpu.mean {app: test2, server: server2}');
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(result[1].datapoints[0][0]).toBe(15);
|
|
|
|
|
expect(result[1].datapoints[0][1]).toBe(1431946625000);
|
|
|
|
|
expect(result[1].datapoints[1][0]).toBe(16);
|
|
|
|
|
expect(result[1].datapoints[1][1]).toBe(1431946626000);
|
2021-07-14 16:06:53 +02:00
|
|
|
expect(result[1].tags).toMatchObject({
|
|
|
|
|
app: 'test2',
|
|
|
|
|
server: 'server2',
|
|
|
|
|
});
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('and simple alias', () => {
|
|
|
|
|
it('should use alias', () => {
|
2017-12-20 12:33:33 +01:00
|
|
|
options.alias = 'new series';
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[0].target).toBe('new series');
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('and alias patterns', () => {
|
|
|
|
|
it('should replace patterns', () => {
|
2017-12-20 12:33:33 +01:00
|
|
|
options.alias = 'alias: $m -> $tag_server ([[measurement]])';
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[0].target).toBe('alias: cpu -> server1 (cpu)');
|
|
|
|
|
expect(result[1].target).toBe('alias: cpu -> server2 (cpu)');
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('given measurement with dots', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const options = {
|
2017-12-20 12:33:33 +01:00
|
|
|
alias: '',
|
2015-09-28 15:51:02 +02:00
|
|
|
series: [
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'app.prod.server1.count',
|
2017-12-19 16:06:54 +01:00
|
|
|
tags: {},
|
2017-12-20 12:33:33 +01:00
|
|
|
columns: ['time', 'mean'],
|
2019-11-19 13:59:39 +00:00
|
|
|
values: [
|
|
|
|
|
[1431946625000, 10],
|
|
|
|
|
[1431946626000, 12],
|
|
|
|
|
],
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
|
|
|
|
],
|
2015-09-28 15:51:02 +02:00
|
|
|
};
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
it('should replace patterns', () => {
|
2017-12-20 12:33:33 +01:00
|
|
|
options.alias = 'alias: $1 -> [[3]]';
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
2015-09-28 15:51:02 +02:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(result[0].target).toBe('alias: prod -> count');
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
2021-11-11 14:38:54 +01:00
|
|
|
|
|
|
|
|
it('should handle too large indexes', () => {
|
|
|
|
|
options.alias = 'alias: $0 $1 $2 $3 $4 $5';
|
|
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const result = series.getTimeSeries();
|
|
|
|
|
|
|
|
|
|
expect(result[0].target).toBe('alias: app prod server1 count $4 $5');
|
|
|
|
|
});
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('given table response', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const options = {
|
2017-12-20 12:33:33 +01:00
|
|
|
alias: '',
|
2015-12-03 15:09:39 +01:00
|
|
|
series: [
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'app.prod.server1.count',
|
|
|
|
|
tags: { datacenter: 'Africa', server: 'server2' },
|
|
|
|
|
columns: ['time', 'value2', 'value'],
|
2019-11-19 13:59:39 +00:00
|
|
|
values: [
|
|
|
|
|
[1431946625000, 23, 10],
|
|
|
|
|
[1431946626000, 25, 12],
|
|
|
|
|
],
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
|
|
|
|
],
|
2015-12-03 15:09:39 +01:00
|
|
|
};
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
it('should return table', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const table = series.getTable();
|
2015-12-03 15:09:39 +01:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(table.type).toBe('table');
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(table.columns.length).toBe(5);
|
2018-04-05 20:53:22 +02:00
|
|
|
expect(table.columns[0].text).toEqual('Time');
|
2017-12-21 08:39:31 +01:00
|
|
|
expect(table.rows[0]).toEqual([1431946625000, 'Africa', 'server2', 23, 10]);
|
2015-12-03 15:09:39 +01:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('given table response from SHOW CARDINALITY', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const options = {
|
2018-04-05 20:53:22 +02:00
|
|
|
alias: '',
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
name: 'cpu',
|
|
|
|
|
columns: ['count'],
|
|
|
|
|
values: [[37]],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
it('should return table', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const table = series.getTable();
|
2018-04-05 20:53:22 +02:00
|
|
|
|
|
|
|
|
expect(table.type).toBe('table');
|
|
|
|
|
expect(table.columns.length).toBe(1);
|
|
|
|
|
expect(table.columns[0].text).toEqual('count');
|
|
|
|
|
expect(table.rows[0]).toEqual([37]);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('given annotation response', () => {
|
|
|
|
|
describe('with empty tagsColumn', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const options = {
|
2017-12-20 12:33:33 +01:00
|
|
|
alias: '',
|
2016-12-15 10:54:22 +01:00
|
|
|
annotation: {},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'logins.count',
|
|
|
|
|
tags: { datacenter: 'Africa', server: 'server2' },
|
|
|
|
|
columns: ['time', 'datacenter', 'hostname', 'source', 'value'],
|
2017-12-21 08:39:31 +01:00
|
|
|
values: [[1481549440372, 'America', '10.1.100.10', 'backend', 215.7432653659507]],
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
|
|
|
|
],
|
2016-12-15 10:54:22 +01:00
|
|
|
};
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
it('should multiple tags', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const annotations = series.getAnnotations();
|
2016-12-12 14:55:39 +01:00
|
|
|
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(annotations[0].tags.length).toBe(0);
|
2016-12-15 10:54:22 +01:00
|
|
|
});
|
|
|
|
|
});
|
2016-12-12 14:55:39 +01:00
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
describe('given annotation response', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const options = {
|
2017-12-20 12:33:33 +01:00
|
|
|
alias: '',
|
2016-12-15 10:54:22 +01:00
|
|
|
annotation: {
|
2017-12-20 12:33:33 +01:00
|
|
|
tagsColumn: 'datacenter, source',
|
2016-12-15 10:54:22 +01:00
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
2017-12-20 12:33:33 +01:00
|
|
|
name: 'logins.count',
|
|
|
|
|
tags: { datacenter: 'Africa', server: 'server2' },
|
|
|
|
|
columns: ['time', 'datacenter', 'hostname', 'source', 'value'],
|
2017-12-21 08:39:31 +01:00
|
|
|
values: [[1481549440372, 'America', '10.1.100.10', 'backend', 215.7432653659507]],
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
|
|
|
|
],
|
2016-12-15 10:54:22 +01:00
|
|
|
};
|
|
|
|
|
|
2018-09-04 15:55:41 +02:00
|
|
|
it('should multiple tags', () => {
|
2018-08-26 18:43:07 +02:00
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const annotations = series.getAnnotations();
|
2016-12-15 10:54:22 +01:00
|
|
|
|
2017-11-20 14:31:51 +01:00
|
|
|
expect(annotations[0].tags.length).toBe(2);
|
2017-12-20 12:33:33 +01:00
|
|
|
expect(annotations[0].tags[0]).toBe('America');
|
|
|
|
|
expect(annotations[0].tags[1]).toBe('backend');
|
2016-12-15 10:54:22 +01:00
|
|
|
});
|
2016-12-12 14:55:39 +01:00
|
|
|
});
|
2021-10-29 15:49:45 +02:00
|
|
|
|
|
|
|
|
describe('given a time-column in the json-response', () => {
|
|
|
|
|
const options = {
|
|
|
|
|
alias: '',
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
name: 'cpu',
|
|
|
|
|
tags: { cpu: 'cpu1' },
|
|
|
|
|
columns: ['time', 'usage_idle'],
|
|
|
|
|
values: [[1481549440372, 42]],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
it('the column-names should be correct if the time-column is not renamed', () => {
|
|
|
|
|
const series = new InfluxSeries(options);
|
|
|
|
|
const table = series.getTable();
|
|
|
|
|
|
|
|
|
|
expect(table.columns).toStrictEqual([
|
|
|
|
|
{
|
|
|
|
|
text: 'Time',
|
|
|
|
|
type: 'time',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
text: 'cpu',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
text: 'usage_idle',
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
expect(table.rows).toStrictEqual([[1481549440372, 'cpu1', 42]]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('the column-names should be correct if the time-column is renamed', () => {
|
|
|
|
|
const renamedOptions = produce(options, (draft) => {
|
|
|
|
|
// we rename the time-column to `zeit`
|
|
|
|
|
draft.series[0].columns[0] = 'zeit';
|
|
|
|
|
});
|
|
|
|
|
const series = new InfluxSeries(renamedOptions);
|
|
|
|
|
const table = series.getTable();
|
|
|
|
|
|
|
|
|
|
expect(table.columns).toStrictEqual([
|
|
|
|
|
{
|
|
|
|
|
text: 'zeit',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
text: 'cpu',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
text: 'usage_idle',
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
expect(table.rows).toStrictEqual([[1481549440372, 'cpu1', 42]]);
|
|
|
|
|
});
|
|
|
|
|
});
|
2016-12-12 14:55:39 +01:00
|
|
|
});
|
2015-09-28 15:51:02 +02:00
|
|
|
});
|