feat(influxdb): worked on schema upgrade for new influx query editor
This commit is contained in:
@@ -229,9 +229,9 @@ function (angular, $, _, moment) {
|
|||||||
var i, j, k;
|
var i, j, k;
|
||||||
var oldVersion = this.schemaVersion;
|
var oldVersion = this.schemaVersion;
|
||||||
var panelUpgrades = [];
|
var panelUpgrades = [];
|
||||||
this.schemaVersion = 7;
|
this.schemaVersion = 8;
|
||||||
|
|
||||||
if (oldVersion === 7) {
|
if (oldVersion === 8) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,6 +342,49 @@ function (angular, $, _, moment) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oldVersion < 8) {
|
||||||
|
panelUpgrades.push(function(panel) {
|
||||||
|
_.each(panel.targets, function(target) {
|
||||||
|
// update old influxdb query schema
|
||||||
|
if (target.fields && target.tags && target.groupBy) {
|
||||||
|
if (target.rawQuery) {
|
||||||
|
delete target.fields;
|
||||||
|
delete target.fill;
|
||||||
|
} else {
|
||||||
|
target.select = _.map(target.fields, function(field) {
|
||||||
|
var parts = [];
|
||||||
|
parts.push({type: 'field', params: [field.name]});
|
||||||
|
parts.push({type: field.func, params: []});
|
||||||
|
if (field.mathExpr) {
|
||||||
|
parts.push({type: 'math', params: [field.mathExpr]});
|
||||||
|
}
|
||||||
|
if (field.asExpr) {
|
||||||
|
parts.push({type: 'alias', params: [field.asExpr]});
|
||||||
|
}
|
||||||
|
return parts;
|
||||||
|
});
|
||||||
|
delete target.fields;
|
||||||
|
_.each(target.groupBy, function(part) {
|
||||||
|
if (part.type === 'time' && part.interval) {
|
||||||
|
part.params = [part.interval];
|
||||||
|
delete part.interval;
|
||||||
|
}
|
||||||
|
if (part.type === 'tag' && part.key) {
|
||||||
|
part.params = [part.key];
|
||||||
|
delete part.key;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (target.fill) {
|
||||||
|
target.groupBy.push({type: 'fill', params: [target.fill]});
|
||||||
|
delete target.fill;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (panelUpgrades.length === 0) {
|
if (panelUpgrades.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,13 +144,6 @@ class InfluxQuery {
|
|||||||
return str + '"' + tag.key + '" ' + operator + ' ' + value;
|
return str + '"' + tag.key + '" ' + operator + ' ' + value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private getGroupByTimeInterval(interval) {
|
|
||||||
if (interval === 'auto') {
|
|
||||||
return '$interval';
|
|
||||||
}
|
|
||||||
return interval;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
var target = this.target;
|
var target = this.target;
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,11 @@ function functionRenderer(part, innerExpr) {
|
|||||||
var str = part.def.type + '(';
|
var str = part.def.type + '(';
|
||||||
var parameters = _.map(part.params, (value, index) => {
|
var parameters = _.map(part.params, (value, index) => {
|
||||||
var paramType = part.def.params[index];
|
var paramType = part.def.params[index];
|
||||||
|
if (paramType.type === 'time') {
|
||||||
|
if (value === 'auto') {
|
||||||
|
value = '$interval';
|
||||||
|
}
|
||||||
|
}
|
||||||
if (paramType.quote === 'single') {
|
if (paramType.quote === 'single') {
|
||||||
return "'" + value + "'";
|
return "'" + value + "'";
|
||||||
} else if (paramType.quote === 'double') {
|
} else if (paramType.quote === 'double') {
|
||||||
@@ -186,8 +191,8 @@ QueryPartDef.register({
|
|||||||
QueryPartDef.register({
|
QueryPartDef.register({
|
||||||
type: 'time',
|
type: 'time',
|
||||||
category: groupByTimeFunctions,
|
category: groupByTimeFunctions,
|
||||||
params: [{ name: "rate", type: "interval", options: ['$interval', '1s', '10s', '1m', '5m', '10m', '15m', '1h'] }],
|
params: [{ name: "interval", type: "time", options: ['auto', '1s', '10s', '1m', '5m', '10m', '15m', '1h'] }],
|
||||||
defaultParams: ['$interval'],
|
defaultParams: ['auto'],
|
||||||
renderer: functionRenderer,
|
renderer: functionRenderer,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {describe, beforeEach, it, sinon, expect} from 'test/lib/common';
|
|||||||
|
|
||||||
import InfluxQuery = require('../influx_query');
|
import InfluxQuery = require('../influx_query');
|
||||||
|
|
||||||
describe.only('InfluxQuery', function() {
|
describe('InfluxQuery', function() {
|
||||||
|
|
||||||
describe('render series with mesurement only', function() {
|
describe('render series with mesurement only', function() {
|
||||||
it('should generate correct query', function() {
|
it('should generate correct query', function() {
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ define([
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('dashboard schema version should be set to latest', function() {
|
it('dashboard schema version should be set to latest', function() {
|
||||||
expect(model.schemaVersion).to.be(7);
|
expect(model.schemaVersion).to.be(8);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -248,5 +248,90 @@ define([
|
|||||||
expect(clone.meta).to.be(undefined);
|
expect(clone.meta).to.be(undefined);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('when loading dashboard with old influxdb query schema', function() {
|
||||||
|
var model;
|
||||||
|
var target;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
model = _dashboardSrv.create({
|
||||||
|
rows: [{
|
||||||
|
panels: [{
|
||||||
|
type: 'graph',
|
||||||
|
targets: [{
|
||||||
|
"alias": "$tag_datacenter $tag_source $col",
|
||||||
|
"column": "value",
|
||||||
|
"measurement": "logins.count",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"func": "mean",
|
||||||
|
"name": "value",
|
||||||
|
"mathExpr": "*2",
|
||||||
|
"asExpr": "value"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "one-minute",
|
||||||
|
"func": "mean",
|
||||||
|
"mathExpr": "*3",
|
||||||
|
"asExpr": "one-minute"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": [],
|
||||||
|
"fill": "previous",
|
||||||
|
"function": "mean",
|
||||||
|
"groupBy": [
|
||||||
|
{
|
||||||
|
"interval": "auto",
|
||||||
|
"type": "time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "source",
|
||||||
|
"type": "tag"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "tag",
|
||||||
|
"key": "datacenter"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
|
||||||
|
target = model.rows[0].panels[0].targets[0];
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update query schema', function() {
|
||||||
|
expect(target.fields).to.be(undefined);
|
||||||
|
expect(target.select.length).to.be(2);
|
||||||
|
expect(target.select[0].length).to.be(4);
|
||||||
|
expect(target.select[0][0].type).to.be('field');
|
||||||
|
expect(target.select[0][1].type).to.be('mean');
|
||||||
|
expect(target.select[0][2].type).to.be('math');
|
||||||
|
expect(target.select[0][3].type).to.be('alias');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when creating dashboard model with missing list for annoations or templating', function() {
|
||||||
|
var model;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
model = _dashboardSrv.create({
|
||||||
|
annotations: {
|
||||||
|
enable: true,
|
||||||
|
},
|
||||||
|
templating: {
|
||||||
|
enable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should add empty list', function() {
|
||||||
|
expect(model.annotations.list.length).to.be(0);
|
||||||
|
expect(model.templating.list.length).to.be(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user