Commit beced6f3 by Daniel Lee

graph: Handle data with zeroes for log scale

fixes #8446. Data with all values equal to zero, creates a max with the
value of Infinite. The for loop for creating ticks then gets stuck in an
infinite loop. This fix resets min and max and creates some fake ticks
for the y-axis if the min and max are not finite numbers.
parent 0d39852e
...@@ -555,12 +555,19 @@ coreModule.directive('grafanaGraph', function($rootScope, timeSrv, popoverSrv) { ...@@ -555,12 +555,19 @@ coreModule.directive('grafanaGraph', function($rootScope, timeSrv, popoverSrv) {
return; return;
} }
if (Number.isFinite(min) && Number.isFinite(max)) {
axis.ticks = []; axis.ticks = [];
var nextTick; var nextTick;
for (nextTick = min; nextTick <= max; nextTick *= axis.logBase) { for (nextTick = min; nextTick <= max; nextTick *= axis.logBase) {
axis.ticks.push(nextTick); axis.ticks.push(nextTick);
} }
axis.tickDecimals = decimalPlaces(min); axis.tickDecimals = decimalPlaces(min);
} else {
axis.ticks = [1, 2];
delete axis.min;
delete axis.max;
}
} }
function decimalPlaces(num) { function decimalPlaces(num) {
......
...@@ -153,6 +153,29 @@ describe('grafanaGraph', function() { ...@@ -153,6 +153,29 @@ describe('grafanaGraph', function() {
}); });
}); });
graphScenario('when logBase is log 10 and data points contain only zeroes', function(ctx) {
ctx.setup(function(ctrl, data) {
ctrl.panel.yaxes[0].logBase = 10;
data[0] = new TimeSeries({
datapoints: [[0,1],[0,2],[0,3],[0,4]],
alias: 'seriesAutoscale',
});
data[0].yaxis = 1;
});
it('should not set min and max and should create some fake ticks', function() {
var axisAutoscale = ctx.plotOptions.yaxes[0];
expect(axisAutoscale.transform(100)).to.be(2);
expect(axisAutoscale.inverseTransform(-3)).to.be(0.001);
expect(axisAutoscale.min).to.be(undefined);
expect(axisAutoscale.max).to.be(undefined);
expect(axisAutoscale.ticks.length).to.be(2);
expect(axisAutoscale.ticks[0]).to.be(1);
expect(axisAutoscale.ticks[1]).to.be(2);
expect(axisAutoscale.tickDecimals).to.be(undefined);
});
});
graphScenario('dashed lines options', function(ctx) { graphScenario('dashed lines options', function(ctx) {
ctx.setup(function(ctrl) { ctx.setup(function(ctrl) {
ctrl.panel.lines = true; ctrl.panel.lines = true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment