Explorar o código

support panel repeat for datasource template variable (#7711)

* support panel repeat for datasource template variable

* support All option
Mitsuhiro Tanda %!s(int64=8) %!d(string=hai) anos
pai
achega
554f972a25

+ 2 - 2
public/app/core/services/datasource_srv.js

@@ -14,12 +14,12 @@ function (angular, _, coreModule, config) {
       this.datasources = {};
     };
 
-    this.get = function(name) {
+    this.get = function(name, scopedDsVars) {
       if (!name) {
         return this.get(config.defaultDatasource);
       }
 
-      name = templateSrv.replace(name);
+      name = templateSrv.replace(name, scopedDsVars || {});
 
       if (name === 'default') {
         return this.get(config.defaultDatasource);

+ 1 - 1
public/app/features/panel/metrics_panel_ctrl.ts

@@ -92,7 +92,7 @@ class MetricsPanelCtrl extends PanelCtrl {
 
     // load datasource service
     this.setTimeQueryStart();
-    this.datasourceSrv.get(this.panel.datasource)
+    this.datasourceSrv.get(this.panel.datasource, this.panel.scopedVars)
     .then(this.updateTimeRange.bind(this))
     .then(this.issueQueries.bind(this))
     .then(this.handleQueryResult.bind(this))

+ 15 - 0
public/app/features/templating/datasource_variable.ts

@@ -10,6 +10,8 @@ export class DatasourceVariable implements Variable {
   query: string;
   options: any;
   current: any;
+  multi: boolean;
+  includeAll: boolean;
   refresh: any;
 
  defaults = {
@@ -21,6 +23,8 @@ export class DatasourceVariable implements Variable {
     regex: '',
     options: [],
     query: '',
+    multi: false,
+    includeAll: false,
     refresh: 1,
   };
 
@@ -71,9 +75,16 @@ export class DatasourceVariable implements Variable {
     }
 
     this.options = options;
+    if (this.includeAll) {
+      this.addAllOption();
+    }
     return this.variableSrv.validateVariableSelectionState(this);
   }
 
+  addAllOption() {
+    this.options.unshift({text: 'All', value: "$__all"});
+  }
+
   dependsOn(variable) {
     if (this.regex) {
       return containsVariable(this.regex, variable.name);
@@ -86,6 +97,9 @@ export class DatasourceVariable implements Variable {
   }
 
   getValueForUrl() {
+    if (this.current.text === 'All') {
+      return 'All';
+    }
     return this.current.value;
   }
 }
@@ -93,5 +107,6 @@ export class DatasourceVariable implements Variable {
 variableTypes['datasource'] = {
   name: 'Datasource',
   ctor: DatasourceVariable,
+  supportsMulti: true,
   description: 'Enabled you to dynamically switch the datasource for multiple panels',
 };