This commit is contained in:
William Mantly 2016-05-30 19:45:51 -04:00
parent 7c97bed5b0
commit 9072167e65
2 changed files with 21 additions and 28 deletions

View File

@ -15,31 +15,25 @@ var label2runner = {};
var workers = []; var workers = [];
var isCheckingWorkers = false; var isCheckingWorkers = false;
var dopletNewID = 0;
var workers = (function(){ var workers = (function(){
var workers = []; var workers = [];
workers.push = function(item){
console.log('pushing item ', item, ' to workers')
return Array.prototype.push.call(this, item);
};
workers.checkDroplet = function(id, time){ workers.checkDroplet = function(id, time){
time = time || 10000; time = time || 10000;
doapi.dropletInfo(id, function(data){
return doapi.dropletInfo(id, function(data){
var worker = JSON.parse(data)['droplet']; var worker = JSON.parse(data)['droplet'];
if(worker.status == 'active'){ if(worker.status == 'active'){
console.log('Droplet is now active, starting runners in 20 seconds') console.log('Droplet is now active, starting runners in 20 seconds');
setTimeout(function(worker){
console.log('Ready to start runners!') return setTimeout(function(worker){
workers.startRunners(workers.makeWorkerObj(worker), true) console.log('Ready to start runners!');
isCheckingWorkers = false; workers.startRunners(workers.makeWorkerObj(worker), true);
}, 20000, worker); }, 20000, worker);
return true;
}else{ }else{
console.log('Worker not ready, check again in ', time, 'MS'); console.log('Worker not ready, check again in ', time, 'MS');
setTimeout(function(){
return setTimeout(function(){
workers.checkDroplet(id); workers.checkDroplet(id);
}, time); }, time);
} }
@ -47,24 +41,23 @@ var workers = (function(){
}; };
workers.create = function(){ workers.create = function(){
doapi.dropletCreate({ return doapi.dropletCreate({
name: 'clw'+workerSnapID+'-'+(Math.random()*100).toString().replace('.',''), name: 'clw'+workerSnapID+'-'+(Math.random()*100).toString().replace('.',''),
image: '17575764' image: '17575764'
}, function(data){ }, function(data){
data = JSON.parse(data); data = JSON.parse(data);
setTimeout(function(dopletNewID){ setTimeout(function(dopletNewID){
workers.checkDroplet(dopletNewID); return workers.checkDroplet(dopletNewID);
}, 70000, data.droplet.id); }, 70000, data.droplet.id);
doapi.dropletSetTag('clworker', data.droplet.id, function(){}); return doapi.dropletSetTag('clworker', data.droplet.id, function(){});
}); });
}; };
workers.destroy = function(worker){ workers.destroy = function(worker){
var worker = worker || workers.pop(); var worker = worker || workers.pop();
doapi.dropletDestroy(worker.id, function(){ return doapi.dropletDestroy(worker.id, function(){});
isCheckingWorkers = false;
});
}; };
workers.makeWorkerObj = function(worker){ workers.makeWorkerObj = function(worker){
@ -84,6 +77,7 @@ var workers = (function(){
return runner; return runner;
} }
return worker; return worker;
}; };
@ -123,9 +117,7 @@ var workers = (function(){
}; };
workers.checkBalance = function(){ workers.checkBalance = function(){
if(isCheckingWorkers) return false;
isCheckingWorkers = true;
var changed = false;
var minWorkers = 3; var minWorkers = 3;
console.log('checking balance'); console.log('checking balance');
@ -134,11 +126,11 @@ var workers = (function(){
for(var i=minWorkers-workers.length; i--;) workers.create(); for(var i=minWorkers-workers.length; i--;) workers.create();
return ; return ;
} }
if(workers[workers.length-2].usedrunner !== 0){ if(workers[workers.length-3].usedrunner !== 0){
console.log('last droplet has no free runners, starting droplet'); console.log('last droplet has no free runners, starting droplet');
return workers.create(); return workers.create();
} }
if(workers.length > minWorkers && workers[workers.length-2].usedrunner === 0 && workers[workers.length-1].usedrunner === 0 && workers[workers.length-2].usedrunner === 0){ if(workers.length > minWorkers && workers[workers.length-3].usedrunner === 0 && workers[workers.length-2].usedrunner === 0 && workers[workers.length-1].usedrunner === 0){
console.log('Last 2 runners not used, killing last runner', workers.length); console.log('Last 2 runners not used, killing last runner', workers.length);
return workers.destroy(); return workers.destroy();
} }
@ -152,7 +144,6 @@ var workers = (function(){
} }
console.log('stopping workers balancing check'); console.log('stopping workers balancing check');
isCheckingWorkers = false;
}; };
return workers; return workers;
@ -226,10 +217,12 @@ var getAvailrunner = function(runner){
if(runner) return runner; if(runner) return runner;
return false; return false;
}; };
setTimeout(function(){ setTimeout(function(){
console.log('Starting balance checking in 30 seconds') console.log('Starting balance checking in 30 seconds')
setInterval(workers.checkBalance, 15000); setInterval(workers.checkBalance, 15000);
}, 180000); }, 180000);
workers.destroyOld(); workers.destroyOld();
workers.checkBalance(); workers.checkBalance();

View File

@ -16,4 +16,4 @@ def testAPI(times=100, sleep=2):
print('caught error') print('caught error')
errors += 1 errors += 1
time.sleep(sleep) time.sleep(sleep)
print('errors ', errors) print('errors ', errors, (errors/times)*100)