Generates list of virtual machines
// Generates a list of virtual machines with random parameter values .
class VirtualMachine {
private cores : number;
private memory: number;
private hdd: number;
constructor(
cores: number,
memory: number,
hdd : number
) {
this.cores = cores;
this.memory = memory;
this.hdd = hdd;
}
public getCores() : number {
return this.cores;
}
public getMemory(): number {
return this.memory;
}
public getHDD() : number {
return this.hdd;
}
}
class Server {
private cores : number;
private memory: number;
private hdd: number;
constructor(
cores: number,
memory: number,
hdd : number
) {
this.cores = cores;
this.memory = memory;
this.hdd = hdd;
}
public getCores() : number {
return this.cores;
}
public getMemory(): number {
return this.memory;
}
public getHDD() : number {
return this.hdd;
}
}
const MULTIPLIER: number = 100;
const DIVIDER : number = 3;
// preset choice of values
let cores : Array = [ 1, 2, 4, 8 ];
let memories: Array = [ 2, 4, 8, 16 ];
let hdds : Array = [ 256, 512, 1024, 2048 ];
let server: Server = new Server(32, 64, 8192);
// current values
let usedCores: number = 0;
let usedMemory: number = 0;
let usedHdd: number = 0;
// init parameters of new virtual machine instance
let c: number = 0;
let m: number = 0;
let h: number = 0;
// collection of VMs
let virtuals: Array = [];
let cIdx: number = -1;
let mIdx: number = -1;
let hIdx: number = -1;
// auxiliary counter
let count: number = 0;
while (
count <= cores.length
) {
// calculate random array indices
cIdx = parseInt( ( ( Math.random() * MULTIPLIER ) %
DIVIDER ).toFixed( 0 ) );
mIdx = parseInt( ( ( Math.random() * MULTIPLIER ) %
DIVIDER ).toFixed( 0 ) );
hIdx = parseInt( ( ( Math.random() * MULTIPLIER) % DIVIDER ).toFixed( 0 ) );
// retrieve parameter values
c = cores[ cIdx ];
m = memories[ mIdx ];
h = hdds[ hIdx ];
usedCores += c;
usedMemory += m;
usedHdd += h;
if (
usedCores <= server.getCores()
&&
usedMemory <= server.getMemory()
&&
usedHdd <= server.getHDD()
) {
virtuals.push(new VirtualMachine(c, m, h));
}
// add bogus instance that marks limit violation
else {
virtuals.push(new VirtualMachine(0,0,0));
break;
}
count++;
}
let
let
let
let
vm2string: String = '';
totalCores: number = 0;
totalMemory: number = 0;
totalHDD: number = 0;
for (let i: number = 0; i < virtuals.length; i++) {
if (
// skip bogus instances
virtuals[i].getCores() == 0
||
virtuals[i].getMemory() == 0
||
virtuals[i].getHDD() == 0
) {
continue;
}
// build output string
else {
vm2string += 'VM[ ' + (i + 1) + " ]: ";
vm2string += "Cores: " + virtuals[i].getCores() + ', ';
vm2string += 'memory: ' + virtuals[i].getMemory() + ', ';
vm2string += 'HDD: ' + virtuals[i].getHDD() + "\n";
totalCores += virtuals[i].getCores();
totalMemory += virtuals[i].getMemory();
totalHDD += virtuals[i].getHDD();
}
}
vm2string += `\nTotal cores: ` + totalCores + "\n";
vm2string += 'Total memory: ' + totalMemory + "\n";
vm2string += 'Total HDD: ' + totalHDD + "\n";
alert( vm2string );