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

Rebased to master to include latest changes

updated the getFlotPairs() function to only check before and after a value, adding only enough zeros to maintain line graphs.
Spencer Alger 12 лет назад
Родитель
Сommit
136bf66d39
1 измененных файлов с 42 добавлено и 22 удалено
  1. 42 22
      panels/histogram/module.js

+ 42 - 22
panels/histogram/module.js

@@ -95,7 +95,7 @@ angular.module('kibana.histogram', [])
   };
 
   $scope.get_interval = function () {
-    var interval = $scope.panel.interval, 
+    var interval = $scope.panel.interval,
                     range;
     if ($scope.panel.auto_int) {
       range = $scope.get_time_range();
@@ -188,8 +188,8 @@ angular.module('kibana.histogram', [])
       // Make sure we're still on the same query/queries
       if($scope.query_id === query_id && _.difference(facetIds, $scope.panel.queries.ids).length === 0) {
 
-        var i = 0, 
-          time_series, 
+        var i = 0,
+          time_series,
           hits;
 
         _.each($scope.panel.queries.ids, function(id) {
@@ -342,8 +342,19 @@ angular.module('kibana.histogram', [])
                   lineWidth: scope.panel.linewidth,
                   steps: false
                 },
-                bars:   { show: scope.panel.bars,  fill: 1, lineWidth:0, barWidth: barwidth/1.7, zero: false },
-                points: { show: scope.panel.points, fill: 1, fillColor: false, radius: 5},
+                bars:   {
+                  show: scope.panel.bars,
+                  fill: 1,
+                  barWidth: barwidth/1.8,
+                  zero: false,
+                  lineWidth: 0
+                },
+                points: {
+                  show: scope.panel.points,
+                  fill: 1,
+                  fillColor: false,
+                  radius: 5
+                },
                 shadowSize: 1
               },
               yaxis: {
@@ -485,24 +496,33 @@ angular.module('kibana.histogram', [])
    */
   this.ZeroFilled.prototype.getFlotPairs = function () {
     // var startTime = performance.now();
-    var times = _.map(_.keys(this._data), base10Int).sort(), 
-      result = [],
-      i,
-      next,
-      expected_next;
-    for(i = 0; i < times.length; i++) {
-      result.push([ times[i], this._data[times[i]] ]);
-      next = times[i + 1];
-      expected_next = times[i] + this.interval_ms;
-      for(; times.length > i && next > expected_next; expected_next+= this.interval_ms) {
-        /**
-         * since we don't know how the server will round subsequent segments
-         * we have to recheck for blanks each time.
-         */
-        // this._data[expected_next] = 0;
-        result.push([expected_next, 0]);
+    var times = _.map(_.keys(this._data), base10Int).sort(),
+      result = [];
+    _.each(times, function (time, i, times) {
+      var next, expected_next, prev, expected_prev;
+
+      // check for previous measurement
+      if (i > 0) {
+        prev = times[i - 1];
+        expected_prev = time - this.interval_ms;
+        if (prev < expected_prev) {
+          result.push([expected_prev, 0]);
+        }
       }
-    }
+
+      // add the current time
+      result.push([ time, this._data[time] ]);
+
+      // check for next measurement
+      if (times.length > i) {
+        next = times[i + 1];
+        expected_next = time + this.interval_ms;
+        if (next > expected_next) {
+          result.push([expected_next, 0]);
+        }
+      }
+
+    }, this);
     // console.log(Math.round((performance.now() - startTime)*100)/100, 'ms to get', result.length, 'pairs');
     return result;
   };