diff --git a/src/datasource-zabbix/dataProcessor.js b/src/datasource-zabbix/dataProcessor.js index 5e6dba2..e6e0e6f 100644 --- a/src/datasource-zabbix/dataProcessor.js +++ b/src/datasource-zabbix/dataProcessor.js @@ -37,6 +37,33 @@ function limit(order, n, orderByFunc, timeseries) { } } +function removeAboveValue(n, datapoints) { + return _.map(datapoints, point => { + return [ + (point[0] > n) ? null : point[0], + point[1] + ]; + }); +} + +function removeBelowValue(n, datapoints) { + return _.map(datapoints, point => { + return [ + (point[0] < n) ? null : point[0], + point[1] + ]; + }); +} + +function transformNull(n, datapoints) { + return _.map(datapoints, point => { + return [ + (point[0] !== null) ? point[0] : n, + point[1] + ]; + }); +} + function sortSeries(direction, timeseries) { return _.orderBy(timeseries, [function (ts) { return ts.target.toLowerCase(); @@ -123,6 +150,7 @@ let metricFunctions = { rate: rate, movingAverage: simpleMovingAverage, exponentialMovingAverage: expMovingAverage, + transformNull: transformNull, aggregateBy: aggregateByWrapper, // Predefined aggs percentil: percentil, @@ -133,6 +161,8 @@ let metricFunctions = { sum: _.partial(aggregateWrapper, SUM), count: _.partial(aggregateWrapper, COUNT), sumSeries: sumSeries, + removeAboveValue: removeAboveValue, + removeBelowValue: removeBelowValue, top: _.partial(limit, 'top'), bottom: _.partial(limit, 'bottom'), sortSeries: sortSeries, diff --git a/src/datasource-zabbix/metricFunctions.js b/src/datasource-zabbix/metricFunctions.js index f4da830..498b99f 100644 --- a/src/datasource-zabbix/metricFunctions.js +++ b/src/datasource-zabbix/metricFunctions.js @@ -85,6 +85,15 @@ addFuncDef({ defaultParams: [0.2], }); +addFuncDef({ + name: 'transformNull', + category: 'Transform', + params: [ + {name: 'number', type: 'float'} + ], + defaultParams: [0], +}); + // Aggregate addFuncDef({ @@ -170,6 +179,24 @@ addFuncDef({ // Filter +addFuncDef({ + name: 'removeAboveValue', + category: 'Filter', + params: [ + {name: 'number', type: 'float'}, + ], + defaultParams: [0], +}); + +addFuncDef({ + name: 'removeBelowValue', + category: 'Filter', + params: [ + {name: 'number', type: 'float'}, + ], + defaultParams: [0], +}); + addFuncDef({ name: 'top', category: 'Filter',