updated checkBalance

This commit is contained in:
Thomas Harvey 2017-10-11 22:59:23 -04:00
parent 654628b44d
commit 41874764bd
2 changed files with 56 additions and 40 deletions

View File

@ -59,7 +59,7 @@ var Worker = (function(){
var worker = Object.create(proto); var worker = Object.create(proto);
Object.assign(worker, config); Object.assign(worker, config);
worker.networks.v4.forEach(function(value){ worker.networks.v4.forEach(function(value){
worker[value.type+'IP'] = value.ip_address; worker[ value.type + 'IP' ] = value.ip_address;
}); });
worker.availrunners = []; worker.availrunners = [];
@ -67,6 +67,7 @@ var Worker = (function(){
worker.usedrunners = 0; worker.usedrunners = 0;
worker.age = +(new Date()); worker.age = +(new Date());
worker.isBuildingRunners = false; worker.isBuildingRunners = false;
worker.canSchedule = true;
return worker; return worker;
}; };
@ -93,6 +94,7 @@ var Worker = (function(){
proto.destroy = function(){ proto.destroy = function(){
var worker = this; var worker = this;
worker.canSchedule = false;
return doapi.dropletDestroy(this.id, function(body) { return doapi.dropletDestroy(this.id, function(body) {
console.log('Deleted worker', worker.name); console.log('Deleted worker', worker.name);
}); });
@ -103,7 +105,7 @@ var Worker = (function(){
}; };
proto.startRunners = function(args){ proto.startRunners = function(args){
// console.log('starting runners on', args.worker.name, args.worker.ip) console.log('Starting runners on', args.worker.name, args.worker.ip);
var worker = this; var worker = this;
// dont make runners on out dated workers // dont make runners on out dated workers
@ -189,7 +191,7 @@ var WorkerCollection = (function(){
//************************************************** //**************************************************
//************************************************** //**************************************************
// temporary until a better location is found // TODO: Move to Runners
workers.runnerMap = {}; workers.runnerMap = {};
workers.__runnerCleanUp = function(label){ workers.__runnerCleanUp = function(label){
@ -237,7 +239,7 @@ var WorkerCollection = (function(){
// move this to Create Droplet function? // move this to Create Droplet function?
doapi.dropletToActive({ doapi.dropletToActive({
name: 'clw' + config.version + '-' + (Math.random()*100).toString().slice(-4), name: config.tagPrefix + config.version + '-' + (Math.random()*100).toString().slice(-4),
image: config.image, image: config.image,
size: config.size, size: config.size,
onCreate: function(data){ onCreate: function(data){
@ -351,56 +353,65 @@ var WorkerCollection = (function(){
workers.checkForZombies(); workers.checkForZombies();
// if there are workers being created, stop scale up and down check // if there are workers being created, stop scale up and down check
if(workers.currentCreating + workers.length < workers.settings.min) { if(workers.currentCreating + workers.length > workers.settings.min) {
null; null;
} else if(workers.currentCreating){ } else if(workers.currentCreating){
return console.log(`Killing balance, workers are being created.`); return console.log(`Killing balance, workers are being created.`);
} }
// hold amount of workers with no used runners // count workers and locate oldest worker
var lastMinAval = 0; var oldestWorker, isNotOlder, workerCount = 0;
// check to make sure the `workers.settings.minAvail` have free runners for(let worker of workers){
for(let worker of workers.slice(-workers.settings.minAvail)){ console.log(`
// INVERT this conditional CHECK_BALANCE
if(worker.usedrunners !== 0){ worker.name: ${worker.name}
lastMinAval++; worker.usedrunners: ${worker.usedrunners}
}else{ worker.availrunners: ${worker.availrunners.length}
// no need to keep counting, workers need to be created workerCount: ${workerCount}
break; compare: ${worker.usedrunners !== 0}
`);
if(worker.usedrunners === 0){
workerCount++;
isNotOlder = oldestWorker && oldestWorker.age < worker.age
oldestWorker = (isNotOlder ? oldestWorker:worker);
} }
} }
console.log( if(workerCount > workers.settings.minAvail){
`LMA: ${lastMinAval}`, // Remove oldest worker if there are more than the settings file state
`Settings MA: ${workers.settings.minAvail}`, console.log(`
`Workers: ${workers.length}` Destroying Worker
); Last ${workers.settings.minAvail} workers not used, killing last worker
if(lastMinAval > workers.settings.minAvail){ workerCount: ${workerCount}
// Remove workers if there are more than the settings states minAvail: ${workers.settings.minAvail}
console.log( workers: ${workers.length}
`Last ${workers.settings.minAvail} workers not used, killing last worker`, `);
'lastMinAval:', lastMinAval, return workers.destroy(oldestWorker);
'minAvail:', workers.settings.minAvail,
'workers:', workers.length
);
return workers.destroy(); } else if( workerCount < workers.settings.minAvail){
// Creates worker if there are less than the settings state
} else if(lastMinAval < workers.settings.minAvail){ console.log(`
// creates workers if the settings file demands it Creating Worker
console.log( last 3 workers have no free runners, starting worker,
'last 3 workers have no free runners, starting worker', workerCount: ${workerCount}
'lastMinAval:', lastMinAval, minAvail: ${workers.settings.minAvail}
'minAvail:', workers.settings.minAvail, workers: ${workers.length}
'workers:', workers.length `);
);
return workers.create(); return workers.create();
} else {
console.log(`
Blanced
LMA: ${workerCount}
Settings MA: ${workers.settings.minAvail}
Workers: ${workers.length}
`);
} }
}; };
workers.settingsSave = function(){ workers.settingsSave = function(){
// save the live settings file to disk // save the live settings file to disk

View File

@ -37,6 +37,11 @@ sleep(${sleepTime})
noRunner++; noRunner++;
}else if(error || response.statusCode !== 200){ }else if(error || response.statusCode !== 200){
errors++; errors++;
console.log(`
ID: ${id}
Error: ${error}
`);
} else {
body = JSON.parse(body); body = JSON.parse(body);
res = (Buffer.from(body.res, 'base64').toString('ascii')); res = (Buffer.from(body.res, 'base64').toString('ascii'));
} }
@ -58,4 +63,4 @@ let __do = function(till){
setTimeout(__do, 1500, --till); setTimeout(__do, 1500, --till);
}; };
__do(30) __do(500);