kibana-123
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
46 lines (38 loc) • 1.5 kB
JavaScript
var _ = require('lodash');
var loadFunctions = require('../load_functions.js');
var fitFunctions = loadFunctions('fit_functions');
module.exports = class TimelionFunction {
constructor(name, config) {
this.name = name;
this.args = config.args || [];
this.argsByName = _.indexBy(this.args, 'name');
this.help = config.help || '';
this.aliases = config.aliases || [];
this.extended = config.extended || false;
// WTF is this? How could you not have a fn? Wtf would the thing be used for?
var originalFunction = config.fn || function (input) { return input; };
// Currently only re-fits the series.
this.originalFn = originalFunction;
this.fn = function (args, tlConfig) {
var config = _.clone(tlConfig);
return Promise.resolve(originalFunction(args, config)).then(function (seriesList) {
seriesList.list = _.map(seriesList.list, function (series) {
var target = tlConfig.getTargetSeries();
// Don't fit if the series are already the same
if (_.isEqual(_.map(series.data, 0), _.map(target, 0))) return series;
var fit;
if (args.byName.fit) {
fit = args.byName.fit;
} else if (series.fit) {
fit = series.fit;
} else {
fit = 'nearest';
}
series.data = fitFunctions[fit](series.data, tlConfig.getTargetSeries());
return series;
});
return seriesList;
});
};
}
};