Commit a02db6d5 by Rashid Khan

Eliminate idQueue property from filterSrv and querySrv. Replace with binary…

Eliminate idQueue property from filterSrv and querySrv. Replace with binary search for smallest id. Closes #730. Closes #739
parent e73ea482
...@@ -479,6 +479,26 @@ function($, _, moment) { ...@@ -479,6 +479,26 @@ function($, _, moment) {
}); });
}; };
// Find the smallest missing number in an array
kbn.smallestMissing = function(arr,start,end) {
start = start || 0;
end = end || arr.length-1;
if(start > end) {
return end + 1;
}
if(start !== arr[start]) {
return start;
}
var middle = Math.floor((start + end) / 2);
if (arr[middle] > middle) {
return kbn.smallestMissing(arr, start, middle);
} else {
return kbn.smallestMissing(arr, middle + 1, end);
}
};
kbn.byteFormat = function(size, decimals) { kbn.byteFormat = function(size, decimals) {
var ext, steps = 0; var ext, steps = 0;
decimals = decimals || 2; decimals = decimals || 2;
......
...@@ -14,14 +14,12 @@ define([ ...@@ -14,14 +14,12 @@ define([
// Defaults for it // Defaults for it
var _d = { var _d = {
idQueue : [],
list : {}, list : {},
ids : [] ids : []
}; };
// For convenience // For convenience
var ejs = ejsResource(config.elasticsearch); var ejs = ejsResource(config.elasticsearch);
var _f = dashboard.current.services.filter;
// Save a reference to this // Save a reference to this
var self = this; var self = this;
...@@ -34,7 +32,6 @@ define([ ...@@ -34,7 +32,6 @@ define([
// Accessors // Accessors
self.list = dashboard.current.services.filter.list; self.list = dashboard.current.services.filter.list;
self.ids = dashboard.current.services.filter.ids; self.ids = dashboard.current.services.filter.ids;
_f = dashboard.current.services.filter;
_.each(self.list,function(f) { _.each(self.list,function(f) {
self.set(f,f.id,true); self.set(f,f.id,true);
...@@ -97,8 +94,6 @@ define([ ...@@ -97,8 +94,6 @@ define([
delete self.list[id]; delete self.list[id];
// This must happen on the full path also since _.without returns a copy // This must happen on the full path also since _.without returns a copy
self.ids = dashboard.current.services.filter.ids = _.without(self.ids,id); self.ids = dashboard.current.services.filter.ids = _.without(self.ids,id);
_f.idQueue.unshift(id);
_f.idQueue.sort(function(v,k){return v-k;});
_r = true; _r = true;
} else { } else {
_r = false; _r = false;
...@@ -230,10 +225,14 @@ define([ ...@@ -230,10 +225,14 @@ define([
}; };
var nextId = function() { var nextId = function() {
if(_f.idQueue.length > 0) { var idCount = dashboard.current.services.filter.ids.length;
return _f.idQueue.shift(); if(idCount > 0) {
// Make a sorted copy of the ids array
var ids = _.clone(dashboard.current.services.filter.ids).sort();
return kbn.smallestMissing(ids);
} else { } else {
return self.ids.length; // No ids currently in list
return 0;
} }
}; };
......
...@@ -14,7 +14,6 @@ function (angular, _, config, kbn) { ...@@ -14,7 +14,6 @@ function (angular, _, config, kbn) {
// Create an object to hold our service state on the dashboard // Create an object to hold our service state on the dashboard
dashboard.current.services.query = dashboard.current.services.query || {}; dashboard.current.services.query = dashboard.current.services.query || {};
_.defaults(dashboard.current.services.query,{ _.defaults(dashboard.current.services.query,{
idQueue : [],
list : {}, list : {},
ids : [], ids : [],
}); });
...@@ -31,7 +30,6 @@ function (angular, _, config, kbn) { ...@@ -31,7 +30,6 @@ function (angular, _, config, kbn) {
// For convenience // For convenience
var ejs = ejsResource(config.elasticsearch); var ejs = ejsResource(config.elasticsearch);
var _q = dashboard.current.services.query;
// Holds all actual queries, including all resolved abstract queries // Holds all actual queries, including all resolved abstract queries
var resolvedQueries = []; var resolvedQueries = [];
...@@ -176,10 +174,6 @@ function (angular, _, config, kbn) { ...@@ -176,10 +174,6 @@ function (angular, _, config, kbn) {
delete self.list[id]; delete self.list[id];
// This must happen on the full path also since _.without returns a copy // This must happen on the full path also since _.without returns a copy
self.ids = dashboard.current.services.query.ids = _.without(self.ids,id); self.ids = dashboard.current.services.query.ids = _.without(self.ids,id);
_q.idQueue.unshift(id);
_q.idQueue.sort(function(v,k){
return v-k;
});
return true; return true;
} else { } else {
return false; return false;
...@@ -246,10 +240,14 @@ function (angular, _, config, kbn) { ...@@ -246,10 +240,14 @@ function (angular, _, config, kbn) {
}; };
var nextId = function() { var nextId = function() {
if(_q.idQueue.length > 0) { var idCount = dashboard.current.services.query.ids.length;
return _q.idQueue.shift(); if(idCount > 0) {
// Make a sorted copy of the ids array
var ids = _.clone(dashboard.current.services.query.ids).sort();
return kbn.smallestMissing(ids);
} else { } else {
return self.ids.length; // No ids currently in list
return 0;
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment