Jelajahi Sumber

feat(query editor): updated influxdb 0.8.x data source query editors to new abstraction

Torkel Ödegaard 10 tahun lalu
induk
melakukan
b4115b0362

+ 1 - 1
public/app/partials/metrics.html

@@ -1,7 +1,7 @@
 <div class="editor-row">
 <div class="editor-row">
 
 
 	<div class="tight-form-container">
 	<div class="tight-form-container">
-		<query-editor-loader ng-repeat="target in panel.targets">
+		<query-editor-loader ng-repeat="target in panel.targets" ng-class="{'tight-form-disabled': target.hide}" >
 		</query-editor-loader>
 		</query-editor-loader>
 	</div>
 	</div>
 
 

+ 1 - 0
public/app/plugins/datasource/influxdb_08/datasource.js

@@ -4,6 +4,7 @@ define([
   'kbn',
   'kbn',
   './influxSeries',
   './influxSeries',
   './queryBuilder',
   './queryBuilder',
+  './directives',
   './queryCtrl',
   './queryCtrl',
   './funcEditor',
   './funcEditor',
 ],
 ],

+ 21 - 0
public/app/plugins/datasource/influxdb_08/directives.js

@@ -0,0 +1,21 @@
+define([
+  'angular',
+],
+function (angular) {
+  'use strict';
+
+  var module = angular.module('grafana.directives');
+
+  module.directive('metricQueryEditorInfluxdb08', function() {
+    return {controller: 'InfluxQueryCtrl_08', templateUrl: 'app/plugins/datasource/influxdb_08/partials/query.editor.html'};
+  });
+
+  module.directive('metricQueryOptionsInfluxdb08', function() {
+    return {templateUrl: 'app/plugins/datasource/influxdb_08/partials/query.options.html'};
+  });
+
+  module.directive('annotationsQueryEditorInfluxdb08', function() {
+    return {templateUrl: 'app/plugins/datasource/influxdb_08/partials/annotations.editor.html'};
+  });
+
+});

+ 162 - 250
public/app/plugins/datasource/influxdb_08/partials/query.editor.html

