فهرست منبع

More error handling, changed es loading to use get instead of search

Rashid Khan 12 سال پیش
والد
کامیت
aa4b3ef047
1فایلهای تغییر یافته به همراه33 افزوده شده و 31 حذف شده
  1. 33 31
      js/services.js

+ 33 - 31
js/services.js

@@ -30,7 +30,7 @@ angular.module('kibana.services', [])
 
 
   this.clearAll = function() {
   this.clearAll = function() {
     self.list = [];
     self.list = [];
-  }; 
+  };
 
 
 })
 })
 .service('fields', function(dashboard, $rootScope, $http, alertSrv) {
 .service('fields', function(dashboard, $rootScope, $http, alertSrv) {
@@ -53,6 +53,7 @@ angular.module('kibana.services', [])
         self.map(indices).then(function(result) {
         self.map(indices).then(function(result) {
           self.mapping = _.extend(self.mapping,result);
           self.mapping = _.extend(self.mapping,result);
           self.list = mapFields(self.mapping);
           self.list = mapFields(self.mapping);
+          console.log(self.mapping);
         });
         });
       // Otherwise just use the cached mapping
       // Otherwise just use the cached mapping
       } else {
       } else {
@@ -116,7 +117,7 @@ angular.module('kibana.services', [])
         ret[propName] = obj;
         ret[propName] = obj;
       }
       }
     }
     }
-    return ret; 
+    return ret;
   };
   };
 
 
 })
 })
@@ -242,11 +243,11 @@ angular.module('kibana.services', [])
     ids : [],
     ids : [],
   });
   });
 
 
-  // For convenience 
-  var ejs = ejsResource(config.elasticsearch);  
+  // For convenience
+  var ejs = ejsResource(config.elasticsearch);
   var _q = dashboard.current.services.query;
   var _q = dashboard.current.services.query;
 
 
-  this.colors = [ 
+  this.colors = [
     "#7EB26D","#EAB839","#6ED0E0","#EF843C","#E24D42","#1F78C1","#BA43A9","#705DA0", //1
     "#7EB26D","#EAB839","#6ED0E0","#EF843C","#E24D42","#1F78C1","#BA43A9","#705DA0", //1
     "#508642","#CCA300","#447EBC","#C15C17","#890F02","#0A437C","#6D1F62","#584477", //2
     "#508642","#CCA300","#447EBC","#C15C17","#890F02","#0A437C","#6D1F62","#584477", //2
     "#B7DBAB","#F4D598","#70DBED","#F9BA8F","#F29191","#82B5D8","#E5A8E2","#AEA2E0", //3
     "#B7DBAB","#F4D598","#70DBED","#F9BA8F","#F29191","#82B5D8","#E5A8E2","#AEA2E0", //3
@@ -264,7 +265,7 @@ angular.module('kibana.services', [])
     _q = dashboard.current.services.query;
     _q = dashboard.current.services.query;
     self.list = dashboard.current.services.query.list;
     self.list = dashboard.current.services.query.list;
     self.ids = dashboard.current.services.query.ids;
     self.ids = dashboard.current.services.query.ids;
-    
+
     if (self.ids.length === 0) {
     if (self.ids.length === 0) {
       self.set({});
       self.set({});
     }
     }
@@ -330,7 +331,7 @@ angular.module('kibana.services', [])
   };
   };
 
 
   this.idsByMode = function(config) {
   this.idsByMode = function(config) {
-    switch(config.mode) 
+    switch(config.mode)
     {
     {
     case 'all':
     case 'all':
       return self.ids;
       return self.ids;
@@ -370,7 +371,7 @@ angular.module('kibana.services', [])
   });
   });
 
 
   // For convenience
   // For convenience
-  var ejs = ejsResource(config.elasticsearch);  
+  var ejs = ejsResource(config.elasticsearch);
   var _f = dashboard.current.services.filter;
   var _f = dashboard.current.services.filter;
 
 
   // Save a reference to this
   // Save a reference to this
@@ -390,7 +391,7 @@ angular.module('kibana.services', [])
 
 
   };
   };
 
 
