Kaynağa Gözat

Merge pull request #4063 from mtanda/timeshift_template

timeFrom and timeShift templating
Carl Bergquist 9 yıl önce
ebeveyn
işleme
1fb38abf6b

+ 3 - 0
public/app/core/directives/ng_model_on_blur.js

@@ -47,6 +47,9 @@ function (coreModule, kbn, rangeUtil) {
           if (ctrl.$isEmpty(modelValue)) {
           if (ctrl.$isEmpty(modelValue)) {
             return true;
             return true;
           }
           }
+          if (viewValue.indexOf('$') === 0) {
+            return true; // allow template variable
+          }
           var info = rangeUtil.describeTextRange(viewValue);
           var info = rangeUtil.describeTextRange(viewValue);
           return info.invalid !== true;
           return info.invalid !== true;
         };
         };

+ 7 - 3
public/app/features/panel/metrics_panel_ctrl.ts

@@ -17,6 +17,7 @@ class MetricsPanelCtrl extends PanelCtrl {
   $timeout: any;
   $timeout: any;
   datasourceSrv: any;
   datasourceSrv: any;
   timeSrv: any;
   timeSrv: any;
+  templateSrv: any;
   timing: any;
   timing: any;
   range: any;
   range: any;
   rangeRaw: any;
   rangeRaw: any;
@@ -34,6 +35,7 @@ class MetricsPanelCtrl extends PanelCtrl {
     this.$q = $injector.get('$q');
     this.$q = $injector.get('$q');
     this.datasourceSrv = $injector.get('datasourceSrv');
     this.datasourceSrv = $injector.get('datasourceSrv');
     this.timeSrv = $injector.get('timeSrv');
     this.timeSrv = $injector.get('timeSrv');
+    this.templateSrv = $injector.get('templateSrv');
 
 
     if (!this.panel.targets) {
     if (!this.panel.targets) {
       this.panel.targets = [{}];
       this.panel.targets = [{}];
@@ -119,7 +121,8 @@ class MetricsPanelCtrl extends PanelCtrl {
 
 
     // check panel time overrrides
     // check panel time overrrides
     if (this.panel.timeFrom) {
     if (this.panel.timeFrom) {
-      var timeFromInfo = rangeUtil.describeTextRange(this.panel.timeFrom);
+      var timeFromInterpolated = this.templateSrv.replace(this.panel.timeFrom, this.panel.scopedVars);
+      var timeFromInfo = rangeUtil.describeTextRange(timeFromInterpolated);
       if (timeFromInfo.invalid) {
       if (timeFromInfo.invalid) {
         this.timeInfo = 'invalid time override';
         this.timeInfo = 'invalid time override';
         return;
         return;
@@ -136,13 +139,14 @@ class MetricsPanelCtrl extends PanelCtrl {
     }
     }
 
 
     if (this.panel.timeShift) {
     if (this.panel.timeShift) {
-      var timeShiftInfo = rangeUtil.describeTextRange(this.panel.timeShift);
+      var timeShiftInterpolated = this.templateSrv.replace(this.panel.timeShift, this.panel.scopedVars);
+      var timeShiftInfo = rangeUtil.describeTextRange(timeShiftInterpolated);
       if (timeShiftInfo.invalid) {
       if (timeShiftInfo.invalid) {
         this.timeInfo = 'invalid timeshift';
         this.timeInfo = 'invalid timeshift';
         return;
         return;
       }
       }
 
 
-      var timeShift = '-' + this.panel.timeShift;
+      var timeShift = '-' + timeShiftInterpolated;
       this.timeInfo += ' timeshift ' + timeShift;
       this.timeInfo += ' timeshift ' + timeShift;
       this.range.from = dateMath.parseDateMath(timeShift, this.range.from, false);
       this.range.from = dateMath.parseDateMath(timeShift, this.range.from, false);
       this.range.to = dateMath.parseDateMath(timeShift, this.range.to, true);
       this.range.to = dateMath.parseDateMath(timeShift, this.range.to, true);

+ 1 - 1
public/app/plugins/panel/singlestat/module.ts

@@ -50,7 +50,7 @@ class SingleStatCtrl extends MetricsPanelCtrl {
   unitFormats: any[];
   unitFormats: any[];
 
 
   /** @ngInject */
   /** @ngInject */
-  constructor($scope, $injector, private $location, private linkSrv, private templateSrv) {
+  constructor($scope, $injector, private $location, private linkSrv) {
     super($scope, $injector);
     super($scope, $injector);
     _.defaults(this.panel, panelDefaults);
     _.defaults(this.panel, panelDefaults);
   }
   }