Commit 1076b75a by Alin Sinpalean Committed by Torkel Ödegaard

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.
parent b1506a2b
......@@ -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) {
......
......@@ -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() {
......
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