Parcourir la source

Merge branch 'master' into rebrand-docs

Torkel Ödegaard il y a 8 ans
Parent
commit
e189400f7c

+ 8 - 0
CHANGELOG.md

@@ -1,7 +1,15 @@
 # 4.3.0 (unreleased)
 
+## Enhancements
+
+* **InfluxDB**: influxdb query builder support for ORDER BY and LIMIT (allows TOPN queries) [#6065](https://github.com/grafana/grafana/issues/6065) Support influxdb's SLIMIT Feature [#7232](https://github.com/grafana/grafana/issues/7232) thx [@thuck](https://github.com/thuck)
+* **InfluxDB**: Small fix for the "glow" when focus the field for LIMIT and SLIMIT [#7799](https://github.com/grafana/grafana/pull/7799) thx [@thuck](https://github.com/thuck)
+* **Panels**: Delay loading & Lazy load panels as they become visible (scrolled into view) [#5216](https://github.com/grafana/grafana/issues/5216) thx [@jifwin](https://github.com/jifwin)
+
 ## Minor Enchancements
 
+* **Prometheus**: Make Prometheus query field a textarea [#7663](https://github.com/grafana/grafana/issues/7663), thx [@hagen1778](https://github.com/hagen1778)
+
 # 4.2.0-beta2 (unreleased)
 ## Minor Enhancements
 * **Templates**: Prevent use of the prefix `__` for templates in web UI [#7678](https://github.com/grafana/grafana/issues/7678)

+ 1 - 2
public/app/core/utils/rangeutil.ts

@@ -41,7 +41,7 @@ var rangeOptions = [
   { from: 'now-2d',   to: 'now',      display: 'Last 2 days',           section: 0 },
   { from: 'now-7d',   to: 'now',      display: 'Last 7 days',           section: 0 },
   { from: 'now-30d',  to: 'now',      display: 'Last 30 days',          section: 0 },
-  { from: 'now-60d',  to: 'now',      display: 'Last 60 days',          section: 0 },
+  { from: 'now-90d',  to: 'now',      display: 'Last 90 days',          section: 0 },
   { from: 'now-6M',   to: 'now',      display: 'Last 6 months',         section: 0 },
   { from: 'now-1y',   to: 'now',      display: 'Last 1 year',           section: 0 },
   { from: 'now-2y',   to: 'now',      display: 'Last 2 years',          section: 0 },
@@ -146,4 +146,3 @@ export function describeTimeRange(range) {
 
   return range.from.toString() + ' to ' + range.to.toString();
 }
-

+ 4 - 3
public/app/features/dashboard/shareModalCtrl.js

@@ -76,9 +76,10 @@ function (angular, _, $, moment, require, config) {
 
       $scope.shareUrl = linkSrv.addParamsToUrl(baseUrl, params);
 
-      var soloUrl = $scope.shareUrl;
-      soloUrl = soloUrl.replace(config.appSubUrl + '/dashboard/', config.appSubUrl + '/dashboard-solo/');
-      soloUrl = soloUrl.replace("&fullscreen", "").replace("&edit", "");
+      var soloUrl = baseUrl.replace(config.appSubUrl + '/dashboard/', config.appSubUrl + '/dashboard-solo/');
+      delete params.fullscreen;
+      delete params.edit;
+      soloUrl = linkSrv.addParamsToUrl(soloUrl, params);
 
       $scope.iframeHtml = '<iframe src="' + soloUrl + '" width="450" height="200" frameborder="0"></iframe>';
 

+ 1 - 5
public/app/features/panel/panel_ctrl.ts

@@ -76,12 +76,8 @@ export class PanelCtrl {
     profiler.renderingCompleted(this.panel.id, this.timing);
   }
 
-  private isRenderingPng () {
-    return window.location.href.indexOf("/dashboard-solo/db") >= 0;
-  }
-
   refresh() {
-    if (!this.isPanelVisible() && !this.isRenderingPng() && !this.dashboard.snapshot) {
+    if (!this.isPanelVisible() && !this.dashboard.meta.soloMode && !this.dashboard.snapshot) {
       this.skippedLastRefresh = true;
       return;
     }

+ 9 - 9
public/app/plugins/datasource/influxdb/partials/query.editor.html

@@ -75,20 +75,20 @@
 		<div class="gf-form-inline">
 			<div class="gf-form">
 				<label class="gf-form-label query-keyword width-7">ORDER BY</label>
-				<label class="gf-form-label query-part">time</label>
+				<label class="gf-form-label query-part width-4">time</label>
 				<div class="gf-form-select-wrapper">
 					<select class="gf-form-input gf-size-auto" ng-model="ctrl.target.orderByTime" ng-options="f.value as f.text for f in ctrl.orderByTime" ng-change="ctrl.refresh()"></select>
 				</div>
 			</div>
-		
-			<div class="gf-form max-width-30">
-				<label class="gf-form-label query-keyword width-7">LIMIT</label>
-				<input type="text" class="gf-form-input" ng-model="ctrl.target.limit" spellcheck='false' placeholder="No Limit" ng-blur="ctrl.refresh()">
+
+			<div class="gf-form max-width-14">
+				<label class="gf-form-label query-keyword width-5">LIMIT</label>
+				<input type="text" class="gf-form-input width-9" ng-model="ctrl.target.limit" spellcheck='false' placeholder="No Limit" ng-blur="ctrl.refresh()">
 			</div>
-		
-			<div class="gf-form max-width-30">
-				<label class="gf-form-label query-keyword width-7">SLIMIT</label>
-				<input type="text" class="gf-form-input" ng-model="ctrl.target.slimit" spellcheck='false' placeholder="No Limit" ng-blur="ctrl.refresh()">
+
+			<div class="gf-form max-width-14">
+				<label class="gf-form-label query-keyword width-5">SLIMIT</label>
+				<input type="text" class="gf-form-input width-9" ng-model="ctrl.target.slimit" spellcheck='false' placeholder="No Limit" ng-blur="ctrl.refresh()">
 			</div>
 			<div class="gf-form gf-form--grow">
 				<div class="gf-form-label gf-form-label--grow"></div>

+ 2 - 2
public/app/plugins/datasource/influxdb/query_ctrl.ts

@@ -34,8 +34,8 @@ export class InfluxQueryCtrl extends QueryCtrl {
       {text: 'Table', value: 'table'},
     ];
     this.orderByTime = [
-      {text: 'Ascending', value: 'ASC'},
-      {text: 'Descending', value: 'DESC'},
+      {text: 'ASC', value: 'ASC'},
+      {text: 'DESC', value: 'DESC'},
     ];
 
     this.policySegment = uiSegmentSrv.newSegment(this.target.policy);

+ 10 - 7
public/app/plugins/datasource/prometheus/partials/query.editor.html

@@ -1,12 +1,7 @@
-<query-editor-row query-ctrl="ctrl" can-collapse="false">
+<query-editor-row query-ctrl="ctrl" can-collapse="true" has-text-edit-mode="true">
 	<div class="gf-form-inline">
 		<div class="gf-form gf-form--grow">
-			<label class="gf-form-label width-8">Query</label>
-			<input type="text" class="gf-form-input" ng-model="ctrl.target.expr" spellcheck='false' placeholder="query expression" data-min-length=0 data-items=100 ng-model-onblur ng-change="ctrl.refreshMetricData()">
-		</div>
-		<div class="gf-form max-width-22">
-			<label class="gf-form-label">Metric lookup</label>
-			<input type="text" class="gf-form-input" ng-model="ctrl.target.metric" spellcheck='false' bs-typeahead="ctrl.suggestMetrics" placeholder="metric name" data-min-length=0 data-items=100>
+			<textarea rows="3" class="gf-form-input" ng-model="ctrl.target.expr" spellcheck="false" placeholder="query expression" data-min-length=0 data-items=100 ng-model-onblur ng-change="ctrl.refreshMetricData()"></textarea>
 		</div>
 	</div>
 
@@ -39,6 +34,14 @@
 					ng-change="ctrl.refreshMetricData()">
 				</select>
 			</div>
+		</div>
+
+		<div class="gf-form max-width-22">
+			<label class="gf-form-label">Metric lookup</label>
+			<input type="text" class="gf-form-input" ng-model="ctrl.target.metric" spellcheck='false' bs-typeahead="ctrl.suggestMetrics" placeholder="metric name" data-min-length=0 data-items=100>
+		</div>
+
+		<div class="gf-form">
 			<label class="gf-form-label">
 				<a href="{{ctrl.linkToPrometheus}}" target="_blank" bs-tooltip="'Link to Graph in Prometheus'">
 					<i class="fa fa-share-square-o"></i>

+ 4 - 0
public/app/plugins/datasource/prometheus/query_ctrl.ts

@@ -75,6 +75,10 @@ class PrometheusQueryCtrl extends QueryCtrl {
     var hash = encodeURIComponent(JSON.stringify([expr]));
     this.linkToPrometheus = this.datasource.directUrl + '/graph#' + hash;
   }
+
+  getCollapsedText() {
+    return this.target.expr;
+  }
 }
 
 export {PrometheusQueryCtrl};

+ 4 - 4
public/app/plugins/panel/graph/axes_editor.html

@@ -20,13 +20,13 @@
 			</div>
 
 			<div class="gf-form-inline">
-				<div class="gf-form max-width-10">
+				<div class="gf-form">
 					<label class="gf-form-label width-5">Y-Min</label>
-					<input type="text" class="gf-form-input" placeholder="auto" empty-to-null ng-model="yaxis.min" ng-change="ctrl.render()" ng-model-onblur>
+					<input type="text" class="gf-form-input width-5" placeholder="auto" empty-to-null ng-model="yaxis.min" ng-change="ctrl.render()" ng-model-onblur>
 				</div>
-				<div class="gf-form max-width-10">
+				<div class="gf-form">
 					<label class="gf-form-label width-5">Y-Max</label>
-					<input type="text" class="gf-form-input" placeholder="auto" empty-to-null ng-model="yaxis.max" ng-change="ctrl.render()" ng-model-onblur>
+					<input type="text" class="gf-form-input width-5" placeholder="auto" empty-to-null ng-model="yaxis.max" ng-change="ctrl.render()" ng-model-onblur>
 				</div>
 			</div>
 

+ 24 - 1
public/test/specs/shareModalCtrl-specs.js

@@ -71,6 +71,30 @@ define([
         expect(ctx.scope.shareUrl).to.be('http://server/#!/test?from=1000&to=2000&orgId=1&theme=light');
       });
 
+      it('should remove fullscreen from image url when is first param in querystring and modeSharePanel is true', function() {
+        ctx.$location.url('/test?fullscreen&edit');
+        ctx.scope.modeSharePanel = true;
+        ctx.scope.panel = { id: 1 };
+
+        ctx.scope.buildUrl();
+
+        expect(ctx.scope.shareUrl).to.contain('?fullscreen&edit&from=1000&to=2000&orgId=1&panelId=1');
+        expect(ctx.scope.imageUrl).to.contain('?from=1000&to=2000&orgId=1&panelId=1&width=1000&height=500&tz=UTC');
+
+      });
+
+      it('should remove edit from image url when is first param in querystring and modeSharePanel is true', function() {
+        ctx.$location.url('/test?edit&fullscreen');
+        ctx.scope.modeSharePanel = true;
+        ctx.scope.panel = { id: 1 };
+
+        ctx.scope.buildUrl();
+
+        expect(ctx.scope.shareUrl).to.contain('?edit&fullscreen&from=1000&to=2000&orgId=1&panelId=1');
+        expect(ctx.scope.imageUrl).to.contain('?from=1000&to=2000&orgId=1&panelId=1&width=1000&height=500&tz=UTC');
+
+      });
+
       it('should include template variables in url', function() {
         ctx.$location.path('/test');
         ctx.scope.options.includeTemplateVars = true;
@@ -83,7 +107,6 @@ define([
         ctx.scope.buildUrl();
         expect(ctx.scope.shareUrl).to.be('http://server/#!/test?from=1000&to=2000&orgId=1&var-app=mupp&var-server=srv-01');
       });
-
     });
 
   });