mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Moved series override code to TimeSeries
This commit is contained in:
parent
b2f9f81eaf
commit
3ec053bea7
@ -11,6 +11,46 @@ function (_, kbn) {
|
||||
this.label = opts.info.alias;
|
||||
}
|
||||
|
||||
function matchSeriesOverride(aliasOrRegex, seriesAlias) {
|
||||
if (aliasOrRegex[0] === '/') {
|
||||
var match = aliasOrRegex.match(new RegExp('^/(.*?)/(g?i?m?y?)$'));
|
||||
var regex = new RegExp(match[1], match[2]);
|
||||
return seriesAlias.match(regex) != null;
|
||||
}
|
||||
|
||||
return aliasOrRegex === seriesAlias;
|
||||
}
|
||||
|
||||
function translateFillOption(fill) {
|
||||
return fill === 0 ? 0.001 : fill/10;
|
||||
}
|
||||
|
||||
TimeSeries.prototype.applySeriesOverrides = function(overrides) {
|
||||
this.lines = {};
|
||||
this.points = {};
|
||||
this.bars = {};
|
||||
this.info.yaxis = 1;
|
||||
delete this.stack;
|
||||
|
||||
for (var i = 0; i < overrides.length; i++) {
|
||||
var override = overrides[i];
|
||||
if (!matchSeriesOverride(override.alias, this.info.alias)) {
|
||||
continue;
|
||||
}
|
||||
if (override.lines !== void 0) { this.lines.show = override.lines; }
|
||||
if (override.points !== void 0) { this.points.show = override.points; }
|
||||
if (override.bars !== void 0) { this.bars.show = override.bars; }
|
||||
if (override.fill !== void 0) { this.lines.fill = translateFillOption(override.fill); }
|
||||
if (override.stack !== void 0) { this.stack = override.stack; }
|
||||
if (override.linewidth !== void 0) { this.lines.lineWidth = override.linewidth; }
|
||||
if (override.pointradius !== void 0) { this.points.radius = override.pointradius; }
|
||||
if (override.steppedLine !== void 0) { this.lines.steps = override.steppedLine; }
|
||||
if (override.yaxis !== void 0) {
|
||||
this.info.yaxis = override.yaxis;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
TimeSeries.prototype.getFlotPairs = function (fillStyle, yFormats) {
|
||||
var result = [];
|
||||
|
||||
|
@ -118,7 +118,7 @@ function (angular, $, kbn, moment, _) {
|
||||
lines: {
|
||||
show: panel.lines,
|
||||
zero: false,
|
||||
fill: panel.fill === 0 ? 0.001 : panel.fill/10,
|
||||
fill: translateFillOption(panel.fill),
|
||||
lineWidth: panel.linewidth,
|
||||
steps: panel.steppedLine
|
||||
},
|
||||
@ -155,8 +155,8 @@ function (angular, $, kbn, moment, _) {
|
||||
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var series = data[i];
|
||||
series.applySeriesOverrides(panel.seriesOverrides);
|
||||
series.data = series.getFlotPairs(panel.nullPointMode, panel.y_formats);
|
||||
applySeriesOverrideOptions(series);
|
||||
}
|
||||
|
||||
if (data.length && data[0].info.timeStep) {
|
||||
@ -183,42 +183,6 @@ function (angular, $, kbn, moment, _) {
|
||||
}
|
||||
}
|
||||
|
||||
function matchSeriesOverride(aliasOrRegex, seriesAlias) {
|
||||
if (aliasOrRegex[0] === '/') {
|
||||
var match = aliasOrRegex.match(new RegExp('^/(.*?)/(g?i?m?y?)$'));
|
||||
var regex = new RegExp(match[1], match[2]);
|
||||
return seriesAlias.match(regex) != null;
|
||||
}
|
||||
|
||||
return aliasOrRegex === seriesAlias;
|
||||
}
|
||||
|
||||
function applySeriesOverrideOptions(series) {
|
||||
series.lines = {};
|
||||
series.points = {};
|
||||
series.bars = {};
|
||||
delete series.stack;
|
||||
|
||||
for (var i = 0; i < scope.panel.seriesOverrides.length; i++) {
|
||||
var override = scope.panel.seriesOverrides[i];
|
||||
if (!matchSeriesOverride(override.alias, series.info.alias)) {
|
||||
continue;
|
||||
}
|
||||
if (override.lines !== void 0) { series.lines.show = override.lines; }
|
||||
if (override.points !== void 0) { series.points.show = override.points; }
|
||||
if (override.bars !== void 0) { series.bars.show = override.bars; }
|
||||
if (override.fill !== void 0) { series.lines.fill = translateFillOption(override.fill); }
|
||||
if (override.stack !== void 0) { series.stack = override.stack; }
|
||||
if (override.linewidth !== void 0) { series.lines.lineWidth = override.linewidth; }
|
||||
if (override.pointradius !== void 0) { series.points.radius = override.pointradius; }
|
||||
if (override.steppedLine !== void 0) { series.lines.steps = override.steppedLine; }
|
||||
if (override.yaxis !== void 0) {
|
||||
series.yaxis = override.yaxis;
|
||||
series.info.yaxis = override.yaxis;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function translateFillOption(fill) {
|
||||
return fill === 0 ? 0.001 : fill/10;
|
||||
}
|
||||
|
@ -34,12 +34,12 @@
|
||||
|
||||
<div class="editor-row small" style="padding-bottom: 0;">
|
||||
<label>Axis:</label>
|
||||
<button ng-click="toggleYAxis(series)"
|
||||
<button ng-click="toggleYAxis(series);dismiss();"
|
||||
class="btn btn-mini"
|
||||
ng-class="{'btn-success': series.yaxis === 1 }">
|
||||
Left
|
||||
</button>
|
||||
<button ng-click="toggleYAxis(series)"
|
||||
<button ng-click="toggleYAxis(series);dismiss();"
|
||||
class="btn btn-mini"
|
||||
ng-class="{'btn-success': series.yaxis === 2 }">
|
||||
Right
|
||||
|
@ -92,88 +92,6 @@ define([
|
||||
});
|
||||
});
|
||||
|
||||
graphScenario('series option overrides, bars, true & lines false', function(ctx) {
|
||||
ctx.setup(function(scope, data) {
|
||||
scope.panel.lines = true;
|
||||
scope.panel.seriesOverrides = [
|
||||
{ alias: 'test', bars: true, lines: false }
|
||||
];
|
||||
|
||||
data[1].info.alias = 'test';
|
||||
});
|
||||
|
||||
it('should match second series and disable lines, and enable bars', function() {
|
||||
expect(ctx.plotOptions.series.lines.show).to.be(true);
|
||||
expect(ctx.plotData[1].lines.show).to.be(false);
|
||||
expect(ctx.plotData[1].bars.show).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
graphScenario('series option overrides, linewidth, stack', function(ctx) {
|
||||
ctx.setup(function(scope, data) {
|
||||
scope.panel.lines = true;
|
||||
scope.panel.stack = true;
|
||||
scope.panel.linewidth = 2;
|
||||
scope.panel.seriesOverrides = [
|
||||
{ alias: 'test', linewidth: 5, stack: false }
|
||||
];
|
||||
|
||||
data[1].info.alias = 'test';
|
||||
});
|
||||
|
||||
it('should match second series and disable stack, and set lineWidth', function() {
|
||||
expect(ctx.plotOptions.series.stack).to.be(true);
|
||||
expect(ctx.plotData[1].stack).to.be(false);
|
||||
expect(ctx.plotData[1].lines.lineWidth).to.be(5);
|
||||
});
|
||||
});
|
||||
|
||||
graphScenario('series option overrides, pointradius, steppedLine', function(ctx) {
|
||||
ctx.setup(function(scope, data) {
|
||||
scope.panel.seriesOverrides = [
|
||||
{ alias: 'test', pointradius: 5, steppedLine: true }
|
||||
];
|
||||
|
||||
data[1].info.alias = 'test';
|
||||
});
|
||||
|
||||
it('should match second series and set pointradius, and set steppedLine', function() {
|
||||
expect(ctx.plotData[1].points.radius).to.be(5);
|
||||
expect(ctx.plotData[1].lines.steps).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
graphScenario('override match on regex', function(ctx) {
|
||||
ctx.setup(function(scope, data) {
|
||||
scope.panel.lines = true;
|
||||
scope.panel.seriesOverrides = [
|
||||
{ alias: '/.*01/', lines: false }
|
||||
];
|
||||
|
||||
data[1].info.alias = 'test_01';
|
||||
});
|
||||
|
||||
it('should match second series', function() {
|
||||
expect(ctx.plotData[0].lines.show).to.be(undefined);
|
||||
expect(ctx.plotData[1].lines.show).to.be(false);
|
||||
});
|
||||
});
|
||||
|
||||
graphScenario('override series y-axis', function(ctx) {
|
||||
ctx.setup(function(scope, data) {
|
||||
scope.panel.lines = true;
|
||||
scope.panel.seriesOverrides = [
|
||||
{ alias: 'test', yaxis: 2 }
|
||||
];
|
||||
|
||||
data[1].info.alias = 'test';
|
||||
});
|
||||
|
||||
it('should match second series and set yaxis', function() {
|
||||
expect(ctx.plotData[1].yaxis).to.be(2);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
|
111
src/test/specs/timeSeries-specs.js
Normal file
111
src/test/specs/timeSeries-specs.js
Normal file
@ -0,0 +1,111 @@
|
||||
define([
|
||||
'components/timeSeries'
|
||||
], function(TimeSeries) {
|
||||
'use strict';
|
||||
|
||||
describe("TimeSeries", function() {
|
||||
var points, series;
|
||||
var yAxisFormats = ['short', 'ms'];
|
||||
var testData = {
|
||||
info: { alias: 'test' },
|
||||
datapoints: [
|
||||
[1,2],[null,3],[10,4],[8,5]
|
||||
]
|
||||
};
|
||||
|
||||
describe('when getting flot pairs', function() {
|
||||
it('with connected style, should ignore nulls', function() {
|
||||
series = new TimeSeries(testData);
|
||||
points = series.getFlotPairs('connected', yAxisFormats);
|
||||
expect(points.length).to.be(3);
|
||||
});
|
||||
|
||||
it('with null as zero style, should replace nulls with zero', function() {
|
||||
series = new TimeSeries(testData);
|
||||
points = series.getFlotPairs('null as zero', yAxisFormats);
|
||||
expect(points.length).to.be(4);
|
||||
expect(points[1][1]).to.be(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('series overrides', function() {
|
||||
var series;
|
||||
beforeEach(function() {
|
||||
series = new TimeSeries(testData);
|
||||
});
|
||||
|
||||
describe('fill & points', function() {
|
||||
beforeEach(function() {
|
||||
series.info.alias = 'test';
|
||||
series.applySeriesOverrides([{ alias: 'test', fill: 0, points: true }]);
|
||||
});
|
||||
|
||||
it('should set fill zero, and enable points', function() {
|
||||
expect(series.lines.fill).to.be(0.001);
|
||||
expect(series.points.show).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('series option overrides, bars, true & lines false', function() {
|
||||
beforeEach(function() {
|
||||
series.info.alias = 'test';
|
||||
series.applySeriesOverrides([{ alias: 'test', bars: true, lines: false }]);
|
||||
});
|
||||
|
||||
it('should disable lines, and enable bars', function() {
|
||||
expect(series.lines.show).to.be(false);
|
||||
expect(series.bars.show).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('series option overrides, linewidth, stack', function() {
|
||||
beforeEach(function() {
|
||||
series.info.alias = 'test';
|
||||
series.applySeriesOverrides([{ alias: 'test', linewidth: 5, stack: false }]);
|
||||
});
|
||||
|
||||
it('should disable stack, and set lineWidth', function() {
|
||||
expect(series.stack).to.be(false);
|
||||
expect(series.lines.lineWidth).to.be(5);
|
||||
});
|
||||
});
|
||||
|
||||
describe('series option overrides, pointradius, steppedLine', function() {
|
||||
beforeEach(function() {
|
||||
series.info.alias = 'test';
|
||||
series.applySeriesOverrides([{ alias: 'test', pointradius: 5, steppedLine: true }]);
|
||||
});
|
||||
|
||||
it('should set pointradius, and set steppedLine', function() {
|
||||
expect(series.points.radius).to.be(5);
|
||||
expect(series.lines.steps).to.be(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('override match on regex', function() {
|
||||
beforeEach(function() {
|
||||
series.info.alias = 'test_01';
|
||||
series.applySeriesOverrides([{ alias: '/.*01/', lines: false }]);
|
||||
});
|
||||
|
||||
it('should match second series', function() {
|
||||
expect(series.lines.show).to.be(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('override series y-axis', function() {
|
||||
beforeEach(function() {
|
||||
series.info.alias = 'test';
|
||||
series.applySeriesOverrides([{ alias: 'test', yaxis: 2 }]);
|
||||
});
|
||||
|
||||
it('should set yaxis', function() {
|
||||
expect(series.info.yaxis).to.be(2);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
@ -118,6 +118,7 @@ require([
|
||||
'specs/lexer-specs',
|
||||
'specs/parser-specs',
|
||||
'specs/gfunc-specs',
|
||||
'specs/timeSeries-specs',
|
||||
'specs/row-ctrl-specs',
|
||||
'specs/graphiteTargetCtrl-specs',
|
||||
'specs/influxdb-datasource-specs',
|
||||
|
Loading…
Reference in New Issue
Block a user