@@ -1,256 +1,168 @@
-<div class="editor-row">
-	<div ng-repeat="target in panel.targets" ng-controller="InfluxQueryCtrl_08" ng-init="init()" ng-class="{'tight-form-disabled': target.hide}" class="tight-form-container">
-		<div class="tight-form">
-			<ul class="tight-form-list pull-right">
-				<li class="tight-form-item">
-					<div class="dropdown">
-						<a class="pointer dropdown-toggle"
-							data-toggle="dropdown"
-							tabindex="1">
-							<i class="fa fa-bars"></i>
-						</a>
-						<ul class="dropdown-menu pull-right" role="menu">
-							<li role="menuitem"><a tabindex="1" ng-click="duplicate()">Duplicate</a></li>
-							<li role="menuitem"><a tabindex="1" ng-click="showQuery()" ng-hide="target.rawQuery">Raw query mode</a></li>
-							<li role="menuitem"><a tabindex="1" ng-click="hideQuery()" ng-show="target.rawQuery">Query editor mode</a></li>
-							<li role="menuitem"><a tabindex="1" ng-click="moveMetricQuery($index, $index-1)">Move up </a></li>
-							<li role="menuitem"><a tabindex="1" ng-click="moveMetricQuery($index, $index+1)">Move down</a></li>
-						</ul>
-					</div>
-				</li>
-				<li class="tight-form-item last">
-					<a class="pointer" tabindex="1" ng-click="removeDataQuery(target)">
-						<i class="fa fa-remove"></i>
-					</a>
-				</li>
-			</ul>
-
-			<ul class="tight-form-list">
-				<li>
-					<a class="tight-form-item" ng-click="target.hide = !target.hide; get_data();" role="menuitem">
-						<i class="fa fa-eye"></i>
-					</a>
-				</li>
-			</ul>
-
-			<!-- Raw Query mode  -->
-			<ul class="tight-form-list" ng-show="target.rawQuery">
-				<li>
-					<input type="text"
-					class="tight-form-input span10"
-					ng-model="target.query"
-					placeholder="select ..."
-					give-focus="target.rawQuery"
-					spellcheck='false'
-					data-min-length=0 data-items=100
-					ng-model-onblur
-					ng-blur="get_data()">
-				</li>
-			</ul>
-
-			<!-- Query editor mode -->
-			<ul class="tight-form-list" role="menu" ng-hide="target.rawQuery">
-				<li class="tight-form-item">
-					series
-				</li>
-				<li>
-					<input type="text"
-					class="tight-form-input span8"
-					ng-model="target.series"
-					spellcheck='false'
-					bs-typeahead="listSeries"
-					match-all="true"
-					min-length="3"
-					placeholder="series name"
-					data-min-length=0 data-items=100
-					ng-blur="seriesBlur()">
-				</li>
-
-				<li class="tight-form-item">
-					alias
-				</li>
-
-				<li>
-					<input type="text" class="input-medium tight-form-input" ng-model="target.alias"
-					spellcheck='false' placeholder="alias" ng-blur="get_data()">
-				</li>
-
-			</ul>
-
-			<div class="clearfix"></div>
-		</div>
-
-		<div class="tight-form">
-			<!-- Raw Query mode  -->
-			<ul class="tight-form-list" ng-show="target.rawQuery">
-				<li class="tight-form-item">
-					<i class="fa fa-eye invisible"></i>
-				</li>
-				<li class="tight-form-item">
-					alias
-				</li>
-				<li>
-					<input type="text"
-					class="input-medium tight-form-input"
-					ng-model="target.alias"
-					spellcheck='false'
-					placeholder="alias"
-					ng-blur="get_data()">
-				</li>
-				<li class="tight-form-item">
-					group by time
-				</li>
-				<li>
-					<input type="text" class="input-mini tight-form-input" ng-model="target.interval"
-					spellcheck='false' placeholder="{{interval}}" data-placement="right"
-					bs-tooltip="'Leave blank for auto handling based on time range and panel width'"
-					ng-model-onblur ng-change="get_data()" >
-				</li>
-			</ul>
-
-			<!-- Query editor mode -->
-			<ul class="tight-form-list" role="menu" ng-hide="target.rawQuery">
-				<li class="tight-form-item">
-					<i class="fa fa-eye invisible"></i>
-				</li>
-				<li class="tight-form-item">
-					select
-				</li>
-				<li class="dropdown">
-					<span influxdb-func-editor08 class="tight-form-item tight-form-func">
-					</span>
-				</li>
-
-				<li class="tight-form-item">
-					where
-				</li>
-				<li>
-					<input type="text" class="input-medium tight-form-input" ng-model="target.condition"
-					bs-tooltip="'Add a where clause'" data-placement="right" spellcheck='false' placeholder="column ~= value" ng-blur="get_data()">
-				</li>
-
-				<li class="tight-form-item">
-					group by time
-				</li>
-				<li>
-					<input type="text" class="input-mini tight-form-input" ng-model="target.interval"
-					spellcheck='false' placeholder="{{interval}}" data-placement="right"
-					bs-tooltip="'Leave blank for auto handling based on time range and panel width'"
-					ng-model-onblur ng-change="get_data()" >
-				</li>
-
-				<li class="tight-form-item">
-					and
-				</li>
-
-				<li>
-					<input type="text" class="input-small tight-form-input" ng-model="target.groupby_field" bs-tooltip="'Add a group by column or leave blank'"
-					placeholder="column" spellcheck="false" bs-typeahead="listColumns" data-min-length=0 ng-blur="get_data()">
-				</li>
-
-				<li class="dropdown">
-					<a class="tight-form-item pointer" data-toggle="dropdown" bs-tooltip="'Insert missing values, important when stacking'" data-placement="right">
-						<span ng-show="target.fill">
-							fill ({{target.fill}})
-						</span>
-						<span ng-show="!target.fill">
-							no fill
-						</span>
-					</a>
-					<ul class="dropdown-menu">
-						<li><a ng-click="target.fill = ''">no fill</a></li>
-						<li><a ng-click="target.fill = 'null'">fill (null)</a></li>
-						<li><a ng-click="target.fill = '0'">fill (0)</a></li>
-					</ul>
-				</li>
-			</ul>
-			<div class="clearfix"></div>
-		</div>
-	</div>
-</div>
-
-<section class="grafana-metric-options">
-	<div class="tight-form">
-		<ul class="tight-form-list">
-			<li class="tight-form-item tight-form-item-icon">
-				<i class="fa fa-wrench"></i>
-			</li>
-			<li class="tight-form-item">
-				group by time
-			</li>
-			<li>
-				<input type="text" class="input-medium tight-form-input" ng-model="panel.interval" ng-blur="get_data();"
-				spellcheck='false' placeholder="example: >10s">
-			</li>
-			<li class="tight-form-item">
-				<i class="fa fa-question-circle" bs-tooltip="'Set a low limit by having a greater sign: example: >60s'" data-placement="right"></i>
-			</li>
-		</ul>
-		<div class="clearfix"></div>
-	</div>
-
-	<div class="tight-form">
-		<ul class="tight-form-list">
-			<li class="tight-form-item tight-form-item-icon">
-				<i class="fa fa-info-circle"></i>
-			</li>
-			<li class="tight-form-item">
-				<a ng-click="toggleEditorHelp(1);" bs-tooltip="'click to show helpful info'" data-placement="bottom">
-					alias patterns
-				</a>
-			</li>
-			<li class="tight-form-item">
-				<a ng-click="toggleEditorHelp(2)" bs-tooltip="'click to show helpful info'" data-placement="bottom">
-					stacking &amp; and fill
-				</a>
-			</li>
-			<li class="tight-form-item">
-				<a ng-click="toggleEditorHelp(3)" bs-tooltip="'click to show helpful info'" data-placement="bottom">
-					group by time
+<div class="tight-form">
+	<ul class="tight-form-list pull-right">
+		<li class="tight-form-item">
+			<div class="dropdown">
+				<a class="pointer dropdown-toggle"
+					data-toggle="dropdown"
+					tabindex="1">
+					<i class="fa fa-bars"></i>
 				</a>
 				</a>
