percentil: refactor

This commit is contained in:
Alexander Zobnin
2017-10-16 15:25:02 +03:00
parent 872f1ac9c8
commit f53eac6f08
12 changed files with 65 additions and 9 deletions

View File

@@ -18,6 +18,7 @@ let AVERAGE = ts.AVERAGE;
let MIN = ts.MIN;
let MAX = ts.MAX;
let MEDIAN = ts.MEDIAN;
let PERCENTIL = ts.PERCENTIL;
function limit(order, n, orderByFunc, timeseries) {
let orderByCallback = aggregationFunctions[orderByFunc];
@@ -82,6 +83,12 @@ function aggregateWrapper(groupByCallback, interval, datapoints) {
return groupBy(flattenedPoints, interval, groupByCallback);
}
function percentil(interval, n, datapoints) {
var flattenedPoints = _.flatten(datapoints, true);
var groupByCallback = _.partial(PERCENTIL, n);
return groupBy(flattenedPoints, interval, groupByCallback);
}
function timeShift(interval, range) {
let shift = utils.parseTimeShiftInterval(interval) / 1000;
return _.map(range, time => {
@@ -108,6 +115,7 @@ let metricFunctions = {
exponentialMovingAverage: expMovingAverage,
aggregateBy: aggregateByWrapper,
// Predefined aggs
percentil: percentil,
average: _.partial(aggregateWrapper, AVERAGE),
min: _.partial(aggregateWrapper, MIN),
max: _.partial(aggregateWrapper, MAX),

View File

@@ -108,9 +108,9 @@ addFuncDef({
category: 'Aggregate',
params: [
{ name: 'interval', type: 'string' },
{ name: 'percent', type: 'string' }
{ name: 'percent', type: 'float', options: [25, 50, 75, 90, 95, 99, 99.9] }
],
defaultParams: ['1m','95'],
defaultParams: ['1m', 95],
});
addFuncDef({

View File

@@ -322,6 +322,11 @@ function expMovingAverage(datapoints, n) {
return ema;
}
function PERCENTIL(n, values) {
var sorted = _.sortBy(values);
return sorted[Math.floor(sorted.length * n / 100)];
}
function COUNT(values) {
return values.length;
}
@@ -482,7 +487,8 @@ const exportedFunctions = {
AVERAGE,
MIN,
MAX,
MEDIAN
MEDIAN,
PERCENTIL
};
export default exportedFunctions;