diff --git a/js/services.js b/js/services.js index bd7f98b2eea..0cc4f825fb0 100644 --- a/js/services.js +++ b/js/services.js @@ -30,7 +30,7 @@ angular.module('kibana.services', []) this.clearAll = function() { self.list = []; - }; + }; }) .service('fields', function(dashboard, $rootScope, $http, alertSrv) { @@ -53,6 +53,7 @@ angular.module('kibana.services', []) self.map(indices).then(function(result) { self.mapping = _.extend(self.mapping,result); self.list = mapFields(self.mapping); + console.log(self.mapping); }); // Otherwise just use the cached mapping } else { @@ -116,7 +117,7 @@ angular.module('kibana.services', []) ret[propName] = obj; } } - return ret; + return ret; }; }) @@ -242,11 +243,11 @@ angular.module('kibana.services', []) ids : [], }); - // For convenience - var ejs = ejsResource(config.elasticsearch); + // For convenience + var ejs = ejsResource(config.elasticsearch); var _q = dashboard.current.services.query; - this.colors = [ + this.colors = [ "#7EB26D","#EAB839","#6ED0E0","#EF843C","#E24D42","#1F78C1","#BA43A9","#705DA0", //1 "#508642","#CCA300","#447EBC","#C15C17","#890F02","#0A437C","#6D1F62","#584477", //2 "#B7DBAB","#F4D598","#70DBED","#F9BA8F","#F29191","#82B5D8","#E5A8E2","#AEA2E0", //3 @@ -264,7 +265,7 @@ angular.module('kibana.services', []) _q = dashboard.current.services.query; self.list = dashboard.current.services.query.list; self.ids = dashboard.current.services.query.ids; - + if (self.ids.length === 0) { self.set({}); } @@ -330,7 +331,7 @@ angular.module('kibana.services', []) }; this.idsByMode = function(config) { - switch(config.mode) + switch(config.mode) { case 'all': return self.ids; @@ -370,7 +371,7 @@ angular.module('kibana.services', []) }); // For convenience - var ejs = ejsResource(config.elasticsearch); + var ejs = ejsResource(config.elasticsearch); var _f = dashboard.current.services.filter; // 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 this.set = function(filter,id) { _.defaults(filter,{mandate:'must'}); @@ -425,7 +426,7 @@ angular.module('kibana.services', []) var either_bool = ejs.BoolFilter().must(ejs.MatchAllFilter()); _.each(ids,function(id) { if(self.list[id].active) { - switch(self.list[id].mandate) + switch(self.list[id].mandate) { case 'mustNot': bool = bool.mustNot(self.getEjsObj(id)); @@ -563,7 +564,7 @@ angular.module('kibana.services', []) }; // 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,}\/*$)/; // Store a reference to this @@ -602,8 +603,8 @@ angular.module('kibana.services', []) // No dashboard in the URL } 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'])) && window.localStorage['dashboard'] !== '' ) { @@ -612,11 +613,11 @@ angular.module('kibana.services', []) // No? Ok, grab default.json, its all we have now } else { 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 this.refresh = function() { if(self.current.index.interval !== 'none') { @@ -626,7 +627,7 @@ angular.module('kibana.services', []) self.current.index.pattern,self.current.index.interval ).then(function (p) { if(p.length > 0) { - self.indices = p; + self.indices = p; } else { //TODO: Option to not failover if(self.current.failover) { @@ -711,7 +712,7 @@ angular.module('kibana.services', []) return true; } else { return false; - } + } }; this.purge_default = function() { @@ -749,20 +750,22 @@ angular.module('kibana.services', []) }); }; + 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 { - 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 var save = _.clone(self.current); var id; - + // Change title on object clone if (type === 'dashboard') { id = save.title = _.isUndefined(title) ? self.current.title : title; @@ -783,10 +786,9 @@ angular.module('kibana.services', []) title: save.title, dashboard: angular.toJson(save) }); - + request = type === 'temp' && ttl ? request.ttl(ttl) : request; - // TOFIX: Implement error handling here return request.doIndex( // Success function(result) {