diff --git a/js/shared.js b/js/shared.js index 217289ba09bf79..94c09d3f30d87b 100644 --- a/js/shared.js +++ b/js/shared.js @@ -192,7 +192,7 @@ // histogram & trends kbn.interval_to_seconds = function(string) { - var matches = string.match(/(\d+)([Mwdhmsy])/); + var matches = string.match(/(\d+(?:\.\d+)?)([Mwdhmsy])/); switch (matches[2]) { case 'y': return matches[1]*31536000; diff --git a/panels/histogram/module.js b/panels/histogram/module.js index 60b823f8185434..5593e6d9e903a0 100644 --- a/panels/histogram/module.js +++ b/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; };