-			</li>
-		</ul>
-		<div class="clearfix"></div>
-	</div>
-</section>
-
-<div class="editor-row">
-	<div class="pull-left" style="margin-top: 30px;">
-
-		<div class="grafana-info-box span6" ng-if="editorHelpIndex === 1">
-			<h5>Alias patterns</h5>
-			<ul>
-				<li>$s = series name</li>
-				<li>$g = group by</li>
-				<li>$[0-9] part of series name for series names seperated by dots.</li>
-			</ul>
-		</div>
-
-		<div class="grafana-info-box span6" ng-if="editorHelpIndex === 2">
-			<h5>Stacking and fill</h5>
-			<ul>
-				<li>When stacking is enabled it important that points align</li>
-				<li>If there are missing points for one series it can cause gaps or missing bars</li>
-				<li>You must use fill(0), and select a group by time low limit</li>
-				<li>Use the group by time option below your queries and specify for example &gt;10s if your metrics are written every 10 seconds</li>
-				<li>This will insert zeros for series that are missing measurements and will make stacking work properly</li>
-			</ul>
-		</div>
+				<ul class="dropdown-menu pull-right" role="menu">
+					<li role="menuitem"><a tabindex="1" ng-click="duplicate()">Duplicate</a></li>
+					<li role="menuitem"><a tabindex="1" ng-click="showQuery()" ng-hide="target.rawQuery">Raw query mode</a></li>
+					<li role="menuitem"><a tabindex="1" ng-click="hideQuery()" ng-show="target.rawQuery">Query editor mode</a></li>
+					<li role="menuitem"><a tabindex="1" ng-click="moveMetricQuery($index, $index-1)">Move up </a></li>
+					<li role="menuitem"><a tabindex="1" ng-click="moveMetricQuery($index, $index+1)">Move down</a></li>
+				</ul>
+			</div>
+		</li>
+		<li class="tight-form-item last">
+			<a class="pointer" tabindex="1" ng-click="removeDataQuery(target)">
+				<i class="fa fa-remove"></i>
+			</a>
+		</li>
+	</ul>
+
+	<ul class="tight-form-list">
+		<li>
+			<a class="tight-form-item" ng-click="target.hide = !target.hide; get_data();" role="menuitem">
+				<i class="fa fa-eye"></i>
+			</a>
+		</li>
+	</ul>
+
+	<!-- Raw Query mode  -->
+	<ul class="tight-form-list" ng-show="target.rawQuery">
+		<li>
+			<input type="text"
+			class="tight-form-input span10"
+			ng-model="target.query"
+			placeholder="select ..."
+			give-focus="target.rawQuery"
+			spellcheck='false'
+			data-min-length=0 data-items=100
+			ng-model-onblur
+			ng-blur="get_data()">
+		</li>
+	</ul>
+
+	<!-- Query editor mode -->
+	<ul class="tight-form-list" role="menu" ng-hide="target.rawQuery">
+		<li class="tight-form-item">
+			series
+		</li>
+		<li>
+			<input type="text"
+			class="tight-form-input span8"
+			ng-model="target.series"
+			spellcheck='false'
+			bs-typeahead="listSeries"
+			match-all="true"
+			min-length="3"
+			placeholder="series name"
+			data-min-length=0 data-items=100
+			ng-blur="seriesBlur()">
+		</li>
+
+		<li class="tight-form-item">
+			alias
+		</li>
+
+		<li>
+			<input type="text" class="input-medium tight-form-input" ng-model="target.alias"
+			spellcheck='false' placeholder="alias" ng-blur="get_data()">
+		</li>
+
+	</ul>
+
+	<div class="clearfix"></div>
+</div>
 
 
-		<div class="grafana-info-box span6" ng-if="editorHelpIndex === 3">
-			<h5>Group by time</h5>
-			<ul>
-				<li>Group by time is important, otherwise the query could return many thousands of datapoints that will slow down Grafana</li>
-				<li>Leave the group by time field empty for each query and it will be calculated based on time range and pixel width of the graph</li>
-				<li>If you use fill(0) or fill(null) set a low limit for the auto group by time interval</li>
-				<li>The low limit can only be set in the group by time option below your queries</li>
-				<li>You set a low limit by adding a greater sign before the interval</li>
-				<li>Example: &gt;60s if you write metrics to InfluxDB every 60 seconds</li>
+<div class="tight-form">
+	<!-- Raw Query mode  -->
+	<ul class="tight-form-list" ng-show="target.rawQuery">
+		<li class="tight-form-item">
+			<i class="fa fa-eye invisible"></i>
+		</li>
+		<li class="tight-form-item">
+			alias
+		</li>
+		<li>
+			<input type="text"
+			class="input-medium tight-form-input"
+			ng-model="target.alias"
+			spellcheck='false'
+			placeholder="alias"
+			ng-blur="get_data()">
+		</li>
+		<li class="tight-form-item">
+			group by time
+		</li>
+		<li>
+			<input type="text" class="input-mini tight-form-input" ng-model="target.interval"
+			spellcheck='false' placeholder="{{interval}}" data-placement="right"
+			bs-tooltip="'Leave blank for auto handling based on time range and panel width'"
+			ng-model-onblur ng-change="get_data()" >
+		</li>
+	</ul>
+
+	<!-- Query editor mode -->
+	<ul class="tight-form-list" role="menu" ng-hide="target.rawQuery">
+		<li class="tight-form-item">
+			<i class="fa fa-eye invisible"></i>
+		</li>
+		<li class="tight-form-item">
+			select
+		</li>
+		<li class="dropdown">
+			<span influxdb-func-editor08 class="tight-form-item tight-form-func">
+			</span>
+		</li>
+
+		<li class="tight-form-item">
+			where
+		</li>
+		<li>
+			<input type="text" class="input-medium tight-form-input" ng-model="target.condition"
+			bs-tooltip="'Add a where clause'" data-placement="right" spellcheck='false' placeholder="column ~= value" ng-blur="get_data()">
+		</li>
+
+		<li class="tight-form-item">
+			group by time
+		</li>
+		<li>
+			<input type="text" class="input-mini tight-form-input" ng-model="target.interval"
+			spellcheck='false' placeholder="{{interval}}" data-placement="right"
+			bs-tooltip="'Leave blank for auto handling based on time range and panel width'"
+			ng-model-onblur ng-change="get_data()" >
+		</li>
+
+		<li class="tight-form-item">
+			and
+		</li>
+
+		<li>
+			<input type="text" class="input-small tight-form-input" ng-model="target.groupby_field" bs-tooltip="'Add a group by column or leave blank'"
+			placeholder="column" spellcheck="false" bs-typeahead="listColumns" data-min-length=0 ng-blur="get_data()">
+		</li>
+
+		<li class="dropdown">
+			<a class="tight-form-item pointer" data-toggle="dropdown" bs-tooltip="'Insert missing values, important when stacking'" data-placement="right">
+				<span ng-show="target.fill">
+					fill ({{target.fill}})
+				</span>
+				<span ng-show="!target.fill">
+					no fill
+				</span>
+			</a>
+			<ul class="dropdown-menu">
+				<li><a ng-click="target.fill = ''">no fill</a></li>
+				<li><a ng-click="target.fill = 'null'">fill (null)</a></li>
+				<li><a ng-click="target.fill = '0'">fill (0)</a></li>
 			</ul>
 			</ul>
-		</div>
-
-
-	</div>
+		</li>
+	</ul>
+	<div class="clearfix"></div>
 </div>
 </div>
 
 
 
 

+ 85 - 0
public/app/plugins/datasource/influxdb_08/partials/query.options.html

@@ -0,0 +1,85 @@
+<section class="grafana-metric-options">
+	<div class="tight-form">
+		<ul class="tight-form-list">
+			<li class="tight-form-item tight-form-item-icon">
+				<i class="fa fa-wrench"></i>
+			</li>
+			<li class="tight-form-item">
+				group by time
+			</li>
+			<li>
+				<input type="text" class="input-medium tight-form-input" ng-model="panel.interval" ng-blur="get_data();"
+				spellcheck='false' placeholder="example: >10s">
+			</li>
+			<li class="tight-form-item">
+				<i class="fa fa-question-circle" bs-tooltip="'Set a low limit by having a greater sign: example: >60s'" data-placement="right"></i>
+			</li>
+		</ul>
+		<div class="clearfix"></div>
+	</div>
+
+	<div class="tight-form">
+		<ul class="tight-form-list">
+			<li class="tight-form-item tight-form-item-icon">
+				<i class="fa fa-info-circle"></i>
+			</li>
+			<li class="tight-form-item">
+				<a ng-click="toggleEditorHelp(1);" bs-tooltip="'click to show helpful info'" data-placement="bottom">
+					alias patterns
+				</a>
+			</li>
+			<li class="tight-form-item">
+				<a ng-click="toggleEditorHelp(2)" bs-tooltip="'click to show helpful info'" data-placement="bottom">
+					stacking &amp; and fill
+				</a>
+			</li>
+			<li class="tight-form-item">
+				<a ng-click="toggleEditorHelp(3)" bs-tooltip="'click to show helpful info'" data-placement="bottom">
+					group by time
+				</a>
+			</li>
+		</ul>
+		<div class="clearfix"></div>
+	</div>
+</section>
+
+<div class="editor-row">
+	<div class="pull-left" style="margin-top: 30px;">
+
+		<div class="grafana-info-box span6" ng-if="editorHelpIndex === 1">
+			<h5>Alias patterns</h5>
+			<ul>
+				<li>$s = series name</li>
+				<li>$g = group by</li>
+				<li>$[0-9] part of series name for series names seperated by dots.</li>
+			</ul>
+		</div>
+
+		<div class="grafana-info-box span6" ng-if="editorHelpIndex === 2">
+			<h5>Stacking and fill</h5>
+			<ul>
+				<li>When stacking is enabled it important that points align</li>
+				<li>If there are missing points for one series it can cause gaps or missing bars</li>
+				<li>You must use fill(0), and select a group by time low limit</li>
+				<li>Use the group by time option below your queries and specify for example &gt;10s if your metrics are written every 10 seconds</li>
+				<li>This will insert zeros for series that are missing measurements and will make stacking work properly</li>
+			</ul>
+		</div>
+
+		<div class="grafana-info-box span6" ng-if="editorHelpIndex === 3">
+			<h5>Group by time</h5>
+			<ul>
+				<li>Group by time is important, otherwise the query could return many thousands of datapoints that will slow down Grafana</li>
+				<li>Leave the group by time field empty for each query and it will be calculated based on time range and pixel width of the graph</li>
+				<li>If you use fill(0) or fill(null) set a low limit for the auto group by time interval</li>
+				<li>The low limit can only be set in the group by time option below your queries</li>
+				<li>You set a low limit by adding a greater sign before the interval</li>
+				<li>Example: &gt;60s if you write metrics to InfluxDB every 60 seconds</li>
+			</ul>
+		</div>
+
+
+	</div>
+</div>
+
+

+ 1 - 3
public/app/plugins/datasource/influxdb_08/plugin.json

@@ -8,9 +8,7 @@
   "module": "plugins/datasource/influxdb_08/datasource",
   "module": "plugins/datasource/influxdb_08/datasource",
 
 
   "partials": {
   "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/annotations.editor.html"
+    "config": "app/plugins/datasource/influxdb_08/partials/config.html"
   },
   },
 
 
   "metrics": true,
   "metrics": true,