1 package at.ac.tuwien.lsdc.types;
3 import java.util.HashMap;
5 public class PhysicalMachine {
7 private static int count = 0;
9 private HashMap<Integer, VirtualMachine> VMs = new HashMap<Integer, VirtualMachine>();
13 private final int maxSize = 50000;
14 private final int maxRAM = 4700;
15 private final int maxCPU = 2400;
21 private final int initialSize = 850;
22 private final int initialRAM = 300;
23 private final int initialCPU = 500;
25 private boolean running = false;
27 public PhysicalMachine() {
40 // TODO: anything else we need to do? maybe implement a stop method in
41 // VirtualMachine and call it on every VM
42 VMs = new HashMap<Integer, VirtualMachine>();
49 public double getConsumption() {
50 return 200 + 0.3 * CPU;
53 public int startVirtualMachine(int size, int RAM, int CPU) {
54 if (checkVM(size, RAM, CPU)) {
55 VirtualMachine vm = new VirtualMachine(size, RAM, CPU, this);
56 VMs.put(vm.getId(), vm);
57 size = size + vm.getSize();
58 RAM = RAM + vm.getRAM();
59 CPU = CPU + vm.getCPU();
65 public boolean stopVirtualMachine(VirtualMachine vm) {
66 if (VMs.containsKey(vm.getId())) {
67 if (vm.getApplications().size() != 0) {
68 // apps must be migrated before stopping a VM
71 VMs.remove(vm.getId());
72 size = size - vm.getSize();
73 RAM = RAM - vm.getRAM();
74 CPU = CPU - vm.getCPU();
81 private boolean checkVM(int size, int RAM, int CPU) {
82 return (size <= availableSize()) && (RAM <= availableRAM())
83 && (CPU <= availableCPU());
86 private int availableSize() {
87 return maxSize - size;
90 private int availableRAM() {
94 private int availableCPU() {
102 public boolean isRunning() {
106 public VirtualMachine getVirtualMachine(int id) {
110 public int countCurrentlyRunningVMs() {
111 return VMs.values().size();