mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
first, delta, range passing unit tests
Signed-off-by: Dirk le Roux <dirk.leroux@gmail.com>
This commit is contained in:
parent
f7e8e9c9af
commit
49dda7e5c1
@ -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 {
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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([
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user