functions: simple moving average
This commit is contained in:
7
dist/datasource-zabbix/dataProcessor.js
vendored
7
dist/datasource-zabbix/dataProcessor.js
vendored
@@ -3,7 +3,7 @@
|
||||
System.register(['lodash', './utils', './timeseries'], function (_export, _context) {
|
||||
"use strict";
|
||||
|
||||
var _, utils, ts, downsampleSeries, groupBy, groupBy_exported, sumSeries, delta, rate, scale, SUM, COUNT, AVERAGE, MIN, MAX, MEDIAN, metricFunctions, aggregationFunctions;
|
||||
var _, utils, ts, downsampleSeries, groupBy, groupBy_exported, sumSeries, delta, rate, scale, simpleMovingAverage, SUM, COUNT, AVERAGE, MIN, MAX, MEDIAN, metricFunctions, aggregationFunctions;
|
||||
|
||||
function limit(order, n, orderByFunc, timeseries) {
|
||||
var orderByCallback = aggregationFunctions[orderByFunc];
|
||||
@@ -106,6 +106,10 @@ System.register(['lodash', './utils', './timeseries'], function (_export, _conte
|
||||
return ts.scale_perf(datapoints, factor);
|
||||
};
|
||||
|
||||
simpleMovingAverage = function simpleMovingAverage(n, datapoints) {
|
||||
return ts.simpleMovingAverage(datapoints, n);
|
||||
};
|
||||
|
||||
SUM = ts.SUM;
|
||||
COUNT = ts.COUNT;
|
||||
AVERAGE = ts.AVERAGE;
|
||||
@@ -117,6 +121,7 @@ System.register(['lodash', './utils', './timeseries'], function (_export, _conte
|
||||
scale: scale,
|
||||
delta: delta,
|
||||
rate: rate,
|
||||
simpleMovingAverage: simpleMovingAverage,
|
||||
aggregateBy: aggregateByWrapper,
|
||||
average: _.partial(aggregateWrapper, AVERAGE),
|
||||
min: _.partial(aggregateWrapper, MIN),
|
||||
|
||||
2
dist/datasource-zabbix/dataProcessor.js.map
vendored
2
dist/datasource-zabbix/dataProcessor.js.map
vendored
File diff suppressed because one or more lines are too long
7
dist/datasource-zabbix/metricFunctions.js
vendored
7
dist/datasource-zabbix/metricFunctions.js
vendored
@@ -110,6 +110,13 @@ System.register(['lodash', 'jquery'], function (_export, _context) {
|
||||
defaultParams: []
|
||||
});
|
||||
|
||||
addFuncDef({
|
||||
name: 'simpleMovingAverage',
|
||||
category: 'Transform',
|
||||
params: [{ name: 'factor', type: 'int', options: [6, 10, 60, 600] }],
|
||||
defaultParams: [10]
|
||||
});
|
||||
|
||||
// Aggregate
|
||||
|
||||
addFuncDef({
|
||||
|
||||
File diff suppressed because one or more lines are too long
44
dist/datasource-zabbix/timeseries.js
vendored
44
dist/datasource-zabbix/timeseries.js
vendored
@@ -209,6 +209,49 @@ System.register(['lodash', './utils'], function (_export, _context) {
|
||||
return newSeries;
|
||||
}
|
||||
|
||||
function simpleMovingAverage(datapoints, n) {
|
||||
var sma = [];
|
||||
var w_sum = void 0;
|
||||
var w_avg = null;
|
||||
var w_count = 0;
|
||||
|
||||
// Initial window
|
||||
for (var j = n; j > 0; j--) {
|
||||
if (datapoints[n - j][POINT_VALUE] !== null) {
|
||||
w_avg += datapoints[n - j][POINT_VALUE];
|
||||
w_count++;
|
||||
}
|
||||
}
|
||||
if (w_count > 0) {
|
||||
w_avg = w_avg / w_count;
|
||||
} else {
|
||||
w_avg = null;
|
||||
}
|
||||
sma.push([w_avg, datapoints[n - 1][POINT_TIMESTAMP]]);
|
||||
|
||||
for (var i = n; i < datapoints.length; i++) {
|
||||
// Insert next value
|
||||
if (datapoints[i][POINT_VALUE] !== null) {
|
||||
w_sum = w_avg * w_count;
|
||||
w_avg = (w_sum + datapoints[i][POINT_VALUE]) / (w_count + 1);
|
||||
w_count++;
|
||||
}
|
||||
// Remove left side point
|
||||
if (datapoints[i - n][POINT_VALUE] !== null) {
|
||||
w_sum = w_avg * w_count;
|
||||
if (w_count > 1) {
|
||||
w_avg = (w_sum - datapoints[i - n][POINT_VALUE]) / (w_count - 1);
|
||||
w_count--;
|
||||
} else {
|
||||
w_avg = null;
|
||||
w_count = 0;
|
||||
}
|
||||
}
|
||||
sma.push([w_avg, datapoints[i][POINT_TIMESTAMP]]);
|
||||
}
|
||||
return sma;
|
||||
}
|
||||
|
||||
function COUNT(values) {
|
||||
return values.length;
|
||||
}
|
||||
@@ -351,6 +394,7 @@ System.register(['lodash', './utils'], function (_export, _context) {
|
||||
scale_perf: scale_perf,
|
||||
delta: delta,
|
||||
rate: rate,
|
||||
simpleMovingAverage: simpleMovingAverage,
|
||||
SUM: SUM,
|
||||
COUNT: COUNT,
|
||||
AVERAGE: AVERAGE,
|
||||
|
||||
2
dist/datasource-zabbix/timeseries.js.map
vendored
2
dist/datasource-zabbix/timeseries.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/test/datasource-zabbix/dataProcessor.js
vendored
4
dist/test/datasource-zabbix/dataProcessor.js
vendored
@@ -31,6 +31,9 @@ var rate = _timeseries2.default.rate;
|
||||
var scale = function scale(factor, datapoints) {
|
||||
return _timeseries2.default.scale_perf(datapoints, factor);
|
||||
};
|
||||
var simpleMovingAverage = function simpleMovingAverage(n, datapoints) {
|
||||
return _timeseries2.default.simpleMovingAverage(datapoints, n);
|
||||
};
|
||||
|
||||
var SUM = _timeseries2.default.SUM;
|
||||
var COUNT = _timeseries2.default.COUNT;
|
||||
@@ -121,6 +124,7 @@ var metricFunctions = {
|
||||
scale: scale,
|
||||
delta: delta,
|
||||
rate: rate,
|
||||
simpleMovingAverage: simpleMovingAverage,
|
||||
aggregateBy: aggregateByWrapper,
|
||||
average: _lodash2.default.partial(aggregateWrapper, AVERAGE),
|
||||
min: _lodash2.default.partial(aggregateWrapper, MIN),
|
||||
|
||||
@@ -73,6 +73,13 @@ addFuncDef({
|
||||
defaultParams: []
|
||||
});
|
||||
|
||||
addFuncDef({
|
||||
name: 'simpleMovingAverage',
|
||||
category: 'Transform',
|
||||
params: [{ name: 'factor', type: 'int', options: [6, 10, 60, 600] }],
|
||||
defaultParams: [10]
|
||||
});
|
||||
|
||||
// Aggregate
|
||||
|
||||
addFuncDef({
|
||||
|
||||
44
dist/test/datasource-zabbix/timeseries.js
vendored
44
dist/test/datasource-zabbix/timeseries.js
vendored
@@ -234,6 +234,49 @@ function rate(datapoints) {
|
||||
return newSeries;
|
||||
}
|
||||
|
||||
function simpleMovingAverage(datapoints, n) {
|
||||
var sma = [];
|
||||
var w_sum = void 0;
|
||||
var w_avg = null;
|
||||
var w_count = 0;
|
||||
|
||||
// Initial window
|
||||
for (var j = n; j > 0; j--) {
|
||||
if (datapoints[n - j][POINT_VALUE] !== null) {
|
||||
w_avg += datapoints[n - j][POINT_VALUE];
|
||||
w_count++;
|
||||
}
|
||||
}
|
||||
if (w_count > 0) {
|
||||
w_avg = w_avg / w_count;
|
||||
} else {
|
||||
w_avg = null;
|
||||
}
|
||||
sma.push([w_avg, datapoints[n - 1][POINT_TIMESTAMP]]);
|
||||
|
||||
for (var i = n; i < datapoints.length; i++) {
|
||||
// Insert next value
|
||||
if (datapoints[i][POINT_VALUE] !== null) {
|
||||
w_sum = w_avg * w_count;
|
||||
w_avg = (w_sum + datapoints[i][POINT_VALUE]) / (w_count + 1);
|
||||
w_count++;
|
||||
}
|
||||
// Remove left side point
|
||||
if (datapoints[i - n][POINT_VALUE] !== null) {
|
||||
w_sum = w_avg * w_count;
|
||||
if (w_count > 1) {
|
||||
w_avg = (w_sum - datapoints[i - n][POINT_VALUE]) / (w_count - 1);
|
||||
w_count--;
|
||||
} else {
|
||||
w_avg = null;
|
||||
w_count = 0;
|
||||
}
|
||||
}
|
||||
sma.push([w_avg, datapoints[i][POINT_TIMESTAMP]]);
|
||||
}
|
||||
return sma;
|
||||
}
|
||||
|
||||
function COUNT(values) {
|
||||
return values.length;
|
||||
}
|
||||
@@ -367,6 +410,7 @@ var exportedFunctions = {
|
||||
scale_perf: scale_perf,
|
||||
delta: delta,
|
||||
rate: rate,
|
||||
simpleMovingAverage: simpleMovingAverage,
|
||||
SUM: SUM,
|
||||
COUNT: COUNT,
|
||||
AVERAGE: AVERAGE,
|
||||
|
||||
@@ -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 simpleMovingAverage = (n, datapoints) => ts.simpleMovingAverage(datapoints, n);
|
||||
|
||||
let SUM = ts.SUM;
|
||||
let COUNT = ts.COUNT;
|
||||
@@ -102,6 +103,7 @@ let metricFunctions = {
|
||||
scale: scale,
|
||||
delta: delta,
|
||||
rate: rate,
|
||||
simpleMovingAverage: simpleMovingAverage,
|
||||
aggregateBy: aggregateByWrapper,
|
||||
average: _.partial(aggregateWrapper, AVERAGE),
|
||||
min: _.partial(aggregateWrapper, MIN),
|
||||
|
||||
@@ -57,6 +57,15 @@ addFuncDef({
|
||||
defaultParams: [],
|
||||
});
|
||||
|
||||
addFuncDef({
|
||||
name: 'simpleMovingAverage',
|
||||
category: 'Transform',
|
||||
params: [
|
||||
{ name: 'factor', type: 'int', options: [6, 10, 60, 600] }
|
||||
],
|
||||
defaultParams: [10],
|
||||
});
|
||||
|
||||
// Aggregate
|
||||
|
||||
addFuncDef({
|
||||
|
||||
@@ -226,6 +226,49 @@ function rate(datapoints) {
|
||||
return newSeries;
|
||||
}
|
||||
|
||||
function simpleMovingAverage(datapoints, n) {
|
||||
let sma = [];
|
||||
let w_sum;
|
||||
let w_avg = null;
|
||||
let w_count = 0;
|
||||
|
||||
// Initial window
|
||||
for (let j = n; j > 0; j--) {
|
||||
if (datapoints[n - j][POINT_VALUE] !== null) {
|
||||
w_avg += datapoints[n - j][POINT_VALUE];
|
||||
w_count++;
|
||||
}
|
||||
}
|
||||
if (w_count > 0) {
|
||||
w_avg = w_avg / w_count;
|
||||
} else {
|
||||
w_avg = null;
|
||||
}
|
||||
sma.push([w_avg, datapoints[n - 1][POINT_TIMESTAMP]]);
|
||||
|
||||
for (let i = n; i < datapoints.length; i++) {
|
||||
// Insert next value
|
||||
if (datapoints[i][POINT_VALUE] !== null) {
|
||||
w_sum = w_avg * w_count;
|
||||
w_avg = (w_sum + datapoints[i][POINT_VALUE]) / (w_count + 1);
|
||||
w_count++;
|
||||
}
|
||||
// Remove left side point
|
||||
if (datapoints[i - n][POINT_VALUE] !== null) {
|
||||
w_sum = w_avg * w_count;
|
||||
if (w_count > 1) {
|
||||
w_avg = (w_sum - datapoints[i - n][POINT_VALUE]) / (w_count - 1);
|
||||
w_count--;
|
||||
} else {
|
||||
w_avg = null;
|
||||
w_count = 0;
|
||||
}
|
||||
}
|
||||
sma.push([w_avg, datapoints[i][POINT_TIMESTAMP]]);
|
||||
}
|
||||
return sma;
|
||||
}
|
||||
|
||||
function COUNT(values) {
|
||||
return values.length;
|
||||
}
|
||||
@@ -359,6 +402,7 @@ const exportedFunctions = {
|
||||
scale_perf,
|
||||
delta,
|
||||
rate,
|
||||
simpleMovingAverage,
|
||||
SUM,
|
||||
COUNT,
|
||||
AVERAGE,
|
||||
|
||||
Reference in New Issue
Block a user