-  // This is used both for adding filters and modifying them. 
+  // This is used both for adding filters and modifying them.
   // If an id is passed, the filter at that id is updated
   // If an id is passed, the filter at that id is updated
   this.set = function(filter,id) {
   this.set = function(filter,id) {
     _.defaults(filter,{mandate:'must'});
     _.defaults(filter,{mandate:'must'});
@@ -425,7 +426,7 @@ angular.module('kibana.services', [])
     var either_bool = ejs.BoolFilter().must(ejs.MatchAllFilter());
     var either_bool = ejs.BoolFilter().must(ejs.MatchAllFilter());
     _.each(ids,function(id) {
     _.each(ids,function(id) {
       if(self.list[id].active) {
       if(self.list[id].active) {
-        switch(self.list[id].mandate) 
+        switch(self.list[id].mandate)
         {
         {
         case 'mustNot':
         case 'mustNot':
           bool = bool.mustNot(self.getEjsObj(id));
           bool = bool.mustNot(self.getEjsObj(id));
@@ -563,7 +564,7 @@ angular.module('kibana.services', [])
   };
   };
 
 
   // An elasticJS client to use
   // An elasticJS client to use
-  var ejs = ejsResource(config.elasticsearch);  
+  var ejs = ejsResource(config.elasticsearch);
   var gist_pattern = /(^\d{5,}$)|(^[a-z0-9]{10,}$)|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;
   var gist_pattern = /(^\d{5,}$)|(^[a-z0-9]{10,}$)|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;
 
 
   // Store a reference to this
   // Store a reference to this
@@ -602,8 +603,8 @@ angular.module('kibana.services', [])
 
 
     // No dashboard in the URL
     // No dashboard in the URL
     } else {
     } else {
-      // Check if browser supports localstorage, and if there's a dashboard 
-      if (window.Modernizr.localstorage && 
+      // Check if browser supports localstorage, and if there's a dashboard
+      if (window.Modernizr.localstorage &&
         !(_.isUndefined(window.localStorage['dashboard'])) &&
         !(_.isUndefined(window.localStorage['dashboard'])) &&
         window.localStorage['dashboard'] !== ''
         window.localStorage['dashboard'] !== ''
       ) {
       ) {
@@ -612,11 +613,11 @@ angular.module('kibana.services', [])
       // No? Ok, grab default.json, its all we have now
       // No? Ok, grab default.json, its all we have now
       } else {
       } else {
         self.file_load('default.json');
         self.file_load('default.json');
-      } 
+      }
     }
     }
   };
   };
 
 
-  // Since the dashboard is responsible for index computation, we can compute and assign the indices 
+  // Since the dashboard is responsible for index computation, we can compute and assign the indices
   // here before telling the panels to refresh
   // here before telling the panels to refresh
   this.refresh = function() {
   this.refresh = function() {
     if(self.current.index.interval !== 'none') {
     if(self.current.index.interval !== 'none') {
@@ -626,7 +627,7 @@ angular.module('kibana.services', [])
           self.current.index.pattern,self.current.index.interval
           self.current.index.pattern,self.current.index.interval
         ).then(function (p) {
         ).then(function (p) {
           if(p.length > 0) {
           if(p.length > 0) {
-            self.indices = p;          
+            self.indices = p;
           } else {
           } else {
             //TODO: Option to not failover
             //TODO: Option to not failover
             if(self.current.failover) {
             if(self.current.failover) {
@@ -711,7 +712,7 @@ angular.module('kibana.services', [])
       return true;
       return true;
     } else {
     } else {
       return false;
       return false;
-    }  
+    }
   };
   };
 
 
   this.purge_default = function() {
   this.purge_default = function() {
@@ -749,20 +750,22 @@ angular.module('kibana.services', [])
     });
     });
   };
   };
 
 
+
   this.elasticsearch_load = function(type,id) {
   this.elasticsearch_load = function(type,id) {
-    var request = ejs.Request().indices(config.kibana_index).types(type);
-    return request.query(
-      ejs.IdsQuery(id)
-    ).doSearch(function(results) {
-      if(_.isUndefined(results)) {
-        return false;
+    return $http({
+      url: config.elasticsearch + "/" + config.kibana_index + "/"+type+"/"+id,
+      method: "GET"
+    }).error(function(data, status, headers, conf) {
+      if(status === 0) {
+        alertSrv.set('Error',"Could not contact Elasticsearch at "+config.elasticsearch+
+          ". Please ensure that Elasticsearch is reachable from your system." ,'error');
       } else {
       } else {
-        self.dash_load(angular.fromJson(results.hits.hits[0]['_source']['dashboard']));
-        return true;
+        alertSrv.set('Error',"Could not find "+id+". If you"+
+          " are using a proxy, ensure it is configured correctly",'error');
       }
       }
-    },
-    function(data,status) {
-      alertSrv.set('Error','Could not load '+config.elasticsearch+"/"+config.kibana_index+"/"+type+"/"+id,'error');
+      return false;
+    }).success(function(data, status, headers) {
+      self.dash_load(angular.fromJson(data['_source']['dashboard']));
     });
     });
   };
   };
 
 
@@ -770,7 +773,7 @@ angular.module('kibana.services', [])
     // Clone object so we can modify it without influencing the existing obejct
     // Clone object so we can modify it without influencing the existing obejct
     var save = _.clone(self.current);
     var save = _.clone(self.current);
     var id;
     var id;
-    
+
     // Change title on object clone
     // Change title on object clone
     if (type === 'dashboard') {
     if (type === 'dashboard') {
       id = save.title = _.isUndefined(title) ? self.current.title : title;
       id = save.title = _.isUndefined(title) ? self.current.title : title;
@@ -783,10 +786,9 @@ angular.module('kibana.services', [])
       title: save.title,
       title: save.title,
       dashboard: angular.toJson(save)
       dashboard: angular.toJson(save)
     });
     });
-    
+
     request = type === 'temp' && ttl ? request.ttl(ttl) : request;
     request = type === 'temp' && ttl ? request.ttl(ttl) : request;
 
 
-    // TOFIX: Implement error handling here
     return request.doIndex(
     return request.doIndex(
       // Success
       // Success
       function(result) {
       function(result) {