Browse Source

feat(alerting): add template validation for influxdb

closes #6230
bergquist 9 years ago
parent
commit
0d4b00df95

+ 1 - 1
public/app/features/alerting/alert_tab_ctrl.ts

@@ -231,7 +231,7 @@ export class AlertTabCtrl {
       this.datasourceSrv.get(datasourceName).then(ds => {
         if (!ds.meta.alerting) {
           this.error = 'The datasource does not support alerting queries';
-        } else if (this.templateSrv.variableExists(foundTarget.target)) {
+        } else if (ds.targetContainsTemplate(foundTarget)) {
           this.error = 'Template variables are not supported in alert queries';
         } else {
           this.error = '';

+ 4 - 0
public/app/plugins/datasource/graphite/datasource.ts

@@ -126,6 +126,10 @@ export function GraphiteDatasource(instanceSettings, $q, backendSrv, templateSrv
     }
   };
 
+  this.targetContainsTemplate = function(target) {
+    return templateSrv.variableExists(target.target);
+  };
+
   this.translateTime = function(date, roundUp) {
     if (_.isString(date)) {
       if (date === 'now') {

+ 18 - 0
public/app/plugins/datasource/influxdb/datasource.ts

@@ -139,6 +139,24 @@ export default class InfluxDatasource {
     });
   };
 
+  targetContainsTemplate(target) {
+    for (let group of target.groupBy) {
+      for (let param of group.params) {
+        if (this.templateSrv.variableExists(param)) {
+          return true;
+        }
+      }
+    }
+
+    for (let i in target.tags) {
+      if (this.templateSrv.variableExists(target.tags[i].value)) {
+        return true;
+      }
+    }
+
+    return false;
+  };
+
   metricFindQuery(query) {
     var interpolated = this.templateSrv.replace(query, null, 'regex');
 

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

@@ -58,6 +58,10 @@ export function PrometheusDatasource(instanceSettings, $q, backendSrv, templateS
     return escapedValues.join('|');
   };
 
+  this.targetContainsTemplate = function(target) {
+    return templateSrv.variableExists(target.expr);
+  };
+
   // Called once per panel (graph)
   this.query = function(options) {
     var self = this;