From 93b2b9b7b0bbcf7ce7d425353fa1fee040034b8a Mon Sep 17 00:00:00 2001 From: Pierre-Luc Brunet Date: Mon, 30 Jun 2014 12:13:39 -0400 Subject: [PATCH 01/10] Fixed invalid references to grid.min and grid.max in function render_panel_as_graphite_png() --- src/app/directives/grafanaGraph.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/directives/grafanaGraph.js b/src/app/directives/grafanaGraph.js index e7dec1abfd5..4baaaa62fd2 100755 --- a/src/app/directives/grafanaGraph.js +++ b/src/app/directives/grafanaGraph.js @@ -353,8 +353,10 @@ function (angular, $, kbn, moment, _) { url += scope.panel.fill !== 0 ? ('&areaAlpha=' + (scope.panel.fill/10).toFixed(1)) : ''; url += scope.panel.linewidth !== 0 ? '&lineWidth=' + scope.panel.linewidth : ''; url += scope.panel.legend.show ? '&hideLegend=false' : '&hideLegend=true'; - url += scope.panel.grid.min !== null ? '&yMin=' + scope.panel.grid.min : ''; - url += scope.panel.grid.max !== null ? '&yMax=' + scope.panel.grid.max : ''; + url += scope.panel.grid.leftMin !== null ? '&yMin=' + scope.panel.grid.leftMin : ''; + url += scope.panel.grid.leftMax !== null ? '&yMax=' + scope.panel.grid.leftMax : ''; + url += scope.panel.grid.rightMin !== null ? '&yMin=' + scope.panel.grid.rightMin : ''; + url += scope.panel.grid.rightMax !== null ? '&yMax=' + scope.panel.grid.rightMax : ''; url += scope.panel['x-axis'] ? '' : '&hideAxes=true'; url += scope.panel['y-axis'] ? '' : '&hideYAxis=true'; From e1e6ba36caf7570dc985d65f5fc379b57cd49ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Tue, 1 Jul 2014 15:55:56 +0200 Subject: [PATCH 02/10] Refactoring influxdb datasource, split out response handling --- .../services/influxdb/influxdbDatasource.js | 60 +++---------------- 1 file changed, 9 insertions(+), 51 deletions(-) diff --git a/src/app/services/influxdb/influxdbDatasource.js b/src/app/services/influxdb/influxdbDatasource.js index c63b735b9ea..4993c3655e3 100644 --- a/src/app/services/influxdb/influxdbDatasource.js +++ b/src/app/services/influxdb/influxdbDatasource.js @@ -1,9 +1,10 @@ define([ 'angular', 'underscore', - 'kbn' + 'kbn', + './influxSeries' ], -function (angular, _, kbn) { +function (angular, _, kbn, InfluxSeries) { 'use strict'; var module = angular.module('kibana.services'); @@ -194,57 +195,14 @@ function (angular, _, kbn) { return deferred.promise; }; - function handleInfluxQueryResponse(alias, groupByField, data) { - var output = []; - - _.each(data, function(series) { - var seriesName; - var timeCol = series.columns.indexOf('time'); - var valueCol = 1; - var groupByCol = -1; - - if (groupByField) { - groupByCol = series.columns.indexOf(groupByField); - } - - // find value column - _.each(series.columns, function(column, index) { - if (column !== 'time' && column !== 'sequence_number' && column !== groupByField) { - valueCol = index; - } - }); - - var groups = {}; - - if (groupByField) { - groups = _.groupBy(series.points, function (point) { - return point[groupByCol]; - }); - } - else { - groups[series.columns[valueCol]] = series.points; - } - - _.each(groups, function(groupPoints, key) { - var datapoints = []; - for (var i = 0; i < groupPoints.length; i++) { - var metricValue = isNaN(groupPoints[i][valueCol]) ? null : groupPoints[i][valueCol]; - datapoints[i] = [metricValue, groupPoints[i][timeCol]]; - } - - seriesName = alias ? alias : (series.name + '.' + key); - - // if mulitple groups append key to alias - if (alias && groupByField) { - seriesName += key; - } - - output.push({ target: seriesName, datapoints: datapoints }); - }); - + function handleInfluxQueryResponse(alias, groupByField, seriesList) { + var influxSeries = new InfluxSeries({ + seriesList: seriesList, + alias: alias, + groupByField: groupByField }); - return output; + return influxSeries.getTimeSeries(); } function getTimeFilter(options) { From fd8561ac55bc168fc3add5f732748b5c8c5eb80b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Tue, 1 Jul 2014 20:01:56 +0200 Subject: [PATCH 03/10] added missing file from last commit --- src/app/services/influxdb/influxSeries.js | 69 +++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/app/services/influxdb/influxSeries.js diff --git a/src/app/services/influxdb/influxSeries.js b/src/app/services/influxdb/influxSeries.js new file mode 100644 index 00000000000..ce8475fccbf --- /dev/null +++ b/src/app/services/influxdb/influxSeries.js @@ -0,0 +1,69 @@ +define([ + 'underscore', +], +function (_) { + 'use strict'; + + function InfluxSeries(options) { + this.seriesList = options.seriesList; + this.alias = options.alias; + this.groupByField = options.groupByField; + } + + var p = InfluxSeries.prototype; + + p.getTimeSeries = function() { + var output = []; + var self = this; + + _.each(self.seriesList, function(series) { + var seriesName; + var timeCol = series.columns.indexOf('time'); + var valueCol = 1; + var groupByCol = -1; + + if (self.groupByField) { + groupByCol = series.columns.indexOf(self.groupByField); + } + + // find value column + _.each(series.columns, function(column, index) { + if (column !== 'time' && column !== 'sequence_number' && column !== self.groupByField) { + valueCol = index; + } + }); + + var groups = {}; + + if (self.groupByField) { + groups = _.groupBy(series.points, function (point) { + return point[groupByCol]; + }); + } + else { + groups[series.columns[valueCol]] = series.points; + } + + _.each(groups, function(groupPoints, key) { + var datapoints = []; + for (var i = 0; i < groupPoints.length; i++) { + var metricValue = isNaN(groupPoints[i][valueCol]) ? null : groupPoints[i][valueCol]; + datapoints[i] = [metricValue, groupPoints[i][timeCol]]; + } + + seriesName = self.alias ? self.alias : (series.name + '.' + key); + + // if mulitple groups append key to alias + if (self.alias && self.groupByField) { + seriesName += key; + } + + output.push({ target: seriesName, datapoints: datapoints }); + }); + }); + + return output; + }; + + return InfluxSeries; +}); \ No newline at end of file From 14247ddabb6b5a75aa39fabc8b75628b6c0cd117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 2 Jul 2014 12:13:42 +0200 Subject: [PATCH 04/10] New legend display option 'Align as table' (Issue #136) --- CHANGELOG.md | 1 + src/app/panels/graph/axisEditor.html | 52 +++++++++-------- src/app/panels/graph/legend.html | 42 ++++++++++++-- src/app/panels/graph/module.html | 4 +- src/css/bootstrap.dark.min.css | 2 +- src/css/bootstrap.light.min.css | 2 +- src/css/default.min.css | 2 +- src/css/less/grafana.less | 54 +---------------- src/css/less/legend.less | 86 ++++++++++++++++++++++++++++ 9 files changed, 158 insertions(+), 87 deletions(-) create mode 100644 src/css/less/legend.less diff --git a/CHANGELOG.md b/CHANGELOG.md index 61e9d0c1f43..e7a81c09f3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ vNext **New features or improvements** - Allow [[..]] filter notation in all text panels (markdown/html/text) (Issue #511) +- New legend display option "Align as table" (Issue #136) **Changes** - Use unix epoch for Graphite from/to for absolute time ranges (Closes #536) diff --git a/src/app/panels/graph/axisEditor.html b/src/app/panels/graph/axisEditor.html index eb8ac3fb081..fb78152bd56 100644 --- a/src/app/panels/graph/axisEditor.html +++ b/src/app/panels/graph/axisEditor.html @@ -42,38 +42,17 @@
-
-
Grid thresholds
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
- -
-
Legend
+
Legend styles
+
+ +
@@ -100,6 +79,29 @@
+
+
Grid thresholds
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
Show Axes
diff --git a/src/app/panels/graph/legend.html b/src/app/panels/graph/legend.html index 84aab5020f6..aa31d09deac 100755 --- a/src/app/panels/graph/legend.html +++ b/src/app/panels/graph/legend.html @@ -1,5 +1,4 @@ - - + --> + +
+ +
+
+ + +
+ +
+ Current: {{series.current}} +
+
+ Min: {{series.min}} +
+
+ Max: {{series.max}} +
+
+ Total: {{series.total}} +
+
+ Avg: {{series.avg}} +
+
+ +
+