mirror of
https://github.com/grafana/grafana.git
synced 2025-02-11 16:15:42 -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
|
||||
),
|
||||
];
|
||||
} else if (options.format === 'heatmap') {
|
||||
} else if (prometheusResult && options.format === 'heatmap') {
|
||||
let seriesList = [];
|
||||
prometheusResult.sort(sortSeriesByLabel);
|
||||
for (const metricData of prometheusResult) {
|
||||
@ -24,7 +24,7 @@ export class ResultTransformer {
|
||||
}
|
||||
seriesList = this.transformToHistogramOverTime(seriesList);
|
||||
return seriesList;
|
||||
} else {
|
||||
} else if (prometheusResult) {
|
||||
const seriesList = [];
|
||||
for (const metricData of prometheusResult) {
|
||||
if (response.data.data.resultType === 'matrix') {
|
||||
@ -82,7 +82,7 @@ export class ResultTransformer {
|
||||
let i, j;
|
||||
const metricLabels = {};
|
||||
|
||||
if (md.length === 0) {
|
||||
if (!md || md.length === 0) {
|
||||
return table;
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,31 @@ describe('Prometheus Result Transformer', () => {
|
||||
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', () => {
|
||||
const response = {
|
||||
status: 'success',
|
||||
|
Loading…
Reference in New Issue
Block a user