|
@@ -9,8 +9,8 @@ import {
|
|
|
prometheusSpecialRegexEscape,
|
|
prometheusSpecialRegexEscape,
|
|
|
} from '../datasource';
|
|
} from '../datasource';
|
|
|
import { dateTime } from '@grafana/data';
|
|
import { dateTime } from '@grafana/data';
|
|
|
-import { DataSourceInstanceSettings, DataQueryResponseData } from '@grafana/ui';
|
|
|
|
|
-import { PromOptions } from '../types';
|
|
|
|
|
|
|
+import { DataSourceInstanceSettings, DataQueryResponseData, DataQueryRequest } from '@grafana/ui';
|
|
|
|
|
+import { PromOptions, PromQuery, PromContext } from '../types';
|
|
|
import { TemplateSrv } from 'app/features/templating/template_srv';
|
|
import { TemplateSrv } from 'app/features/templating/template_srv';
|
|
|
import { TimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
|
import { TimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
|
|
import { CustomVariable } from 'app/features/templating/custom_variable';
|
|
import { CustomVariable } from 'app/features/templating/custom_variable';
|
|
@@ -179,8 +179,8 @@ describe('PrometheusDatasource', () => {
|
|
|
},
|
|
},
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
- ctx.ds.performTimeSeriesQuery = jest.fn().mockReturnValue(responseMock);
|
|
|
|
|
- return ctx.ds.query(ctx.query).then((result: any) => {
|
|
|
|
|
|
|
+ ctx.ds.performTimeSeriesQuery = jest.fn().mockReturnValue([responseMock]);
|
|
|
|
|
+ ctx.ds.query(ctx.query).subscribe((result: any) => {
|
|
|
const results = result.data;
|
|
const results = result.data;
|
|
|
return expect(results).toMatchObject(expected);
|
|
return expect(results).toMatchObject(expected);
|
|
|
});
|
|
});
|
|
@@ -209,8 +209,8 @@ describe('PrometheusDatasource', () => {
|
|
|
|
|
|
|
|
const expected = ['1', '2', '4', '+Inf'];
|
|
const expected = ['1', '2', '4', '+Inf'];
|
|
|
|
|
|
|
|
- ctx.ds.performTimeSeriesQuery = jest.fn().mockReturnValue(responseMock);
|
|
|
|
|
- return ctx.ds.query(ctx.query).then((result: any) => {
|
|
|
|
|
|
|
+ ctx.ds.performTimeSeriesQuery = jest.fn().mockReturnValue([responseMock]);
|
|
|
|
|
+ ctx.ds.query(ctx.query).subscribe((result: any) => {
|
|
|
const seriesLabels = _.map(result.data, 'target');
|
|
const seriesLabels = _.map(result.data, 'target');
|
|
|
return expect(seriesLabels).toEqual(expected);
|
|
return expect(seriesLabels).toEqual(expected);
|
|
|
});
|
|
});
|
|
@@ -469,7 +469,7 @@ describe('PrometheusDatasource', () => {
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
|
|
|
|
|
- await ctx.ds.query(query).then((data: any) => {
|
|
|
|
|
|
|
+ ctx.ds.query(query).subscribe((data: any) => {
|
|
|
results = data;
|
|
results = data;
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
@@ -503,18 +503,14 @@ describe('PrometheusDatasource', () => {
|
|
|
},
|
|
},
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- beforeEach(async () => {
|
|
|
|
|
|
|
+ it('should generate an error', () => {
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.reject(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.reject(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
-
|
|
|
|
|
- await ctx.ds.query(query).catch((e: any) => {
|
|
|
|
|
|
|
+ ctx.ds.query(query).subscribe((e: any) => {
|
|
|
results = e.message;
|
|
results = e.message;
|
|
|
|
|
+ expect(results).toBe(`"${errMessage}"`);
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- it('should generate an error', () => {
|
|
|
|
|
- expect(results).toBe(`"${errMessage}"`);
|
|
|
|
|
- });
|
|
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -553,7 +549,7 @@ describe('PrometheusDatasource', () => {
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
|
|
|
|
|
- await ctx.ds.query(query).then((data: any) => {
|
|
|
|
|
|
|
+ ctx.ds.query(query).subscribe((data: any) => {
|
|
|
results = data;
|
|
results = data;
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
@@ -614,8 +610,7 @@ describe('PrometheusDatasource', () => {
|
|
|
|
|
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
-
|
|
|
|
|
- await ctx.ds.query(query).then((data: any) => {
|
|
|
|
|
|
|
+ ctx.ds.query(query).subscribe((data: any) => {
|
|
|
results = data;
|
|
results = data;
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
@@ -816,7 +811,7 @@ describe('PrometheusDatasource', () => {
|
|
|
|
|
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query).then((data: any) => {
|
|
|
|
|
|
|
+ ctx.ds.query(query).subscribe((data: any) => {
|
|
|
results = data;
|
|
results = data;
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
@@ -853,7 +848,7 @@ describe('PrometheusDatasource', () => {
|
|
|
|
|
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -869,7 +864,7 @@ describe('PrometheusDatasource', () => {
|
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test&start=60&end=420&step=1';
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test&start=60&end=420&step=1';
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -890,7 +885,7 @@ describe('PrometheusDatasource', () => {
|
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test&start=60&end=420&step=10';
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test&start=60&end=420&step=10';
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -907,7 +902,7 @@ describe('PrometheusDatasource', () => {
|
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test&start=' + start + '&end=' + end + '&step=2';
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test&start=' + start + '&end=' + end + '&step=2';
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -929,7 +924,7 @@ describe('PrometheusDatasource', () => {
|
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test&start=50&end=400&step=50';
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test&start=50&end=400&step=50';
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -950,7 +945,7 @@ describe('PrometheusDatasource', () => {
|
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test' + '&start=60&end=420&step=15';
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test' + '&start=60&end=420&step=15';
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -972,7 +967,7 @@ describe('PrometheusDatasource', () => {
|
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test' + '&start=0&end=400&step=100';
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test' + '&start=0&end=400&step=100';
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -994,7 +989,7 @@ describe('PrometheusDatasource', () => {
|
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test' + '&start=' + start + '&end=' + end + '&step=100';
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test' + '&start=' + start + '&end=' + end + '&step=100';
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -1016,7 +1011,7 @@ describe('PrometheusDatasource', () => {
|
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test' + '&start=' + start + '&end=' + end + '&step=60';
|
|
const urlExpected = 'proxied/api/v1/query_range?query=test' + '&start=' + start + '&end=' + end + '&step=60';
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -1059,7 +1054,7 @@ describe('PrometheusDatasource', () => {
|
|
|
templateSrv.replace = jest.fn(str => str);
|
|
templateSrv.replace = jest.fn(str => str);
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -1099,7 +1094,7 @@ describe('PrometheusDatasource', () => {
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
templateSrv.replace = jest.fn(str => str);
|
|
templateSrv.replace = jest.fn(str => str);
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -1140,7 +1135,7 @@ describe('PrometheusDatasource', () => {
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
templateSrv.replace = jest.fn(str => str);
|
|
templateSrv.replace = jest.fn(str => str);
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -1187,7 +1182,7 @@ describe('PrometheusDatasource', () => {
|
|
|
templateSrv.replace = jest.fn(str => str);
|
|
templateSrv.replace = jest.fn(str => str);
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -1228,7 +1223,7 @@ describe('PrometheusDatasource', () => {
|
|
|
|
|
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -1274,7 +1269,7 @@ describe('PrometheusDatasource', () => {
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
templateSrv.replace = jest.fn(str => str);
|
|
templateSrv.replace = jest.fn(str => str);
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.method).toBe('GET');
|
|
expect(res.method).toBe('GET');
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
@@ -1326,7 +1321,7 @@ describe('PrometheusDatasource', () => {
|
|
|
templateSrv.replace = jest.fn(str => str);
|
|
templateSrv.replace = jest.fn(str => str);
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query);
|
|
|
|
|
|
|
+ ctx.ds.query(query);
|
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
const res = backendSrv.datasourceRequest.mock.calls[0][0];
|
|
|
expect(res.url).toBe(urlExpected);
|
|
expect(res.url).toBe(urlExpected);
|
|
|
|
|
|
|
@@ -1391,7 +1386,7 @@ describe('PrometheusDatasource for POST', () => {
|
|
|
};
|
|
};
|
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
|
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
- await ctx.ds.query(query).then((data: any) => {
|
|
|
|
|
|
|
+ ctx.ds.query(query).subscribe((data: any) => {
|
|
|
results = data;
|
|
results = data;
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
@@ -1432,3 +1427,211 @@ describe('PrometheusDatasource for POST', () => {
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+const getPrepareTargetsContext = (target: PromQuery) => {
|
|
|
|
|
+ const instanceSettings = ({
|
|
|
|
|
+ url: 'proxied',
|
|
|
|
|
+ directUrl: 'direct',
|
|
|
|
|
+ user: 'test',
|
|
|
|
|
+ password: 'mupp',
|
|
|
|
|
+ jsonData: { httpMethod: 'POST' },
|
|
|
|
|
+ } as unknown) as DataSourceInstanceSettings<PromOptions>;
|
|
|
|
|
+ const start = 0;
|
|
|
|
|
+ const end = 1;
|
|
|
|
|
+ const panelId = '2';
|
|
|
|
|
+ const options = ({ targets: [target], interval: '1s', panelId } as any) as DataQueryRequest<PromQuery>;
|
|
|
|
|
+
|
|
|
|
|
+ const ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any);
|
|
|
|
|
+ const { queries, activeTargets } = ds.prepareTargets(options, start, end);
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ queries,
|
|
|
|
|
+ activeTargets,
|
|
|
|
|
+ start,
|
|
|
|
|
+ end,
|
|
|
|
|
+ panelId,
|
|
|
|
|
+ };
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+describe('prepareTargets', () => {
|
|
|
|
|
+ describe('when run from a Panel', () => {
|
|
|
|
|
+ it('then it should just add targets', () => {
|
|
|
|
|
+ const target: PromQuery = {
|
|
|
|
|
+ refId: 'A',
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ context: PromContext.Panel,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const { queries, activeTargets, panelId, end, start } = getPrepareTargetsContext(target);
|
|
|
|
|
+
|
|
|
|
|
+ expect(queries.length).toBe(1);
|
|
|
|
|
+ expect(activeTargets.length).toBe(1);
|
|
|
|
|
+ expect(queries[0]).toEqual({
|
|
|
|
|
+ end,
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ headers: {
|
|
|
|
|
+ 'X-Dashboard-Id': undefined,
|
|
|
|
|
+ 'X-Panel-Id': panelId,
|
|
|
|
|
+ },
|
|
|
|
|
+ hinting: undefined,
|
|
|
|
|
+ instant: undefined,
|
|
|
|
|
+ refId: target.refId,
|
|
|
|
|
+ requestId: panelId + target.refId,
|
|
|
|
|
+ start,
|
|
|
|
|
+ step: 1,
|
|
|
|
|
+ });
|
|
|
|
|
+ expect(activeTargets[0]).toEqual(target);
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ describe('when run from Explore', () => {
|
|
|
|
|
+ describe('and both Graph and Table are shown', () => {
|
|
|
|
|
+ it('then it should return both instant and time series related objects', () => {
|
|
|
|
|
+ const target: PromQuery = {
|
|
|
|
|
+ refId: 'A',
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ context: PromContext.Explore,
|
|
|
|
|
+ showingGraph: true,
|
|
|
|
|
+ showingTable: true,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const { queries, activeTargets, panelId, end, start } = getPrepareTargetsContext(target);
|
|
|
|
|
+
|
|
|
|
|
+ expect(queries.length).toBe(2);
|
|
|
|
|
+ expect(activeTargets.length).toBe(2);
|
|
|
|
|
+ expect(queries[0]).toEqual({
|
|
|
|
|
+ end,
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ headers: {
|
|
|
|
|
+ 'X-Dashboard-Id': undefined,
|
|
|
|
|
+ 'X-Panel-Id': panelId,
|
|
|
|
|
+ },
|
|
|
|
|
+ hinting: undefined,
|
|
|
|
|
+ instant: true,
|
|
|
|
|
+ refId: target.refId,
|
|
|
|
|
+ requestId: panelId + target.refId + '_instant',
|
|
|
|
|
+ start,
|
|
|
|
|
+ step: 1,
|
|
|
|
|
+ });
|
|
|
|
|
+ expect(activeTargets[0]).toEqual({
|
|
|
|
|
+ ...target,
|
|
|
|
|
+ format: 'table',
|
|
|
|
|
+ instant: true,
|
|
|
|
|
+ requestId: panelId + target.refId + '_instant',
|
|
|
|
|
+ valueWithRefId: true,
|
|
|
|
|
+ });
|
|
|
|
|
+ expect(queries[1]).toEqual({
|
|
|
|
|
+ end,
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ headers: {
|
|
|
|
|
+ 'X-Dashboard-Id': undefined,
|
|
|
|
|
+ 'X-Panel-Id': panelId,
|
|
|
|
|
+ },
|
|
|
|
|
+ hinting: undefined,
|
|
|
|
|
+ instant: false,
|
|
|
|
|
+ refId: target.refId,
|
|
|
|
|
+ requestId: panelId + target.refId,
|
|
|
|
|
+ start,
|
|
|
|
|
+ step: 1,
|
|
|
|
|
+ });
|
|
|
|
|
+ expect(activeTargets[1]).toEqual({
|
|
|
|
|
+ ...target,
|
|
|
|
|
+ format: 'time_series',
|
|
|
|
|
+ instant: false,
|
|
|
|
|
+ requestId: panelId + target.refId,
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ describe('and both Graph and Table are hidden', () => {
|
|
|
|
|
+ it('then it should return empty arrays', () => {
|
|
|
|
|
+ const target: PromQuery = {
|
|
|
|
|
+ refId: 'A',
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ context: PromContext.Explore,
|
|
|
|
|
+ showingGraph: false,
|
|
|
|
|
+ showingTable: false,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const { queries, activeTargets } = getPrepareTargetsContext(target);
|
|
|
|
|
+
|
|
|
|
|
+ expect(queries.length).toBe(0);
|
|
|
|
|
+ expect(activeTargets.length).toBe(0);
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ describe('and Graph is hidden', () => {
|
|
|
|
|
+ it('then it should return only intant related objects', () => {
|
|
|
|
|
+ const target: PromQuery = {
|
|
|
|
|
+ refId: 'A',
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ context: PromContext.Explore,
|
|
|
|
|
+ showingGraph: false,
|
|
|
|
|
+ showingTable: true,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const { queries, activeTargets, panelId, end, start } = getPrepareTargetsContext(target);
|
|
|
|
|
+
|
|
|
|
|
+ expect(queries.length).toBe(1);
|
|
|
|
|
+ expect(activeTargets.length).toBe(1);
|
|
|
|
|
+ expect(queries[0]).toEqual({
|
|
|
|
|
+ end,
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ headers: {
|
|
|
|
|
+ 'X-Dashboard-Id': undefined,
|
|
|
|
|
+ 'X-Panel-Id': panelId,
|
|
|
|
|
+ },
|
|
|
|
|
+ hinting: undefined,
|
|
|
|
|
+ instant: true,
|
|
|
|
|
+ refId: target.refId,
|
|
|
|
|
+ requestId: panelId + target.refId + '_instant',
|
|
|
|
|
+ start,
|
|
|
|
|
+ step: 1,
|
|
|
|
|
+ });
|
|
|
|
|
+ expect(activeTargets[0]).toEqual({
|
|
|
|
|
+ ...target,
|
|
|
|
|
+ format: 'table',
|
|
|
|
|
+ instant: true,
|
|
|
|
|
+ requestId: panelId + target.refId + '_instant',
|
|
|
|
|
+ valueWithRefId: true,
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ describe('and Table is hidden', () => {
|
|
|
|
|
+ it('then it should return only time series related objects', () => {
|
|
|
|
|
+ const target: PromQuery = {
|
|
|
|
|
+ refId: 'A',
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ context: PromContext.Explore,
|
|
|
|
|
+ showingGraph: true,
|
|
|
|
|
+ showingTable: false,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const { queries, activeTargets, panelId, end, start } = getPrepareTargetsContext(target);
|
|
|
|
|
+
|
|
|
|
|
+ expect(queries.length).toBe(1);
|
|
|
|
|
+ expect(activeTargets.length).toBe(1);
|
|
|
|
|
+ expect(queries[0]).toEqual({
|
|
|
|
|
+ end,
|
|
|
|
|
+ expr: 'up',
|
|
|
|
|
+ headers: {
|
|
|
|
|
+ 'X-Dashboard-Id': undefined,
|
|
|
|
|
+ 'X-Panel-Id': panelId,
|
|
|
|
|
+ },
|
|
|
|
|
+ hinting: undefined,
|
|
|
|
|
+ instant: false,
|
|
|
|
|
+ refId: target.refId,
|
|
|
|
|
+ requestId: panelId + target.refId,
|
|
|
|
|
+ start,
|
|
|
|
|
+ step: 1,
|
|
|
|
|
+ });
|
|
|
|
|
+ expect(activeTargets[0]).toEqual({
|
|
|
|
|
+ ...target,
|
|
|
|
|
+ format: 'time_series',
|
|
|
|
|
+ instant: false,
|
|
|
|
|
+ requestId: panelId + target.refId,
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+});
|