mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Prometheus: Make result transformer more robust for empty responses
- some prometheus-compatible backends may return `null` instead of empty lists - test for lists before iterating - added tests for empty responses
This commit is contained in:
parent
dbb34020ca
commit
c0c06e4dd8
@ -16,7 +16,7 @@ export class ResultTransformer {
|
|||||||
options.valueWithRefId
|
options.valueWithRefId
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
} else if (options.format === 'heatmap') {
|
} else if (prometheusResult && options.format === 'heatmap') {
|
||||||
let seriesList = [];
|
let seriesList = [];
|
||||||
prometheusResult.sort(sortSeriesByLabel);
|
prometheusResult.sort(sortSeriesByLabel);
|
||||||
for (const metricData of prometheusResult) {
|
for (const metricData of prometheusResult) {
|
||||||
@ -24,7 +24,7 @@ export class ResultTransformer {
|
|||||||
}
|
}
|
||||||
seriesList = this.transformToHistogramOverTime(seriesList);
|
seriesList = this.transformToHistogramOverTime(seriesList);
|
||||||
return seriesList;
|
return seriesList;
|
||||||
} else {
|
} else if (prometheusResult) {
|
||||||
const seriesList = [];
|
const seriesList = [];
|
||||||
for (const metricData of prometheusResult) {
|
for (const metricData of prometheusResult) {
|
||||||
if (response.data.data.resultType === 'matrix') {
|
if (response.data.data.resultType === 'matrix') {
|
||||||
@ -82,7 +82,7 @@ export class ResultTransformer {
|
|||||||
let i, j;
|
let i, j;
|
||||||
const metricLabels = {};
|
const metricLabels = {};
|
||||||
|
|
||||||
if (md.length === 0) {
|
if (!md || md.length === 0) {
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,31 @@ describe('Prometheus Result Transformer', () => {
|
|||||||
ctx.resultTransformer = new ResultTransformer(ctx.templateSrv);
|
ctx.resultTransformer = new ResultTransformer(ctx.templateSrv);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('When nothing is returned', () => {
|
||||||
|
test('should return empty series', () => {
|
||||||
|
const response = {
|
||||||
|
status: 'success',
|
||||||
|
data: {
|
||||||
|
resultType: '',
|
||||||
|
result: null,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const series = ctx.resultTransformer.transform({ data: response }, {});
|
||||||
|
expect(series).toEqual([]);
|
||||||
|
});
|
||||||
|
test('should return empty table', () => {
|
||||||
|
const response = {
|
||||||
|
status: 'success',
|
||||||
|
data: {
|
||||||
|
resultType: '',
|
||||||
|
result: null,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const table = ctx.resultTransformer.transform({ data: response }, { format: 'table' });
|
||||||
|
expect(table).toMatchObject([{ type: 'table', rows: [] }]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('When resultFormat is table', () => {
|
describe('When resultFormat is table', () => {
|
||||||
const response = {
|
const response = {
|
||||||
status: 'success',
|
status: 'success',
|
||||||
|
Loading…
Reference in New Issue
Block a user