diff --git a/panels/histogram/module.js b/panels/histogram/module.js index d364b9e64ee71..5a6000b616eed 100644 --- a/panels/histogram/module.js +++ b/panels/histogram/module.js @@ -457,6 +457,10 @@ angular.module('kibana.histogram', []) return parseInt(val, 10); } + function getDatesTime(date) { + return Math.floor(date.getTime() / 1000)*1000 + } + /** * Certain graphs require 0 entries to be specified for them to render * properly (like the line graph). So with this we will caluclate all of @@ -474,7 +478,7 @@ angular.module('kibana.histogram', []) * the series. */ this.ZeroFilled = function (opts) { - this.opts = _.defaults(opts, { + opts = _.defaults(opts, { interval: '10m', start_date: null, end_date: null, @@ -486,13 +490,9 @@ angular.module('kibana.histogram', []) // will keep all values here, keyed by their time this._data = {}; - - if (opts.start_date) { - this.addValue(opts.start_date, null); - } - if (opts.end_date) { - this.addValue(opts.end_date, null); - } + this.start_time = opts.start_date && getDatesTime(opts.start_date); + this.end_time = opts.end_date && getDatesTime(opts.end_date); + this.opts = opts; }; /** @@ -502,7 +502,7 @@ angular.module('kibana.histogram', []) */ this.ZeroFilled.prototype.addValue = function (time, value) { if (time instanceof Date) { - time = Math.floor(time.getTime() / 1000)*1000; + time = getDatesTime(time); } else { time = base10Int(time); } @@ -544,12 +544,23 @@ angular.module('kibana.histogram', []) strategy = this._getMinFlotPairs; } - return _.reduce( + pairs = _.reduce( times, // what strategy, // how [], // where this // context ); + + // if the start and end of the pairs are inside either the start or end time, + // add those times to the series with null values so the graph will stretch to contain them. + if (this.start_time && pairs[0][0] > this.start_time) { + pairs.unshift([this.start_time, null]); + } + if (this.end_time && pairs[pairs.length -1][0] < this.end_time) { + pairs.push([this.end_time, null]); + } + + return pairs; }; /**