UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

142 lines (126 loc) 4.5 kB
define(function (require) { return function AggTypeFactory(Private) { var _ = require('lodash'); var AggParams = Private(require('ui/agg_types/AggParams')); var fieldFormats = Private(require('ui/registry/field_formats')); /** * Generic AggType Constructor * * Used to create the values exposed by the agg_types module. * * @class AggType * @private * @param {object} config - used to set the properties of the AggType */ function AggType(config) { /** * the unique, unchanging, name that we have assigned this aggType * * @property name * @type {string} */ this.name = config.name; /** * the name of the elasticsearch aggregation that this aggType represents. Usually just this.name * * @property name * @type {string} */ this.dslName = config.dslName || config.name; /** * the user friendly name that will be shown in the ui for this aggType * * @property title * @type {string} */ this.title = config.title; /** * a function that will be called when this aggType is assigned to * an aggConfig, and that aggConfig is being rendered (in a form, chart, etc.). * * @method makeLabel * @param {AggConfig} aggConfig - an agg config of this type * @returns {string} - label that can be used in the ui to descripe the aggConfig */ this.makeLabel = config.makeLabel || _.constant(this.name); /** * Describes if this aggType creates data that is ordered, and if that ordered data * is some sort of time series. * * If the aggType does not create ordered data, set this to something "falsey". * * If this does create orderedData, then the value should be an object. * * If the orderdata is some sort of time series, `this.ordered` should be an object * with the property `date: true` * * @property ordered * @type {object|undefined} */ this.ordered = config.ordered; /** * Flag that prevents this aggregation from being included in the dsl. This is only * used by the count aggregation (currently) since it doesn't really exist and it's output * is available on every bucket. * * @type {Boolean} */ this.hasNoDsl = !!config.hasNoDsl; /** * The method to create a filter representation of the bucket * @param {object} aggConfig The instance of the aggConfig * @param {mixed} key The key for the bucket * @returns {object} The filter */ this.createFilter = config.createFilter; /** * An instance of {{#crossLink "AggParams"}}{{/crossLink}}. * * @property params * @type {AggParams} */ this.params = config.params || []; if (!(this.params instanceof AggParams)) { // always append the raw JSON param this.params.push({ name: 'json', type: 'json', advanced: true }); this.params = new AggParams(this.params); } /** * Designed for multi-value metric aggs, this method can return a * set of AggConfigs that should replace this aggConfig in result sets * that walk the AggConfig set. * * @method getResponseAggs * @returns {array[AggConfig]|undefined} - an array of aggConfig objects * that should replace this one, * or undefined */ this.getResponseAggs = config.getResponseAggs || _.noop; /** * A function that will be called each time an aggConfig of this type * 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('string'); }; return AggType; }; });