From 2a66cac2308ad5fd8f74544c96ffe793ea2d9310 Mon Sep 17 00:00:00 2001 From: Pedro Henrique Ribeiro Freitas Date: Wed, 28 Sep 2016 16:42:24 -0300 Subject: [PATCH] new function percentil --- src/datasource-zabbix/DataProcessor.js | 27 ++++++++++++++++++++++++ src/datasource-zabbix/metricFunctions.js | 10 +++++++++ 2 files changed, 37 insertions(+) diff --git a/src/datasource-zabbix/DataProcessor.js b/src/datasource-zabbix/DataProcessor.js index cb6c4c2..736d169 100644 --- a/src/datasource-zabbix/DataProcessor.js +++ b/src/datasource-zabbix/DataProcessor.js @@ -158,6 +158,32 @@ export default class DataProcessor { return timeseries; } + static PERCENTIL(interval, n, datapoints) { + var flattenedPoints = _.flatten(datapoints, true); + var ms_interval = utils.parseInterval(interval); + + // Calculate frame timestamps + var frames = _.groupBy(flattenedPoints, function(point) { + // Calculate time for group of points + return Math.floor(point[1] / ms_interval) * ms_interval; + }); + + // frame: { '': [[, ], ...] } + // return [{ '': }, { '': }, ...] + var grouped = _.mapValues(frames, function(frame) { + var points = _.map(frame, function(point) { + return point[0]; + }); + var sorted = _.sortBy(points); + return sorted[Math.floor(sorted.length*n/100)]; + }); + + // Convert points to Grafana format + return sortByTime(_.map(grouped, function(value, timestamp) { + return [Number(value), Number(timestamp)]; + })); + } + static scale(factor, datapoints) { return _.map(datapoints, point => { return [ @@ -208,6 +234,7 @@ export default class DataProcessor { groupBy: this.groupByWrapper, scale: this.scale, delta: this.delta, + percentil: this.PERCENTIL, aggregateBy: this.aggregateByWrapper, average: _.partial(this.aggregateWrapper, this.AVERAGE), min: _.partial(this.aggregateWrapper, this.MIN), diff --git a/src/datasource-zabbix/metricFunctions.js b/src/datasource-zabbix/metricFunctions.js index 5d467f4..c40259c 100644 --- a/src/datasource-zabbix/metricFunctions.js +++ b/src/datasource-zabbix/metricFunctions.js @@ -72,6 +72,16 @@ addFuncDef({ defaultParams: ['1m'], }); +addFuncDef({ + name: 'percentil', + category: 'Aggregate', + params: [ + { name: 'interval', type: 'string' }, + { name: 'percent', type: 'string' } + ], + defaultParams: ['1m','95'], +}); + addFuncDef({ name: 'min', category: 'Aggregate',