From e36336864a5a32416c0cb993f987391876fb6f9a Mon Sep 17 00:00:00 2001 From: drakosha Date: Wed, 28 Nov 2018 17:30:51 +0300 Subject: [PATCH] Offset function added (#638) * Shift function added * Remane shift function to offset --- src/datasource-zabbix/dataProcessor.js | 2 ++ src/datasource-zabbix/metricFunctions.js | 9 +++++++++ src/datasource-zabbix/specs/timeseries.spec.js | 10 ++++++++++ src/datasource-zabbix/timeseries.js | 12 ++++++++++++ 4 files changed, 33 insertions(+) diff --git a/src/datasource-zabbix/dataProcessor.js b/src/datasource-zabbix/dataProcessor.js index f45470a..5e6dba2 100644 --- a/src/datasource-zabbix/dataProcessor.js +++ b/src/datasource-zabbix/dataProcessor.js @@ -9,6 +9,7 @@ let sumSeries = ts.sumSeries; let delta = ts.delta; let rate = ts.rate; let scale = (factor, datapoints) => ts.scale_perf(datapoints, factor); +let offset = (factor, datapoints) => ts.offset(datapoints, delta); let simpleMovingAverage = (n, datapoints) => ts.simpleMovingAverage(datapoints, n); let expMovingAverage = (a, datapoints) => ts.expMovingAverage(datapoints, a); @@ -117,6 +118,7 @@ function unShiftTimeSeries(interval, datapoints) { let metricFunctions = { groupBy: groupByWrapper, scale: scale, + offset: offset, delta: delta, rate: rate, movingAverage: simpleMovingAverage, diff --git a/src/datasource-zabbix/metricFunctions.js b/src/datasource-zabbix/metricFunctions.js index 261b284..f4da830 100644 --- a/src/datasource-zabbix/metricFunctions.js +++ b/src/datasource-zabbix/metricFunctions.js @@ -44,6 +44,15 @@ addFuncDef({ defaultParams: [100], }); +addFuncDef({ + name: 'offset', + category: 'Transform', + params: [ + { name: 'delta', type: 'float', options: [-100, 100]} + ], + defaultParams: [100], +}); + addFuncDef({ name: 'delta', category: 'Transform', diff --git a/src/datasource-zabbix/specs/timeseries.spec.js b/src/datasource-zabbix/specs/timeseries.spec.js index f1311bd..5fe21b4 100644 --- a/src/datasource-zabbix/specs/timeseries.spec.js +++ b/src/datasource-zabbix/specs/timeseries.spec.js @@ -30,5 +30,15 @@ describe('timeseries processing functions', () => { expect(result).toEqual(expected); done(); }); + + it('should properly offset metric', (done) => { + let points = [[1, 1], [-4, 2], [2, 3]]; + + let expected = [[101, 1], [96, 2], [102, 3]]; + + let result = ts.offset(points, 100); + expect(result).toEqual(expected); + done(); + }); }); }); diff --git a/src/datasource-zabbix/timeseries.js b/src/datasource-zabbix/timeseries.js index 2c25b4b..9390c3f 100644 --- a/src/datasource-zabbix/timeseries.js +++ b/src/datasource-zabbix/timeseries.js @@ -191,6 +191,17 @@ function scale_perf(datapoints, factor) { return datapoints; } +function offset(datapoints, delta) { + for (let i = 0; i < datapoints.length; i++) { + datapoints[i] = [ + datapoints[i][POINT_VALUE] + delta, + datapoints[i][POINT_TIMESTAMP] + ]; + } + + return datapoints; +} + /** * Simple delta. Calculate value delta between points. * @param {*} datapoints @@ -477,6 +488,7 @@ const exportedFunctions = { groupBy_perf, sumSeries, scale, + offset, scale_perf, delta, rate,