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($, _) { ...@@ -17,90 +17,87 @@ function($, _) {
kbn.round_interval = function(interval) { kbn.round_interval = function(interval) {
switch (true) { switch (true) {
// 0.015s // 0.015s
case (interval <= 15): case (interval < 15):
return 10; // 0.01s return 10; // 0.01s
// 0.035s // 0.035s
case (interval <= 35): case (interval < 35):
return 20; // 0.02s return 20; // 0.02s
// 0.075s // 0.075s
case (interval <= 75): case (interval < 75):
return 50; // 0.05s return 50; // 0.05s
// 0.15s // 0.15s
case (interval <= 150): case (interval < 150):
return 100; // 0.1s return 100; // 0.1s
// 0.35s // 0.35s
case (interval <= 350): case (interval < 350):
return 200; // 0.2s return 200; // 0.2s
// 0.75s // 0.75s
case (interval <= 750): case (interval < 750):
return 500; // 0.5s return 500; // 0.5s
// 1.5s // 1.5s
case (interval <= 1500): case (interval < 1500):
return 1000; // 1s return 1000; // 1s
// 3.5s // 3.5s
case (interval <= 3500): case (interval < 3500):
return 2000; // 2s return 2000; // 2s
// 7.5s // 7.5s
case (interval <= 7500): case (interval < 7500):
return 5000; // 5s return 5000; // 5s
// 12.5s // 12.5s
case (interval <= 12500): case (interval < 12500):
return 10000; // 10s return 10000; // 10s
// 17.5s // 17.5s
case (interval <= 17500): case (interval < 17500):
return 15000; // 15s return 15000; // 15s
// 25s // 25s
case (interval <= 25000): case (interval < 25000):
return 20000; // 20s return 20000; // 20s
// 45s // 45s
case (interval <= 45000): case (interval < 45000):
return 30000; // 30s return 30000; // 30s
// 1.5m // 1.5m
case (interval <= 90000): case (interval < 90000):
return 60000; // 1m return 60000; // 1m
// 3.5m // 3.5m
case (interval <= 210000): case (interval < 210000):
return 120000; // 2m return 120000; // 2m
// 7.5m // 7.5m
case (interval <= 450000): case (interval < 450000):
return 300000; // 5m return 300000; // 5m
// 12.5m // 12.5m
case (interval <= 750000): case (interval < 750000):
return 600000; // 10m return 600000; // 10m
// 12.5m // 12.5m
case (interval <= 1050000): case (interval < 1050000):
return 900000; // 15m return 900000; // 15m
// 25m // 25m
case (interval <= 1500000): case (interval < 1500000):
return 1200000; // 20m return 1200000; // 20m
// 45m // 45m
case (interval <= 2700000): case (interval < 2700000):
return 1800000; // 30m return 1800000; // 30m
// 1.5h // 1.5h
case (interval <= 5400000): case (interval < 5400000):
return 3600000; // 1h return 3600000; // 1h
// 2.5h // 2.5h
case (interval <= 9000000): case (interval < 9000000):
return 7200000; // 2h return 7200000; // 2h
// 4.5h // 4.5h
case (interval <= 16200000): case (interval < 16200000):
return 10800000; // 3h return 10800000; // 3h
// 9h // 9h
case (interval <= 32400000): case (interval < 32400000):
return 21600000; // 6h return 21600000; // 6h
// 24h // 1d
case (interval <= 86400000): case (interval < 86400000):
return 43200000; // 12h return 43200000; // 12h
// 48h
case (interval <= 172800000):
return 86400000; // 24h
// 1w // 1w
case (interval <= 604800000): case (interval < 604800000):
return 86400000; // 24h return 86400000; // 1d
// 3w // 3w
case (interval <= 1814400000): case (interval < 1814400000):
return 604800000; // 1w return 604800000; // 1w
// 2y // 6w
case (interval < 3628800000): case (interval < 3628800000):
return 2592000000; // 30d return 2592000000; // 30d
default: default:
...@@ -134,7 +131,7 @@ function($, _) { ...@@ -134,7 +131,7 @@ function($, _) {
return nummilliseconds + 'ms'; 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) { kbn.to_percent = function(number,outof) {
......
...@@ -167,6 +167,20 @@ define([ ...@@ -167,6 +167,20 @@ define([
var res = kbn.calculateInterval(range, 900, '>15ms'); var res = kbn.calculateInterval(range, 900, '>15ms');
expect(res.interval).to.be('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() { 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