Commit 49dda7e5 by Dirk le Roux Committed by Dirk le Roux

first, delta, range passing unit tests

Signed-off-by: Dirk le Roux <dirk.leroux@gmail.com>
parent f7e8e9c9
...@@ -102,6 +102,9 @@ export default class TimeSeries { ...@@ -102,6 +102,9 @@ export default class TimeSeries {
this.stats.min = Number.MAX_VALUE; this.stats.min = Number.MAX_VALUE;
this.stats.avg = null; this.stats.avg = null;
this.stats.current = null; this.stats.current = null;
this.stats.first = null;
this.stats.delta = 0;
this.stats.range = null;
this.stats.timeStep = Number.MAX_VALUE; this.stats.timeStep = Number.MAX_VALUE;
this.allIsNull = true; this.allIsNull = true;
this.allIsZero = true; this.allIsZero = true;
...@@ -112,6 +115,8 @@ export default class TimeSeries { ...@@ -112,6 +115,8 @@ export default class TimeSeries {
var currentValue; var currentValue;
var nonNulls = 0; var nonNulls = 0;
var previousTime; var previousTime;
var previousValue = 0;
var previousDeltaUp = true;
for (var i = 0; i < this.datapoints.length; i++) { for (var i = 0; i < this.datapoints.length; i++) {
currentValue = this.datapoints[i][0]; currentValue = this.datapoints[i][0];
...@@ -148,6 +153,24 @@ export default class TimeSeries { ...@@ -148,6 +153,24 @@ export default class TimeSeries {
if (currentValue < this.stats.min) { if (currentValue < this.stats.min) {
this.stats.min = currentValue; this.stats.min = currentValue;
} }
if (this.stats.first === null){
this.stats.first = currentValue;
}else{
if (previousValue > currentValue) { // counter reset
previousDeltaUp = false;
if (i === this.datapoints.length-1) { // reset on last
this.stats.delta += currentValue;
}
}else{
if (previousDeltaUp) {
this.stats.delta += currentValue - previousValue; // normal increment
} else {
this.stats.delta += currentValue; // account for counter reset
}
previousDeltaUp = true;
}
}
previousValue = currentValue;
} }
if (currentValue !== 0) { if (currentValue !== 0) {
...@@ -167,6 +190,9 @@ export default class TimeSeries { ...@@ -167,6 +190,9 @@ export default class TimeSeries {
this.stats.current = result[result.length-2][1]; this.stats.current = result[result.length-2][1];
} }
} }
if (this.stats.max !== null && this.stats.min !== null) {
this.stats.range = this.stats.max - this.stats.min;
}
this.stats.count = result.length; this.stats.count = result.length;
return result; return result;
......
...@@ -21,7 +21,7 @@ class SingleStatCtrl extends MetricsPanelCtrl { ...@@ -21,7 +21,7 @@ class SingleStatCtrl extends MetricsPanelCtrl {
invalidGaugeRange: boolean; invalidGaugeRange: boolean;
panel: any; panel: any;
events: any; events: any;
valueNameOptions: any[] = ['min','max','avg', 'current', 'total', 'name']; valueNameOptions: any[] = ['min','max','avg', 'current', 'total', 'name', 'first', 'delta', 'range'];
// Set and populate defaults // Set and populate defaults
panelDefaults = { panelDefaults = {
......
...@@ -49,6 +49,63 @@ define([ ...@@ -49,6 +49,63 @@ define([
expect(series.stats.avg).to.be(6.333333333333333); expect(series.stats.avg).to.be(6.333333333333333);
}); });
it('the delta value should account for nulls', function() {
series = new TimeSeries({
datapoints: [[1,2],[3,3],[null,4],[10,5],[15,6]]
});
series.getFlotPairs('null', yAxisFormats);
expect(series.stats.delta).to.be(14);
});
it('the delta value should account for nulls on first', function() {
series = new TimeSeries({
datapoints: [[null,2],[1,3],[10,4],[15,5]]
});
series.getFlotPairs('null', yAxisFormats);
expect(series.stats.delta).to.be(14);
});
it('the delta value should account for nulls on last', function() {
series = new TimeSeries({
datapoints: [[1,2],[5,3],[10,4],[null,5]]
});
series.getFlotPairs('null', yAxisFormats);
expect(series.stats.delta).to.be(9);
});
it('the delta value should account for resets', function() {
series = new TimeSeries({
datapoints: [[1,2],[5,3],[10,4],[0,5],[10,6]]
});
series.getFlotPairs('null', yAxisFormats);
expect(series.stats.delta).to.be(19);
});
it('the delta value should account for resets on last', function() {
series = new TimeSeries({
datapoints: [[1,2],[2,3],[10,4],[8,5]]
});
series.getFlotPairs('null', yAxisFormats);
expect(series.stats.delta).to.be(17);
});
it('the range value should be max - min', function() {
series = new TimeSeries(testData);
series.getFlotPairs('null', yAxisFormats);
expect(series.stats.range).to.be(9);
});
it('first value should ingone nulls', function() {
series = new TimeSeries(testData);
series.getFlotPairs('null', yAxisFormats);
expect(series.stats.first).to.be(1);
series = new TimeSeries({
datapoints: [[null,2],[1,3],[10,4],[8,5]]
});
series.getFlotPairs('null', yAxisFormats);
expect(series.stats.first).to.be(1);
});
it('with null as zero style, average value should treat nulls as 0', function() { it('with null as zero style, average value should treat nulls as 0', function() {
series = new TimeSeries(testData); series = new TimeSeries(testData);
series.getFlotPairs('null as zero', yAxisFormats); series.getFlotPairs('null as zero', yAxisFormats);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment