[dateHistogram] only use bucket bounds and auto interval when the time field is the indexPatterns time field

This commit is contained in:
Spencer Alger 2015-02-13 16:10:13 -07:00
parent ec2384f695
commit f0a981e2f3
6 changed files with 42 additions and 22 deletions

View file

@ -4,7 +4,8 @@ define(function (require) {
return function orderedDateAxis(vis, chart) { return function orderedDateAxis(vis, chart) {
var aspects = chart.aspects; var aspects = chart.aspects;
var buckets = aspects.x.agg.buckets; var xAgg = aspects.x.agg;
var buckets = xAgg.buckets;
var format = buckets.getScaledDateFormat(); var format = buckets.getScaledDateFormat();
chart.xAxisFormatter = function (val) { chart.xAxisFormatter = function (val) {
@ -16,8 +17,10 @@ define(function (require) {
interval: buckets.getInterval(), interval: buckets.getInterval(),
}; };
var axisOnTimeField = xAgg.fieldName() === xAgg.vis.indexPattern.timeFieldName;
var bounds = buckets.getBounds(); var bounds = buckets.getBounds();
if (bounds) {
if (bounds && axisOnTimeField) {
chart.ordered.min = bounds.min; chart.ordered.min = bounds.min;
chart.ordered.max = bounds.max; chart.ordered.max = bounds.max;
} }

View file

@ -10,8 +10,10 @@ define(function (require) {
{ {
display: 'Auto', display: 'Auto',
val: 'auto', val: 'auto',
enabled: function (aggConfig) { enabled: function (agg) {
return !!aggConfig.vis.indexPattern.timeFieldName; // not only do we need a time field, but the selected field needs
// to be the time field. (see #3028)
return agg.fieldIsTimeField();
} }
}, },
{ {

View file

@ -8,6 +8,12 @@ define(function (require) {
var tzOffset = moment().format('Z'); var tzOffset = moment().format('Z');
function setBounds(agg, force) {
if (agg.buckets._alreadySet && !force) return;
agg.buckets._alreadySet = true;
agg.buckets.setBounds(agg.fieldIsTimeField() && timefilter.getActiveBounds());
}
require('filters/field_type'); require('filters/field_type');
return new BucketAggType({ return new BucketAggType({
@ -32,7 +38,8 @@ define(function (require) {
buckets = new TimeBuckets(); buckets = new TimeBuckets();
buckets.setInterval(_.get(this, ['params', 'interval'])); buckets.setInterval(_.get(this, ['params', 'interval']));
buckets.setBounds(timefilter.getActiveBounds()); setBounds(this);
return buckets; return buckets;
} }
} }
@ -44,6 +51,9 @@ define(function (require) {
filterFieldTypes: 'date', filterFieldTypes: 'date',
default: function (agg) { default: function (agg) {
return agg.vis.indexPattern.timeFieldName; return agg.vis.indexPattern.timeFieldName;
},
onChange: function (agg) {
setBounds(agg, true);
} }
}, },
@ -54,15 +64,10 @@ define(function (require) {
options: Private(require('components/agg_types/buckets/_interval_options')), options: Private(require('components/agg_types/buckets/_interval_options')),
editor: require('text!components/agg_types/controls/interval.html'), editor: require('text!components/agg_types/controls/interval.html'),
onRequest: function (agg) { onRequest: function (agg) {
// flag that prevents us from clobbering on subsequest calls to write() setBounds(agg, true);
agg.buckets._sentToEs = true;
agg.buckets.setBounds(timefilter.getActiveBounds());
}, },
write: function (agg, output) { write: function (agg, output) {
if (!agg.buckets._sentToEs) { setBounds(agg);
agg.buckets.setBounds(timefilter.getActiveBounds());
}
agg.buckets.setInterval(agg.params.interval); agg.buckets.setInterval(agg.params.interval);
var interval = agg.buckets.getInterval(); var interval = agg.buckets.getInterval();

View file

@ -22,7 +22,8 @@
name="field" name="field"
required required
ng-model="agg.params.field" ng-model="agg.params.field"
ng-options="field as field.displayName group by field.type for field in indexedFields"> ng-options="field as field.displayName group by field.type for field in indexedFields"
ng-change="aggParam.onChange(agg)">
</select> </select>
</div> </div>

View file

@ -292,10 +292,10 @@ define(function (require) {
} }
function cacheBreaker(prop) { function cacheBreaker(prop) {
var breaker = breakers[prop]; var resource = resources[breakers[prop]];
var setup = breaker.setup; var setup = resource.setup;
var changes = breaker.changes; var changes = resource.changes;
var deps = breaker.deps; var deps = resource.deps;
var fn = self[prop]; var fn = self[prop];
return { return {
@ -304,7 +304,7 @@ define(function (require) {
var ret = fn.apply(self, arguments); var ret = fn.apply(self, arguments);
if (changes.call(self, prev)) { if (changes.call(self, prev)) {
cache = _.omit(cache, deps); cache = {};
} }
return ret; return ret;
@ -330,8 +330,13 @@ define(function (require) {
}; };
var breakers = { var breakers = {
setBounds: { setBounds: 'bounds',
deps: ['getBounds', 'hasBounds', 'getDuration', 'getInterval', 'getScaledDateFormat'], clearBounds: 'bounds',
setInterval: 'interval'
};
var resources = {
bounds: {
setup: function () { setup: function () {
return [self._lb, self._ub]; return [self._lb, self._ub];
}, },
@ -339,8 +344,7 @@ define(function (require) {
return !sameMoment(prev[0], self._lb) || !sameMoment(prev[1], self._ub); return !sameMoment(prev[0], self._lb) || !sameMoment(prev[1], self._ub);
} }
}, },
setInterval: { interval: {
deps: ['getInterval', 'getScaledDateFormat'],
setup: function () { setup: function () {
return self._i; return self._i;
}, },

View file

@ -282,6 +282,11 @@ define(function (require) {
return field ? (field.displayName || this.fieldName()) : ''; return field ? (field.displayName || this.fieldName()) : '';
}; };
AggConfig.prototype.fieldIsTimeField = function () {
var timeFieldName = this.vis.indexPattern.timeFieldName;
return timeFieldName && this.fieldName() === timeFieldName;
};
return AggConfig; return AggConfig;
}; };
}); });