kibana-riya
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
52 lines (41 loc) • 1.64 kB
JavaScript
;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var _ = require('lodash');
var loadFunctions = require('../load_functions.js');
var fitFunctions = loadFunctions('fit_functions');
module.exports = function TimelionFunction(name, config) {
_classCallCheck(this, TimelionFunction);
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;
});
};
};