mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
[aggTypes/metrics] implemented per-agg formatting
This commit is contained in:
parent
b2f71f7017
commit
b549710dc4
8 changed files with 52 additions and 23 deletions
|
@ -3,7 +3,7 @@
|
|||
"node": true,
|
||||
|
||||
// shared with .jshintrc files for browser and node
|
||||
"unused": true,
|
||||
"unused": false,
|
||||
"bitwise": false,
|
||||
"eqnull": true,
|
||||
"eqeqeq": true,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
define(function (require) {
|
||||
return function MetricAggTypeProvider(Private, indexPatterns) {
|
||||
return function MetricAggTypeProvider(Private) {
|
||||
var _ = require('lodash');
|
||||
var AggType = Private(require('components/agg_types/_agg_type'));
|
||||
var fieldFormats = Private(require('registry/field_formats'));
|
||||
|
@ -8,9 +8,12 @@ define(function (require) {
|
|||
function MetricAggType(config) {
|
||||
MetricAggType.Super.call(this, config);
|
||||
|
||||
if (_.isFunction(config.getValue)) {
|
||||
this.getValue = config.getValue;
|
||||
}
|
||||
// allow overriding any value on the prototype
|
||||
_.forOwn(config, function (val, key) {
|
||||
if (_.has(MetricAggType.prototype, key)) {
|
||||
this[key] = val;
|
||||
}
|
||||
}, this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -22,13 +25,17 @@ define(function (require) {
|
|||
return bucket[agg.id].value;
|
||||
};
|
||||
|
||||
/**
|
||||
* 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}
|
||||
*/
|
||||
MetricAggType.prototype.getFormat = function (agg) {
|
||||
var field = agg.field();
|
||||
if (field && field.type === 'date' && field.format) {
|
||||
return field.format;
|
||||
} else {
|
||||
return fieldFormats.for('number');
|
||||
}
|
||||
return field ? field.format : fieldFormats.getDefaultInstance('number');
|
||||
};
|
||||
|
||||
return MetricAggType;
|
||||
|
|
|
@ -16,4 +16,4 @@ define(function (require) {
|
|||
]
|
||||
});
|
||||
};
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
define(function (require) {
|
||||
return function AggTypeMetricCardinalityProvider(Private) {
|
||||
var MetricAggType = Private(require('components/agg_types/metrics/_metric_agg_type'));
|
||||
var fieldFormats = Private(require('registry/field_formats'));
|
||||
|
||||
return new MetricAggType({
|
||||
name: 'cardinality',
|
||||
|
@ -8,6 +9,9 @@ define(function (require) {
|
|||
makeLabel: function (aggConfig) {
|
||||
return 'Unique count of ' + aggConfig.params.field.displayName;
|
||||
},
|
||||
getFormat: function () {
|
||||
return fieldFormats.getDefaultInstance('number');
|
||||
},
|
||||
params: [
|
||||
{
|
||||
name: 'field'
|
||||
|
@ -15,4 +19,4 @@ define(function (require) {
|
|||
]
|
||||
});
|
||||
};
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
define(function (require) {
|
||||
return function AggTypeMetricCountProvider(Private) {
|
||||
var MetricAggType = Private(require('components/agg_types/metrics/_metric_agg_type'));
|
||||
var fieldFormats = Private(require('registry/field_formats'));
|
||||
|
||||
return new MetricAggType({
|
||||
name: 'count',
|
||||
title: 'Count',
|
||||
hasNoDsl: true,
|
||||
makeLabel: function (aggConfig) {
|
||||
makeLabel: function () {
|
||||
return 'Count';
|
||||
},
|
||||
getValue: function (agg, bucket) {
|
||||
return bucket.doc_count;
|
||||
},
|
||||
getFormat: function () {
|
||||
return fieldFormats.getDefaultInstance('number');
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
});
|
||||
|
|
|
@ -4,6 +4,7 @@ define(function (require) {
|
|||
|
||||
var MetricAggType = Private(require('components/agg_types/metrics/_metric_agg_type'));
|
||||
var getResponseAggConfig = Private(require('components/agg_types/metrics/_get_response_agg_config'));
|
||||
var fieldFormats = Private(require('registry/field_formats'));
|
||||
|
||||
require('components/agg_types/controls/_values_list');
|
||||
var valuesEditor = require('text!components/agg_types/controls/values.html');
|
||||
|
@ -51,6 +52,9 @@ define(function (require) {
|
|||
return new ValueAggConfig(value);
|
||||
});
|
||||
},
|
||||
getFormat: function () {
|
||||
return fieldFormats.getInstance('percent') || fieldFormats.getDefaultInstance('number');
|
||||
},
|
||||
getValue: function (agg, bucket) {
|
||||
// values for 1, 5, and 10 will come back as 1.0, 5.0, and 10.0 so we
|
||||
// parse the keys and respond with the value that matches
|
||||
|
@ -60,4 +64,4 @@ define(function (require) {
|
|||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5,6 +5,7 @@ define(function (require) {
|
|||
var MetricAggType = Private(require('components/agg_types/metrics/_metric_agg_type'));
|
||||
var getResponseAggConfig = Private(require('components/agg_types/metrics/_get_response_agg_config'));
|
||||
var ordinalSuffix = require('utils/ordinal_suffix');
|
||||
var fieldFormats = Private(require('registry/field_formats'));
|
||||
|
||||
require('components/agg_types/controls/_values_list');
|
||||
var percentEditor = require('text!components/agg_types/controls/percents.html');
|
||||
|
@ -52,6 +53,9 @@ define(function (require) {
|
|||
return new ValueAggConfig(percent);
|
||||
});
|
||||
},
|
||||
getFormat: function () {
|
||||
return fieldFormats.getInstance('percent') || fieldFormats.getDefaultInstance('number');
|
||||
},
|
||||
getValue: function (agg, bucket) {
|
||||
// percentiles for 1, 5, and 10 will come back as 1.0, 5.0, and 10.0 so we
|
||||
// parse the keys and respond with the value that matches
|
||||
|
@ -61,4 +65,4 @@ define(function (require) {
|
|||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
});
|
||||
|
|
|
@ -16,27 +16,30 @@ define(function (require) {
|
|||
$rootScope.$on('change:config.format:defaultTypeMap', parseDefaultTypeMap);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a FieldFormat type (class) by it's id.
|
||||
*
|
||||
* @param {String} formatId - the format id
|
||||
* @return {Function}
|
||||
*/
|
||||
self.type = function (formatId) {
|
||||
self.getType = function (formatId) {
|
||||
return self.byId[formatId];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get the singleton instance of the FieldFormat type by it's id.
|
||||
*
|
||||
* @param {String} formatId
|
||||
* @return {FieldFormat}
|
||||
*/
|
||||
self.instance = _.memoize(function (formatId) {
|
||||
self.getInstance = _.memoize(function (formatId) {
|
||||
var FieldFormat = self.byId[formatId];
|
||||
return new FieldFormat();
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Get the id of the default type for this field type
|
||||
* using the format:defaultTypeMap config map
|
||||
|
@ -44,10 +47,11 @@ define(function (require) {
|
|||
* @param {String} fieldType - the field type
|
||||
* @return {String}
|
||||
*/
|
||||
self.defaultTypeId = function (fieldType) {
|
||||
self.getDefaultTypeId = function (fieldType) {
|
||||
return defaultMap[fieldType] || defaultMap._default_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get the default FieldFormat type (class) for
|
||||
* a field type, using the format:defaultTypeMap.
|
||||
|
@ -55,20 +59,22 @@ define(function (require) {
|
|||
* @param {String} fieldType
|
||||
* @return {Function}
|
||||
*/
|
||||
self.defaultType = function (fieldType) {
|
||||
return self.byId[self.defaultTypeId(fieldType)];
|
||||
self.getDefaultType = function (fieldType) {
|
||||
return self.byId[self.getDefaultTypeId(fieldType)];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get the default fieldFormat instance for a field format.
|
||||
*
|
||||
* @param {String} fieldType
|
||||
* @return {FieldFormat}
|
||||
*/
|
||||
self.defaultInstance = _.memoize(function (fieldType) {
|
||||
return self.instance(self.defaultTypeId(fieldType));
|
||||
self.getDefaultInstance = _.memoize(function (fieldType) {
|
||||
return self.getInstance(self.getDefaultTypeId(fieldType));
|
||||
});
|
||||
|
||||
|
||||
function parseDefaultTypeMap() {
|
||||
defaultMap = config.get('format:defaultTypeMap');
|
||||
_.forOwn(self, function (fn) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue