From 1076b75a2137f678309c33ed800a6731395c145d Mon Sep 17 00:00:00 2001 From: Alin Sinpalean Date: Fri, 8 Sep 2017 10:37:57 +0200 Subject: [PATCH] Fix rounding of intervals (#9197) * Prometheus: Fix actual step computation logic when a min_step is specified and the range is longer than min_step * 11000. * Fix kbn.round_interval for exact intervals. * Remove redundant 1d return, fix a couple of comments. * Be more cautious with values close to 1d not rounding up to 1d. They may, because of the way the calculation uses 2 potentially different current time values. --- public/app/core/utils/kbn.js | 65 ++++++++++++++--------------- public/test/core/utils/kbn_specs.js | 14 +++++++ 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/public/app/core/utils/kbn.js b/public/app/core/utils/kbn.js index 37888fb10ac..97078071e45 100644 --- a/public/app/core/utils/kbn.js +++ b/public/app/core/utils/kbn.js @@ -17,90 +17,87 @@ function($, _) { kbn.round_interval = function(interval) { switch (true) { // 0.015s - case (interval <= 15): + case (interval < 15): return 10; // 0.01s // 0.035s - case (interval <= 35): + case (interval < 35): return 20; // 0.02s // 0.075s - case (interval <= 75): + case (interval < 75): return 50; // 0.05s // 0.15s - case (interval <= 150): + case (interval < 150): return 100; // 0.1s // 0.35s - case (interval <= 350): + case (interval < 350): return 200; // 0.2s // 0.75s - case (interval <= 750): + case (interval < 750): return 500; // 0.5s // 1.5s - case (interval <= 1500): + case (interval < 1500): return 1000; // 1s // 3.5s - case (interval <= 3500): + case (interval < 3500): return 2000; // 2s // 7.5s - case (interval <= 7500): + case (interval < 7500): return 5000; // 5s // 12.5s - case (interval <= 12500): + case (interval < 12500): return 10000; // 10s // 17.5s - case (interval <= 17500): + case (interval < 17500): return 15000; // 15s // 25s - case (interval <= 25000): + case (interval < 25000): return 20000; // 20s // 45s - case (interval <= 45000): + case (interval < 45000): return 30000; // 30s // 1.5m - case (interval <= 90000): + case (interval < 90000): return 60000; // 1m // 3.5m - case (interval <= 210000): + case (interval < 210000): return 120000; // 2m // 7.5m - case (interval <= 450000): + case (interval < 450000): return 300000; // 5m // 12.5m - case (interval <= 750000): + case (interval < 750000): return 600000; // 10m // 12.5m - case (interval <= 1050000): + case (interval < 1050000): return 900000; // 15m // 25m - case (interval <= 1500000): + case (interval < 1500000): return 1200000; // 20m // 45m - case (interval <= 2700000): + case (interval < 2700000): return 1800000; // 30m // 1.5h - case (interval <= 5400000): + case (interval < 5400000): return 3600000; // 1h // 2.5h - case (interval <= 9000000): + case (interval < 9000000): return 7200000; // 2h // 4.5h - case (interval <= 16200000): + case (interval < 16200000): return 10800000; // 3h // 9h - case (interval <= 32400000): + case (interval < 32400000): return 21600000; // 6h - // 24h - case (interval <= 86400000): + // 1d + case (interval < 86400000): return 43200000; // 12h - // 48h - case (interval <= 172800000): - return 86400000; // 24h // 1w - case (interval <= 604800000): - return 86400000; // 24h + case (interval < 604800000): + return 86400000; // 1d // 3w - case (interval <= 1814400000): + case (interval < 1814400000): return 604800000; // 1w - // 2y + // 6w case (interval < 3628800000): return 2592000000; // 30d default: @@ -134,7 +131,7 @@ function($, _) { return nummilliseconds + 'ms'; } - return 'less then a millisecond'; //'just now' //or other string you like; + return 'less than a millisecond'; //'just now' //or other string you like; }; kbn.to_percent = function(number,outof) { diff --git a/public/test/core/utils/kbn_specs.js b/public/test/core/utils/kbn_specs.js index 0b7f4b4f2bc..0e92255792b 100644 --- a/public/test/core/utils/kbn_specs.js +++ b/public/test/core/utils/kbn_specs.js @@ -167,6 +167,20 @@ define([ var res = kbn.calculateInterval(range, 900, '>15ms'); expect(res.interval).to.be('15ms'); }); + + it('1d 1 resolution', function() { + var range = { from: dateMath.parse('now-1d'), to: dateMath.parse('now') }; + var res = kbn.calculateInterval(range, 1, null); + expect(res.interval).to.be('1d'); + expect(res.intervalMs).to.be(86400000); + }); + + it('86399s 1 resolution', function() { + var range = { from: dateMath.parse('now-86390s'), to: dateMath.parse('now') }; + var res = kbn.calculateInterval(range, 1, null); + expect(res.interval).to.be('12h'); + expect(res.intervalMs).to.be(43200000); + }); }); describe('hex', function() {