Просмотр исходного кода

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.
Alin Sinpalean 8 лет назад
Родитель
Сommit
1076b75a21
2 измененных файлов с 45 добавлено и 34 удалено
  1. 31 34
      public/app/core/utils/kbn.js
  2. 14 0
      public/test/core/utils/kbn_specs.js

+ 31 - 34
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) {

+ 14 - 0
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() {