فهرست منبع

influxdb(auth): fixed issue with using basic auth and influxdb, fixes #2455

Torkel Ödegaard 10 سال پیش
والد
کامیت
0ed4744a33
2فایلهای تغییر یافته به همراه41 افزوده شده و 55 حذف شده
  1. 3 2
      pkg/api/dataproxy.go
  2. 38 53
      public/app/plugins/datasource/influxdb/datasource.js

+ 3 - 2
pkg/api/dataproxy.go

@@ -42,9 +42,10 @@ func NewReverseProxy(ds *m.DataSource, proxyPath string) *httputil.ReverseProxy
 		} else if ds.Type == m.DS_INFLUXDB {
 			req.URL.Path = util.JoinUrlFragments(target.Path, proxyPath)
 			reqQueryVals.Add("db", ds.Database)
-			reqQueryVals.Add("u", ds.User)
-			reqQueryVals.Add("p", ds.Password)
 			req.URL.RawQuery = reqQueryVals.Encode()
+			if !ds.BasicAuth {
+				req.Header.Add("Authorization", util.GetBasicAuthHeader(ds.User, ds.Password))
+			}
 		} else {
 			req.URL.Path = util.JoinUrlFragments(target.Path, proxyPath)
 		}

+ 38 - 53
public/app/plugins/datasource/influxdb/datasource.js

@@ -114,25 +114,6 @@ function (angular, _, kbn, InfluxSeries, InfluxQueryBuilder) {
       });
     };
 
-    function retry(deferred, callback, delay) {
-      return callback().then(undefined, function(reason) {
-        if (reason.status !== 0 || reason.status >= 300) {
-          if (reason.data && reason.data.error) {
-            reason.message = 'InfluxDB Error Response: ' + reason.data.error;
-          }
-          else {
-            reason.message = 'InfluxDB Error: ' + reason.message;
-          }
-          deferred.reject(reason);
-        }
-        else {
-          setTimeout(function() {
-            return retry(deferred, callback, Math.min(delay * 2, 30000));
-          }, delay);
-        }
-      });
-    }
-
     InfluxDatasource.prototype._seriesQuery = function(query) {
       return this._influxRequest('GET', '/query', {q: query, epoch: 'ms'});
     };
@@ -145,46 +126,50 @@ function (angular, _, kbn, InfluxSeries, InfluxQueryBuilder) {
 
     InfluxDatasource.prototype._influxRequest = function(method, url, data) {
       var self = this;
-      var deferred = $q.defer();
-
-      retry(deferred, function() {
-        var currentUrl = self.urls.shift();
-        self.urls.push(currentUrl);
 
-        var params = {
-          u: self.username,
-          p: self.password,
-        };
+      var currentUrl = self.urls.shift();
+      self.urls.push(currentUrl);
 
-        if (self.database) {
-          params.db = self.database;
-        }
+      var params = {
+        u: self.username,
+        p: self.password,
+      };
 
-        if (method === 'GET') {
-          _.extend(params, data);
-          data = null;
-        }
+      if (self.database) {
+        params.db = self.database;
+      }
 
-        var options = {
-          method: method,
-          url:    currentUrl + url,
-          params: params,
-          data:   data,
-          precision: "ms",
-          inspect: { type: 'influxdb' },
-        };
-
-        options.headers = options.headers || {};
-        if (self.basicAuth) {
-          options.headers.Authorization = self.basicAuth;
-        }
+      if (method === 'GET') {
+        _.extend(params, data);
+        data = null;
+      }
 
-        return $http(options).success(function (data) {
-          deferred.resolve(data);
-        });
-      }, 10);
+      var options = {
+        method: method,
+        url:    currentUrl + url,
+        params: params,
+        data:   data,
+        precision: "ms",
+        inspect: { type: 'influxdb' },
+      };
+
+      options.headers = options.headers || {};
+      if (self.basicAuth) {
+        options.headers.Authorization = self.basicAuth;
+      }
 
-      return deferred.promise;
+      return $http(options).then(function(result) {
+        return result.data;
+      }, function(reason) {
+        if (reason.status !== 0 || reason.status >= 300) {
+          if (reason.data && reason.data.error) {
+            throw { message: 'InfluxDB Error Response: ' + reason.data.error };
+          }
+          else {
+            throw { messsage: 'InfluxDB Error: ' + reason.message };
+          }
+        }
+      });
     };
 
     function getTimeFilter(options) {