diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go
index 0644f158b4c..315385ed938 100644
--- a/pkg/api/frontendsettings.go
+++ b/pkg/api/frontendsettings.go
@@ -38,6 +38,7 @@ func getFrontendSettingsMap(c *middleware.Context) (map[string]interface{}, erro
var dsMap = map[string]interface{}{
"type": ds.Type,
+ "name": ds.Name,
"url": url,
}
diff --git a/src/app/features/annotations/partials/editor.html b/src/app/features/annotations/partials/editor.html
index db56d08f940..799b1f69fe4 100644
--- a/src/app/features/annotations/partials/editor.html
+++ b/src/app/features/annotations/partials/editor.html
@@ -72,7 +72,7 @@
-
+
diff --git a/src/app/features/panellinkeditor/module.html b/src/app/features/panellinkeditor/module.html
index b9525c3545f..7d79eff5a6b 100644
--- a/src/app/features/panellinkeditor/module.html
+++ b/src/app/features/panellinkeditor/module.html
@@ -45,5 +45,5 @@
-
+
diff --git a/src/app/plugins/datasource/elasticsearch/plugin.json b/src/app/plugins/datasource/elasticsearch/plugin.json
index 848730ea990..bd467222a93 100644
--- a/src/app/plugins/datasource/elasticsearch/plugin.json
+++ b/src/app/plugins/datasource/elasticsearch/plugin.json
@@ -9,7 +9,7 @@
"partials": {
"config": "app/plugins/datasource/elasticsearch/partials/config.html",
- "annotations": "app/plugins/datasource/elasticsearch/partials/query.editor.html"
+ "annotations": "app/plugins/datasource/elasticsearch/partials/annotations.editor.html"
},
"annotations": true
diff --git a/src/app/plugins/datasource/graphite/plugin.json b/src/app/plugins/datasource/graphite/plugin.json
index f40cbaf1fed..8e6766f087a 100644
--- a/src/app/plugins/datasource/graphite/plugin.json
+++ b/src/app/plugins/datasource/graphite/plugin.json
@@ -10,7 +10,7 @@
"partials": {
"config": "app/plugins/datasource/graphite/partials/config.html",
"query": "app/plugins/datasource/graphite/partials/query.editor.html",
- "annotations": "app/plugins/datasource/graphite/partials/query.editor.html"
+ "annotations": "app/plugins/datasource/graphite/partials/annotations.editor.html"
},
"metrics": true,
diff --git a/src/app/plugins/datasource/influxdb/plugin.json b/src/app/plugins/datasource/influxdb/plugin.json
index e4260f698c6..c93b41747a7 100644
--- a/src/app/plugins/datasource/influxdb/plugin.json
+++ b/src/app/plugins/datasource/influxdb/plugin.json
@@ -10,7 +10,7 @@
"partials": {
"config": "app/plugins/datasource/influxdb/partials/config.html",
"query": "app/plugins/datasource/influxdb/partials/query.editor.html",
- "annotations": "app/plugins/datasource/influxdb/partials/query.editor.html"
+ "annotations": "app/plugins/datasource/influxdb/partials/annotations.editor.html"
},
"metrics": true,
diff --git a/src/app/plugins/datasource/influxdb_08/plugin.json b/src/app/plugins/datasource/influxdb_08/plugin.json
index 16f4c1e3710..16dedc730a8 100644
--- a/src/app/plugins/datasource/influxdb_08/plugin.json
+++ b/src/app/plugins/datasource/influxdb_08/plugin.json
@@ -10,7 +10,7 @@
"partials": {
"config": "app/plugins/datasource/influxdb_08/partials/config.html",
"query": "app/plugins/datasource/influxdb_08/partials/query.editor.html",
- "annotations": "app/plugins/datasource/influxdb_08/partials/query.editor.html"
+ "annotations": "app/plugins/datasource/influxdb_08/partials/annotations.editor.html"
},
"metrics": true,
diff --git a/src/app/services/datasourceSrv.js b/src/app/services/datasourceSrv.js
index 5fc5885077d..82a19efdff0 100644
--- a/src/app/services/datasourceSrv.js
+++ b/src/app/services/datasourceSrv.js
@@ -20,13 +20,15 @@ function (angular, _, config) {
_.each(config.datasources, function(value, key) {
if (value.meta && value.meta.metrics) {
- self.metricSources.push({ value: key, name: key });
+ self.metricSources.push({
+ value: key === config.defaultDatasource ? null : key,
+ name: key
+ });
+ }
+ if (value.meta && value.meta.annotations) {
+ self.annotationSources.push(value);
}
});
-
- if (!config.defaultDatasource) {
- $rootScope.appEvent('alert-error', ["No default data source found", ""]);
- }
};
this.get = function(name) {
diff --git a/src/test/specs/influxQueryBuilder-specs.js b/src/test/specs/influxQueryBuilder-specs.js
index fa8996ee0c4..4840c6f3bad 100644
--- a/src/test/specs/influxQueryBuilder-specs.js
+++ b/src/test/specs/influxQueryBuilder-specs.js
@@ -1,78 +1,78 @@
define([
- 'features/influxdb/queryBuilder'
-], function(/*InfluxQueryBuilder*/) {
+ 'plugins/datasource/influxdb_08/queryBuilder'
+], function(InfluxQueryBuilder) {
'use strict';
- // describe('InfluxQueryBuilder', function() {
- //
- // describe('series with conditon and group by', function() {
- // var builder = new InfluxQueryBuilder({
- // series: 'google.test',
- // column: 'value',
- // function: 'mean',
- // condition: "code=1",
- // groupby_field: 'code'
- // });
- //
- // var query = builder.build();
- //
- // it('should generate correct query', function() {
- // expect(query).to.be('select code, mean(value) from "google.test" where $timeFilter and code=1 ' +
- // 'group by time($interval), code order asc');
- // });
- //
- // it('should expose groupByFiled', function() {
- // expect(builder.groupByField).to.be('code');
- // });
- //
- // });
- //
- // describe('series with fill and minimum group by time', function() {
- // var builder = new InfluxQueryBuilder({
- // series: 'google.test',
- // column: 'value',
- // function: 'mean',
- // fill: '0',
- // });
- //
- // var query = builder.build();
- //
- // it('should generate correct query', function() {
- // expect(query).to.be('select mean(value) from "google.test" where $timeFilter ' +
- // 'group by time($interval) fill(0) order asc');
- // });
- //
- // });
- //
- // describe('merge function detection', function() {
- // it('should not quote wrap regex merged series', function() {
- // var builder = new InfluxQueryBuilder({
- // series: 'merge(/^google.test/)',
- // column: 'value',
- // function: 'mean'
- // });
- //
- // var query = builder.build();
- //
- // expect(query).to.be('select mean(value) from merge(/^google.test/) where $timeFilter ' +
- // 'group by time($interval) order asc');
- // });
- //
- // it('should quote wrap series names that start with "merge"', function() {
- // var builder = new InfluxQueryBuilder({
- // series: 'merge.google.test',
- // column: 'value',
- // function: 'mean'
- // });
- //
- // var query = builder.build();
- //
- // expect(query).to.be('select mean(value) from "merge.google.test" where $timeFilter ' +
- // 'group by time($interval) order asc');
- // });
- //
- // });
- //
- // });
+ describe('InfluxQueryBuilder', function() {
+
+ describe('series with conditon and group by', function() {
+ var builder = new InfluxQueryBuilder({
+ series: 'google.test',
+ column: 'value',
+ function: 'mean',
+ condition: "code=1",
+ groupby_field: 'code'
+ });
+
+ var query = builder.build();
+
+ it('should generate correct query', function() {
+ expect(query).to.be('select code, mean(value) from "google.test" where $timeFilter and code=1 ' +
+ 'group by time($interval), code order asc');
+ });
+
+ it('should expose groupByFiled', function() {
+ expect(builder.groupByField).to.be('code');
+ });
+
+ });
+
+ describe('series with fill and minimum group by time', function() {
+ var builder = new InfluxQueryBuilder({
+ series: 'google.test',
+ column: 'value',
+ function: 'mean',
+ fill: '0',
+ });
+
+ var query = builder.build();
+
+ it('should generate correct query', function() {
+ expect(query).to.be('select mean(value) from "google.test" where $timeFilter ' +
+ 'group by time($interval) fill(0) order asc');
+ });
+
+ });
+
+ describe('merge function detection', function() {
+ it('should not quote wrap regex merged series', function() {
+ var builder = new InfluxQueryBuilder({
+ series: 'merge(/^google.test/)',
+ column: 'value',
+ function: 'mean'
+ });
+
+ var query = builder.build();
+
+ expect(query).to.be('select mean(value) from merge(/^google.test/) where $timeFilter ' +
+ 'group by time($interval) order asc');
+ });
+
+ it('should quote wrap series names that start with "merge"', function() {
+ var builder = new InfluxQueryBuilder({
+ series: 'merge.google.test',
+ column: 'value',
+ function: 'mean'
+ });
+
+ var query = builder.build();
+
+ expect(query).to.be('select mean(value) from "merge.google.test" where $timeFilter ' +
+ 'group by time($interval) order asc');
+ });
+
+ });
+
+ });
});
diff --git a/src/test/specs/influxSeries-specs.js b/src/test/specs/influxSeries-specs.js
index 4c6ce2b4917..47fb77b67b3 100644
--- a/src/test/specs/influxSeries-specs.js
+++ b/src/test/specs/influxSeries-specs.js
@@ -1,220 +1,220 @@
define([
- 'features/influxdb/influxSeries'
-], function(/*InfluxSeries*/) {
+ 'plugins/datasource/influxdb_08/influxSeries'
+], function(InfluxSeries) {
'use strict';
- // describe('when generating timeseries from influxdb response', function() {
- //
- // describe('given two series', function() {
- // var series = new InfluxSeries({
- // seriesList: [
- // {
- // columns: ['time', 'mean', 'sequence_number'],
- // name: 'prod.server1.cpu',
- // points: [[1402596000, 10, 1], [1402596001, 12, 2]]
- // },
- // {
- // columns: ['time', 'mean', 'sequence_number'],
- // name: 'prod.server2.cpu',
- // points: [[1402596000, 15, 1], [1402596001, 16, 2]]
- // }
- // ]
- // });
- //
- // var result = series.getTimeSeries();
- //
- // it('should generate two time series', function() {
- // expect(result.length).to.be(2);
- // expect(result[0].target).to.be('prod.server1.cpu.mean');
- // expect(result[0].datapoints[0][0]).to.be(10);
- // expect(result[0].datapoints[0][1]).to.be(1402596000);
- // expect(result[0].datapoints[1][0]).to.be(12);
- // expect(result[0].datapoints[1][1]).to.be(1402596001);
- //
- // expect(result[1].target).to.be('prod.server2.cpu.mean');
- // expect(result[1].datapoints[0][0]).to.be(15);
- // expect(result[1].datapoints[0][1]).to.be(1402596000);
- // expect(result[1].datapoints[1][0]).to.be(16);
- // expect(result[1].datapoints[1][1]).to.be(1402596001);
- // });
- //
- // });
- //
- // describe('given an alias format', function() {
- // var series = new InfluxSeries({
- // seriesList: [
- // {
- // columns: ['time', 'mean', 'sequence_number'],
- // name: 'prod.server1.cpu',
- // points: [[1402596000, 10, 1], [1402596001, 12, 2]]
- // }
- // ],
- // alias: '$s.testing'
- // });
- //
- // var result = series.getTimeSeries();
- //
- // it('should generate correct series name', function() {
- // expect(result[0].target).to.be('prod.server1.cpu.testing');
- // });
- //
- // });
- //
- // describe('given an alias format with segment numbers', function() {
- // var series = new InfluxSeries({
- // seriesList: [
- // {
- // columns: ['time', 'mean', 'sequence_number'],
- // name: 'prod.server1.cpu',
- // points: [[1402596000, 10, 1], [1402596001, 12, 2]]
- // }
- // ],
- // alias: '$1.mean'
- // });
- //
- // var result = series.getTimeSeries();
- //
- // it('should generate correct series name', function() {
- // expect(result[0].target).to.be('server1.mean');
- // });
- //
- // });
- //
- // describe('given an alias format and many segments', function() {
- // var series = new InfluxSeries({
- // seriesList: [
- // {
- // columns: ['time', 'mean', 'sequence_number'],
- // name: 'a0.a1.a2.a3.a4.a5.a6.a7.a8.a9.a10.a11.a12',
- // points: [[1402596000, 10, 1], [1402596001, 12, 2]]
- // }
- // ],
- // alias: '$5.$11.mean'
- // });
- //
- // var result = series.getTimeSeries();
- //
- // it('should generate correct series name', function() {
- // expect(result[0].target).to.be('a5.a11.mean');
- // });
- //
- // });
- //
- //
- // describe('given an alias format with group by field', function() {
- // var series = new InfluxSeries({
- // seriesList: [
- // {
- // columns: ['time', 'mean', 'host'],
- // name: 'prod.cpu',
- // points: [[1402596000, 10, 'A']]
- // }
- // ],
- // groupByField: 'host',
- // alias: '$g.$1'
- // });
- //
- // var result = series.getTimeSeries();
- //
- // it('should generate correct series name', function() {
- // expect(result[0].target).to.be('A.cpu');
- // });
- //
- // });
- //
- // describe('given group by column', function() {
- // var series = new InfluxSeries({
- // seriesList: [
- // {
- // columns: ['time', 'mean', 'host'],
- // name: 'prod.cpu',
- // points: [
- // [1402596000, 10, 'A'],
- // [1402596001, 11, 'A'],
- // [1402596000, 5, 'B'],
- // [1402596001, 6, 'B'],
- // ]
- // }
- // ],
- // groupByField: 'host'
- // });
- //
- // var result = series.getTimeSeries();
- //
- // it('should generate two time series', function() {
- // expect(result.length).to.be(2);
- // expect(result[0].target).to.be('prod.cpu.A');
- // expect(result[0].datapoints[0][0]).to.be(10);
- // expect(result[0].datapoints[0][1]).to.be(1402596000);
- // expect(result[0].datapoints[1][0]).to.be(11);
- // expect(result[0].datapoints[1][1]).to.be(1402596001);
- //
- // expect(result[1].target).to.be('prod.cpu.B');
- // expect(result[1].datapoints[0][0]).to.be(5);
- // expect(result[1].datapoints[0][1]).to.be(1402596000);
- // expect(result[1].datapoints[1][0]).to.be(6);
- // expect(result[1].datapoints[1][1]).to.be(1402596001);
- // });
- //
- // });
- //
- // });
- //
- // describe("when creating annotations from influxdb response", function() {
- // describe('given column mapping for all columns', function() {
- // var series = new InfluxSeries({
- // seriesList: [
- // {
- // columns: ['time', 'text', 'sequence_number', 'title', 'tags'],
- // name: 'events1',
- // points: [[1402596000000, 'some text', 1, 'Hello', 'B'], [1402596001000, 'asd', 2, 'Hello2', 'B']]
- // }
- // ],
- // annotation: {
- // query: 'select',
- // titleColumn: 'title',
- // tagsColumn: 'tags',
- // textColumn: 'text',
- // }
- // });
- //
- // var result = series.getAnnotations();
- //
- // it(' should generate 2 annnotations ', function() {
- // expect(result.length).to.be(2);
- // expect(result[0].annotation.query).to.be('select');
- // expect(result[0].title).to.be('Hello');
- // expect(result[0].time).to.be(1402596000000);
- // expect(result[0].tags).to.be('B');
- // expect(result[0].text).to.be('some text');
- // });
- //
- // });
- //
- // describe('given no column mapping', function() {
- // var series = new InfluxSeries({
- // seriesList: [
- // {
- // columns: ['time', 'text', 'sequence_number'],
- // name: 'events1',
- // points: [[1402596000000, 'some text', 1]]
- // }
- // ],
- // annotation: { query: 'select' }
- // });
- //
- // var result = series.getAnnotations();
- //
- // it('should generate 1 annnotation', function() {
- // expect(result.length).to.be(1);
- // expect(result[0].title).to.be('some text');
- // expect(result[0].time).to.be(1402596000000);
- // expect(result[0].tags).to.be(undefined);
- // expect(result[0].text).to.be(undefined);
- // });
- //
- // });
- //
- // });
+ describe('when generating timeseries from influxdb response', function() {
+
+ describe('given two series', function() {
+ var series = new InfluxSeries({
+ seriesList: [
+ {
+ columns: ['time', 'mean', 'sequence_number'],
+ name: 'prod.server1.cpu',
+ points: [[1402596000, 10, 1], [1402596001, 12, 2]]
+ },
+ {
+ columns: ['time', 'mean', 'sequence_number'],
+ name: 'prod.server2.cpu',
+ points: [[1402596000, 15, 1], [1402596001, 16, 2]]
+ }
+ ]
+ });
+
+ var result = series.getTimeSeries();
+
+ it('should generate two time series', function() {
+ expect(result.length).to.be(2);
+ expect(result[0].target).to.be('prod.server1.cpu.mean');
+ expect(result[0].datapoints[0][0]).to.be(10);
+ expect(result[0].datapoints[0][1]).to.be(1402596000);
+ expect(result[0].datapoints[1][0]).to.be(12);
+ expect(result[0].datapoints[1][1]).to.be(1402596001);
+
+ expect(result[1].target).to.be('prod.server2.cpu.mean');
+ expect(result[1].datapoints[0][0]).to.be(15);
+ expect(result[1].datapoints[0][1]).to.be(1402596000);
+ expect(result[1].datapoints[1][0]).to.be(16);
+ expect(result[1].datapoints[1][1]).to.be(1402596001);
+ });
+
+ });
+
+ describe('given an alias format', function() {
+ var series = new InfluxSeries({
+ seriesList: [
+ {
+ columns: ['time', 'mean', 'sequence_number'],
+ name: 'prod.server1.cpu',
+ points: [[1402596000, 10, 1], [1402596001, 12, 2]]
+ }
+ ],
+ alias: '$s.testing'
+ });
+
+ var result = series.getTimeSeries();
+
+ it('should generate correct series name', function() {
+ expect(result[0].target).to.be('prod.server1.cpu.testing');
+ });
+
+ });
+
+ describe('given an alias format with segment numbers', function() {
+ var series = new InfluxSeries({
+ seriesList: [
+ {
+ columns: ['time', 'mean', 'sequence_number'],
+ name: 'prod.server1.cpu',
+ points: [[1402596000, 10, 1], [1402596001, 12, 2]]
+ }
+ ],
+ alias: '$1.mean'
+ });
+
+ var result = series.getTimeSeries();
+
+ it('should generate correct series name', function() {
+ expect(result[0].target).to.be('server1.mean');
+ });
+
+ });
+
+ describe('given an alias format and many segments', function() {
+ var series = new InfluxSeries({
+ seriesList: [
+ {
+ columns: ['time', 'mean', 'sequence_number'],
+ name: 'a0.a1.a2.a3.a4.a5.a6.a7.a8.a9.a10.a11.a12',
+ points: [[1402596000, 10, 1], [1402596001, 12, 2]]
+ }
+ ],
+ alias: '$5.$11.mean'
+ });
+
+ var result = series.getTimeSeries();
+
+ it('should generate correct series name', function() {
+ expect(result[0].target).to.be('a5.a11.mean');
+ });
+
+ });
+
+
+ describe('given an alias format with group by field', function() {
+ var series = new InfluxSeries({
+ seriesList: [
+ {
+ columns: ['time', 'mean', 'host'],
+ name: 'prod.cpu',
+ points: [[1402596000, 10, 'A']]
+ }
+ ],
+ groupByField: 'host',
+ alias: '$g.$1'
+ });
+
+ var result = series.getTimeSeries();
+
+ it('should generate correct series name', function() {
+ expect(result[0].target).to.be('A.cpu');
+ });
+
+ });
+
+ describe('given group by column', function() {
+ var series = new InfluxSeries({
+ seriesList: [
+ {
+ columns: ['time', 'mean', 'host'],
+ name: 'prod.cpu',
+ points: [
+ [1402596000, 10, 'A'],
+ [1402596001, 11, 'A'],
+ [1402596000, 5, 'B'],
+ [1402596001, 6, 'B'],
+ ]
+ }
+ ],
+ groupByField: 'host'
+ });
+
+ var result = series.getTimeSeries();
+
+ it('should generate two time series', function() {
+ expect(result.length).to.be(2);
+ expect(result[0].target).to.be('prod.cpu.A');
+ expect(result[0].datapoints[0][0]).to.be(10);
+ expect(result[0].datapoints[0][1]).to.be(1402596000);
+ expect(result[0].datapoints[1][0]).to.be(11);
+ expect(result[0].datapoints[1][1]).to.be(1402596001);
+
+ expect(result[1].target).to.be('prod.cpu.B');
+ expect(result[1].datapoints[0][0]).to.be(5);
+ expect(result[1].datapoints[0][1]).to.be(1402596000);
+ expect(result[1].datapoints[1][0]).to.be(6);
+ expect(result[1].datapoints[1][1]).to.be(1402596001);
+ });
+
+ });
+
+ });
+
+ describe("when creating annotations from influxdb response", function() {
+ describe('given column mapping for all columns', function() {
+ var series = new InfluxSeries({
+ seriesList: [
+ {
+ columns: ['time', 'text', 'sequence_number', 'title', 'tags'],
+ name: 'events1',
+ points: [[1402596000000, 'some text', 1, 'Hello', 'B'], [1402596001000, 'asd', 2, 'Hello2', 'B']]
+ }
+ ],
+ annotation: {
+ query: 'select',
+ titleColumn: 'title',
+ tagsColumn: 'tags',
+ textColumn: 'text',
+ }
+ });
+
+ var result = series.getAnnotations();
+
+ it(' should generate 2 annnotations ', function() {
+ expect(result.length).to.be(2);
+ expect(result[0].annotation.query).to.be('select');
+ expect(result[0].title).to.be('Hello');
+ expect(result[0].time).to.be(1402596000000);
+ expect(result[0].tags).to.be('B');
+ expect(result[0].text).to.be('some text');
+ });
+
+ });
+
+ describe('given no column mapping', function() {
+ var series = new InfluxSeries({
+ seriesList: [
+ {
+ columns: ['time', 'text', 'sequence_number'],
+ name: 'events1',
+ points: [[1402596000000, 'some text', 1]]
+ }
+ ],
+ annotation: { query: 'select' }
+ });
+
+ var result = series.getAnnotations();
+
+ it('should generate 1 annnotation', function() {
+ expect(result.length).to.be(1);
+ expect(result[0].title).to.be('some text');
+ expect(result[0].time).to.be(1402596000000);
+ expect(result[0].tags).to.be(undefined);
+ expect(result[0].text).to.be(undefined);
+ });
+
+ });
+
+ });
});
diff --git a/src/test/specs/influxdb-datasource-specs.js b/src/test/specs/influxdb-datasource-specs.js
index 1ae918adf61..d28712972a3 100644
--- a/src/test/specs/influxdb-datasource-specs.js
+++ b/src/test/specs/influxdb-datasource-specs.js
@@ -1,100 +1,100 @@
define([
'helpers',
- 'features/influxdb/datasource'
-], function(/*helpers*/) {
+ 'plugins/datasource/influxdb_08/datasource'
+], function(helpers) {
'use strict';
- // describe('InfluxDatasource', function() {
- // var ctx = new helpers.ServiceTestContext();
- //
- // beforeEach(module('grafana.services'));
- // beforeEach(ctx.providePhase(['templateSrv']));
- // beforeEach(ctx.createService('InfluxDatasource'));
- // beforeEach(function() {
- // ctx.ds = new ctx.service({ url: '', user: 'test', password: 'mupp' });
- // });
- //
- // describe('When querying influxdb with one target using query editor target spec', function() {
- // var results;
- // var urlExpected = "/series?p=mupp&q=select+mean(value)+from+%22test%22"+
- // "+where+time+%3E+now()-1h+group+by+time(1s)+order+asc";
- // var query = {
- // range: { from: 'now-1h', to: 'now' },
- // targets: [{ series: 'test', column: 'value', function: 'mean' }],
- // interval: '1s'
- // };
- //
- // var response = [{
- // columns: ["time", "sequence_nr", "value"],
- // name: 'test',
- // points: [[10, 1, 1]],
- // }];
- //
- // beforeEach(function() {
- // ctx.$httpBackend.expect('GET', urlExpected).respond(response);
- // ctx.ds.query(query).then(function(data) { results = data; });
- // ctx.$httpBackend.flush();
- // });
- //
- // it('should generate the correct query', function() {
- // ctx.$httpBackend.verifyNoOutstandingExpectation();
- // });
- //
- // it('should return series list', function() {
- // expect(results.data.length).to.be(1);
- // expect(results.data[0].target).to.be('test.value');
- // });
- //
- // });
- //
- // describe('When querying influxdb with one raw query', function() {
- // var results;
- // var urlExpected = "/series?p=mupp&q=select+value+from+series"+
- // "+where+time+%3E+now()-1h";
- // var query = {
- // range: { from: 'now-1h', to: 'now' },
- // targets: [{ query: "select value from series where $timeFilter", rawQuery: true }]
- // };
- //
- // var response = [];
- //
- // beforeEach(function() {
- // ctx.$httpBackend.expect('GET', urlExpected).respond(response);
- // ctx.ds.query(query).then(function(data) { results = data; });
- // ctx.$httpBackend.flush();
- // });
- //
- // it('should generate the correct query', function() {
- // ctx.$httpBackend.verifyNoOutstandingExpectation();
- // });
- //
- // });
- //
- // describe('When issuing annotation query', function() {
- // var results;
- // var urlExpected = "/series?p=mupp&q=select+title+from+events.backend_01"+
- // "+where+time+%3E+now()-1h";
- //
- // var range = { from: 'now-1h', to: 'now' };
- // var annotation = { query: 'select title from events.$server where $timeFilter' };
- // var response = [];
- //
- // beforeEach(function() {
- // ctx.templateSrv.replace = function(str) {
- // return str.replace('$server', 'backend_01');
- // };
- // ctx.$httpBackend.expect('GET', urlExpected).respond(response);
- // ctx.ds.annotationQuery(annotation, range).then(function(data) { results = data; });
- // ctx.$httpBackend.flush();
- // });
- //
- // it('should generate the correct query', function() {
- // ctx.$httpBackend.verifyNoOutstandingExpectation();
- // });
- //
- // });
- //
- // });
- //
+ describe('InfluxDatasource', function() {
+ var ctx = new helpers.ServiceTestContext();
+
+ beforeEach(module('grafana.services'));
+ beforeEach(ctx.providePhase(['templateSrv']));
+ beforeEach(ctx.createService('InfluxDatasource_08'));
+ beforeEach(function() {
+ ctx.ds = new ctx.service({ url: '', user: 'test', password: 'mupp' });
+ });
+
+ describe('When querying influxdb with one target using query editor target spec', function() {
+ var results;
+ var urlExpected = "/series?p=mupp&q=select+mean(value)+from+%22test%22"+
+ "+where+time+%3E+now()-1h+group+by+time(1s)+order+asc";
+ var query = {
+ range: { from: 'now-1h', to: 'now' },
+ targets: [{ series: 'test', column: 'value', function: 'mean' }],
+ interval: '1s'
+ };
+
+ var response = [{
+ columns: ["time", "sequence_nr", "value"],
+ name: 'test',
+ points: [[10, 1, 1]],
+ }];
+
+ beforeEach(function() {
+ ctx.$httpBackend.expect('GET', urlExpected).respond(response);
+ ctx.ds.query(query).then(function(data) { results = data; });
+ ctx.$httpBackend.flush();
+ });
+
+ it('should generate the correct query', function() {
+ ctx.$httpBackend.verifyNoOutstandingExpectation();
+ });
+
+ it('should return series list', function() {
+ expect(results.data.length).to.be(1);
+ expect(results.data[0].target).to.be('test.value');
+ });
+
+ });
+
+ describe('When querying influxdb with one raw query', function() {
+ var results;
+ var urlExpected = "/series?p=mupp&q=select+value+from+series"+
+ "+where+time+%3E+now()-1h";
+ var query = {
+ range: { from: 'now-1h', to: 'now' },
+ targets: [{ query: "select value from series where $timeFilter", rawQuery: true }]
+ };
+
+ var response = [];
+
+ beforeEach(function() {
+ ctx.$httpBackend.expect('GET', urlExpected).respond(response);
+ ctx.ds.query(query).then(function(data) { results = data; });
+ ctx.$httpBackend.flush();
+ });
+
+ it('should generate the correct query', function() {
+ ctx.$httpBackend.verifyNoOutstandingExpectation();
+ });
+
+ });
+
+ describe('When issuing annotation query', function() {
+ var results;
+ var urlExpected = "/series?p=mupp&q=select+title+from+events.backend_01"+
+ "+where+time+%3E+now()-1h";
+
+ var range = { from: 'now-1h', to: 'now' };
+ var annotation = { query: 'select title from events.$server where $timeFilter' };
+ var response = [];
+
+ beforeEach(function() {
+ ctx.templateSrv.replace = function(str) {
+ return str.replace('$server', 'backend_01');
+ };
+ ctx.$httpBackend.expect('GET', urlExpected).respond(response);
+ ctx.ds.annotationQuery(annotation, range).then(function(data) { results = data; });
+ ctx.$httpBackend.flush();
+ });
+
+ it('should generate the correct query', function() {
+ ctx.$httpBackend.verifyNoOutstandingExpectation();
+ });
+
+ });
+
+ });
+
});
diff --git a/src/test/specs/templateValuesSrv-specs.js b/src/test/specs/templateValuesSrv-specs.js
index 0fe00fd9e68..323b1495404 100644
--- a/src/test/specs/templateValuesSrv-specs.js
+++ b/src/test/specs/templateValuesSrv-specs.js
@@ -38,7 +38,7 @@ define([
scenario.setupFn();
var ds = {};
ds.metricFindQuery = sinon.stub().returns(ctx.$q.when(scenario.queryResult));
- ctx.datasourceSrv.get = sinon.stub().returns(ds);
+ ctx.datasourceSrv.get = sinon.stub().returns(ctx.$q.when(ds));
ctx.service.updateOptions(scenario.variable);
ctx.$rootScope.$digest();