Add rate() function resistant to counter reset
This commit is contained in:
4
dist/datasource-zabbix/dataProcessor.js
vendored
4
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, scale, SUM, COUNT, AVERAGE, MIN, MAX, MEDIAN, metricFunctions, aggregationFunctions;
|
||||
var _, utils, ts, downsampleSeries, groupBy, groupBy_exported, sumSeries, delta, rate, scale, SUM, COUNT, AVERAGE, MIN, MAX, MEDIAN, metricFunctions, aggregationFunctions;
|
||||
|
||||
function limit(order, n, orderByFunc, timeseries) {
|
||||
var orderByCallback = aggregationFunctions[orderByFunc];
|
||||
@@ -100,6 +100,7 @@ System.register(['lodash', './utils', './timeseries'], function (_export, _conte
|
||||
|
||||
sumSeries = ts.sumSeries;
|
||||
delta = ts.delta;
|
||||
rate = ts.rate;
|
||||
|
||||
scale = function scale(factor, datapoints) {
|
||||
return ts.scale(datapoints, factor);
|
||||
@@ -115,6 +116,7 @@ System.register(['lodash', './utils', './timeseries'], function (_export, _conte
|
||||
groupBy: groupByWrapper,
|
||||
scale: scale,
|
||||
delta: delta,
|
||||
rate: rate,
|
||||
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
@@ -103,6 +103,13 @@ System.register(['lodash', 'jquery'], function (_export, _context) {
|
||||
defaultParams: []
|
||||
});
|
||||
|
||||
addFuncDef({
|
||||
name: 'rate',
|
||||
category: 'Transform',
|
||||
params: [],
|
||||
defaultParams: []
|
||||
});
|
||||
|
||||
// Aggregate
|
||||
|
||||
addFuncDef({
|
||||
|
||||
File diff suppressed because one or more lines are too long
32
dist/datasource-zabbix/timeseries.js
vendored
32
dist/datasource-zabbix/timeseries.js
vendored
@@ -154,6 +154,10 @@ System.register(['lodash', './utils'], function (_export, _context) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple delta. Calculate value delta between points.
|
||||
* @param {*} datapoints
|
||||
*/
|
||||
function delta(datapoints) {
|
||||
var newSeries = [];
|
||||
var deltaValue = void 0;
|
||||
@@ -164,6 +168,33 @@ System.register(['lodash', './utils'], function (_export, _context) {
|
||||
return newSeries;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates rate per second. Resistant to counter reset.
|
||||
* @param {*} datapoints
|
||||
*/
|
||||
function rate(datapoints) {
|
||||
var newSeries = [];
|
||||
var point = void 0,
|
||||
point_prev = void 0;
|
||||
var valueDelta = 0;
|
||||
var timeDelta = 0;
|
||||
for (var i = 1; i < datapoints.length; i++) {
|
||||
point = datapoints[i];
|
||||
point_prev = datapoints[i - 1];
|
||||
|
||||
// Convert ms to seconds
|
||||
timeDelta = (point[POINT_TIMESTAMP] - point_prev[POINT_TIMESTAMP]) / 1000;
|
||||
|
||||
// Handle counter reset - use previous value
|
||||
if (point[POINT_VALUE] >= point_prev[POINT_VALUE]) {
|
||||
valueDelta = (point[POINT_VALUE] - point_prev[POINT_VALUE]) / timeDelta;
|
||||
}
|
||||
|
||||
newSeries.push([valueDelta, point[POINT_TIMESTAMP]]);
|
||||
}
|
||||
return newSeries;
|
||||
}
|
||||
|
||||
function SUM(values) {
|
||||
var sum = 0;
|
||||
_.each(values, function (value) {
|
||||
@@ -292,6 +323,7 @@ System.register(['lodash', './utils'], function (_export, _context) {
|
||||
sumSeries: sumSeries,
|
||||
scale: scale,
|
||||
delta: delta,
|
||||
rate: rate,
|
||||
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
Reference in New Issue
Block a user