mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 01:13:23 -04:00
Add getFormat for aggType
This commit is contained in:
parent
e4d570d2f5
commit
a5449701c3
5 changed files with 86 additions and 6 deletions
|
@ -2,6 +2,7 @@ define(function (require) {
|
|||
return function AggTypeFactory(Private) {
|
||||
var _ = require('lodash');
|
||||
var AggParams = Private(require('components/agg_types/_agg_params'));
|
||||
var fieldFormats = Private(require('registry/field_formats'));
|
||||
|
||||
/**
|
||||
* Generic AggType Constructor
|
||||
|
@ -116,8 +117,25 @@ define(function (require) {
|
|||
* is created, giving the agg type a chance to modify the agg config
|
||||
*/
|
||||
this.decorateAggConfig = config.decorateAggConfig || null;
|
||||
|
||||
if (config.getFormat) {
|
||||
this.getFormat = config.getFormat;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick a format for the values produced by this agg type,
|
||||
* overriden by several metrics that always output a simple
|
||||
* number
|
||||
*
|
||||
* @param {agg} agg - the agg to pick a format for
|
||||
* @return {FieldFromat}
|
||||
*/
|
||||
AggType.prototype.getFormat = function (agg) {
|
||||
var field = agg.field();
|
||||
return field ? field.format : fieldFormats.getDefaultInstance('number');
|
||||
};
|
||||
|
||||
return AggType;
|
||||
};
|
||||
});
|
||||
|
|
|
@ -6,13 +6,24 @@ define(function (require) {
|
|||
return function DateRangeAggDefinition(Private, config) {
|
||||
var BucketAggType = Private(require('components/agg_types/buckets/_bucket_agg_type'));
|
||||
var createFilter = Private(require('components/agg_types/buckets/create_filter/date_range'));
|
||||
var fieldFormats = Private(require('registry/field_formats'));
|
||||
|
||||
|
||||
return new BucketAggType({
|
||||
name: 'date_range',
|
||||
title: 'Date Range',
|
||||
createFilter: createFilter,
|
||||
getKey: function (bucket) {
|
||||
return dateRange.toString(bucket, config.get('dateFormat'));
|
||||
getKey: function (bucket, key, agg) {
|
||||
var formatter;
|
||||
if (agg.field()) {
|
||||
formatter = agg.field().format.getConverterFor('text');
|
||||
} else {
|
||||
formatter = fieldFormats.getDefaultInstance('date').getConverterFor('text');
|
||||
}
|
||||
return dateRange.toString(bucket, formatter);
|
||||
},
|
||||
getFormat: function () {
|
||||
return fieldFormats.getDefaultInstance('string');
|
||||
},
|
||||
makeLabel: function (aggConfig) {
|
||||
return aggConfig.params.field.displayName + ' date ranges';
|
||||
|
|
|
@ -255,7 +255,7 @@ define(function (require) {
|
|||
};
|
||||
|
||||
AggConfig.prototype.getKey = function (bucket, key) {
|
||||
return this.type.getKey(bucket, key);
|
||||
return this.type.getKey(bucket, key, this);
|
||||
};
|
||||
|
||||
AggConfig.prototype.makeLabel = function () {
|
||||
|
|
|
@ -4,11 +4,11 @@ define(function (require) {
|
|||
return {
|
||||
toString: function (range, format) {
|
||||
if (!range.from) {
|
||||
return 'Before ' + moment(range.to).format(format);
|
||||
return 'Before ' + format(range.to);
|
||||
} else if (!range.to) {
|
||||
return 'After ' + moment(range.from).format(format);
|
||||
return 'After ' + format(range.from);
|
||||
} else {
|
||||
return moment(range.from).format(format) + ' to ' + moment(range.to).format(format);
|
||||
return format(range.from) + ' to ' + format(range.to);
|
||||
}
|
||||
},
|
||||
parse: function (rangeString, format) {
|
||||
|
|
|
@ -4,6 +4,10 @@ define(function (require) {
|
|||
var sinon = require('test_utils/auto_release_sinon');
|
||||
var AggType;
|
||||
var AggParams;
|
||||
var AggConfig;
|
||||
var indexPattern;
|
||||
var fieldFormat;
|
||||
var Vis;
|
||||
|
||||
require('services/private');
|
||||
|
||||
|
@ -13,7 +17,11 @@ define(function (require) {
|
|||
AggParams = sinon.spy(Private(AggParamsPM));
|
||||
Private.stub(AggParamsPM, AggParams);
|
||||
|
||||
Vis = Private(require('components/vis/vis'));
|
||||
fieldFormat = Private(require('registry/field_formats'));
|
||||
AggType = Private(require('components/agg_types/_agg_type'));
|
||||
AggConfig = Private(require('components/vis/_agg_config'));
|
||||
indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern'));
|
||||
}));
|
||||
|
||||
describe('constructor', function () {
|
||||
|
@ -65,6 +73,49 @@ define(function (require) {
|
|||
});
|
||||
});
|
||||
|
||||
describe('getFormat', function () {
|
||||
it('returns the formatter for the aggConfig', function () {
|
||||
var aggType = new AggType({});
|
||||
|
||||
var vis = new Vis(indexPattern, {
|
||||
type: 'histogram',
|
||||
aggs: [
|
||||
{
|
||||
type: 'date_histogram',
|
||||
schema: 'segment'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
var aggConfig = vis.aggs.byTypeName.date_histogram[0];
|
||||
|
||||
expect(aggType.getFormat(aggConfig)).to.be(fieldFormat.getDefaultInstance('date'));
|
||||
|
||||
vis = new Vis(indexPattern, {
|
||||
type: 'metric',
|
||||
aggs: [
|
||||
{
|
||||
type: 'count',
|
||||
schema: 'metric'
|
||||
}
|
||||
]
|
||||
});
|
||||
aggConfig = vis.aggs.byTypeName.count[0];
|
||||
|
||||
expect(aggType.getFormat(aggConfig)).to.be(fieldFormat.getDefaultInstance('number'));
|
||||
});
|
||||
|
||||
it('can be overridden via config', function () {
|
||||
var someGetter = function () {};
|
||||
|
||||
var aggType = new AggType({
|
||||
getFormat: someGetter
|
||||
});
|
||||
|
||||
expect(aggType.getFormat).to.be(someGetter);
|
||||
});
|
||||
});
|
||||
|
||||
describe('params', function () {
|
||||
it('defaults to AggParams object with JSON param', function () {
|
||||
var aggType = new AggType({
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue