From e19b48840f61073ce3729676b0a1bdd1976c6ca2 Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Fri, 10 Mar 2017 18:46:36 +0100 Subject: [PATCH] graph: merge fixes for #5278 This is an old PR so had some problems after merging in master. - Fix for min and max that were not getting passed into the applyLogScale function - Fix for when min/max were undefined rather than null - Fix for decimal ticks, as this PR populates the ticks itself then it also needs to calculate the number of decimal places too. Flot was showing the wrong number of decimal places sometimes otherwise on the y-axis. --- public/app/plugins/panel/graph/graph.ts | 29 ++++++++++++------- .../plugins/panel/graph/specs/graph_specs.ts | 9 ++++-- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/public/app/plugins/panel/graph/graph.ts b/public/app/plugins/panel/graph/graph.ts index 69028a9e407..06af66ddbe7 100755 --- a/public/app/plugins/panel/graph/graph.ts +++ b/public/app/plugins/panel/graph/graph.ts @@ -460,7 +460,8 @@ coreModule.directive('grafanaGraph', function($rootScope, timeSrv) { show: panel.yaxes[0].show, index: 1, logBase: panel.yaxes[0].logBase || 1, - max: null + min: panel.yaxes[0].min ? _.toNumber(panel.yaxes[0].min) : null, + max: panel.yaxes[0].max ? _.toNumber(panel.yaxes[0].max) : null, }; options.yaxes.push(defaults); @@ -471,12 +472,13 @@ coreModule.directive('grafanaGraph', function($rootScope, timeSrv) { secondY.show = panel.yaxes[1].show; secondY.logBase = panel.yaxes[1].logBase || 1; secondY.position = 'right'; + secondY.min = panel.yaxes[1].min ? _.toNumber(panel.yaxes[1].min) : null; + secondY.max = panel.yaxes[1].max ? _.toNumber(panel.yaxes[1].max) : null; options.yaxes.push(secondY); applyLogScale(options.yaxes[1], data); configureAxisMode(options.yaxes[1], panel.percentage && panel.stack ? "percent" : panel.yaxes[1].format); } - applyLogScale(options.yaxes[0], data); configureAxisMode(options.yaxes[0], panel.percentage && panel.stack ? "percent" : panel.yaxes[0].format); } @@ -498,10 +500,10 @@ coreModule.directive('grafanaGraph', function($rootScope, timeSrv) { for (i = 0; i < data.length; i++) { series = data[i]; if (series.yaxis === axis.index) { - if (max === null || max < series.stats.max) { + if (!max || max < series.stats.max) { max = series.stats.max; } - if (min === null || min > series.stats.logmin) { + if (!min || min > series.stats.logmin) { min = series.stats.logmin; } } @@ -510,27 +512,27 @@ coreModule.directive('grafanaGraph', function($rootScope, timeSrv) { axis.transform = function(v) { return (v < Number.MIN_VALUE) ? null : Math.log(v) / Math.log(axis.logBase); }; axis.inverseTransform = function (v) { return Math.pow(axis.logBase,v); }; - if (max === null && min === null) { + if (!max && !min) { max = axis.inverseTransform(+2); min = axis.inverseTransform(-2); - } else if (max === null) { + } else if (!max) { max = min*axis.inverseTransform(+4); - } else if (min === null) { + } else if (!min) { min = max*axis.inverseTransform(-4); } - if (axis.min !== null) { + if (axis.min) { min = axis.inverseTransform(Math.ceil(axis.transform(axis.min))); } else { min = axis.min = axis.inverseTransform(Math.floor(axis.transform(min))); } - if (axis.max !== null) { + if (axis.max) { max = axis.inverseTransform(Math.floor(axis.transform(axis.max))); } else { max = axis.max = axis.inverseTransform(Math.ceil(axis.transform(max))); } - if (min < Number.MIN_VALUE || max < Number.MIN_VALUE) { + if (!min || min < Number.MIN_VALUE || !max || max < Number.MIN_VALUE) { return; } @@ -539,6 +541,13 @@ coreModule.directive('grafanaGraph', function($rootScope, timeSrv) { for (nextTick = min; nextTick <= max; nextTick *= axis.logBase) { axis.ticks.push(nextTick); } + axis.tickDecimals = decimalPlaces(min); + } + + function decimalPlaces(num) { + if (!num) { return 0; } + + return (num.toString().split('.')[1] || []).length; } function configureAxisMode(axis, format) { diff --git a/public/app/plugins/panel/graph/specs/graph_specs.ts b/public/app/plugins/panel/graph/specs/graph_specs.ts index fd958a7fe23..0d8c088f704 100644 --- a/public/app/plugins/panel/graph/specs/graph_specs.ts +++ b/public/app/plugins/panel/graph/specs/graph_specs.ts @@ -121,8 +121,8 @@ describe('grafanaGraph', function() { }); data[0].yaxis = 1; ctrl.panel.yaxes[1].logBase = 10; - ctrl.panel.yaxes[1].min = 0.05; - ctrl.panel.yaxes[1].max = 1500; + ctrl.panel.yaxes[1].min = '0.05'; + ctrl.panel.yaxes[1].max = '1500'; data[1] = new TimeSeries({ datapoints: [[2000,1],[0.002,2],[0,3],[-1,4]], alias: 'seriesFixedscale', @@ -139,12 +139,17 @@ describe('grafanaGraph', function() { expect(axisAutoscale.ticks.length).to.be(8); expect(axisAutoscale.ticks[0]).to.be(0.001); expect(axisAutoscale.ticks[7]).to.be(10000); + expect(axisAutoscale.tickDecimals).to.be(3); + + var axisFixedscale = ctx.plotOptions.yaxes[1]; expect(axisFixedscale.min).to.be(0.05); expect(axisFixedscale.max).to.be(1500); expect(axisFixedscale.ticks.length).to.be(5); expect(axisFixedscale.ticks[0]).to.be(0.1); expect(axisFixedscale.ticks[4]).to.be(1000); + expect(axisFixedscale.tickDecimals).to.be(1); + }); });