Files
ifogsim/src/org/fog/placement/ModulePlacementOnlyCloud.java
2021-04-06 00:45:28 +02:00

102 lines
3.4 KiB
Java

package org.fog.placement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.cloudbus.cloudsim.core.CloudSim;
import org.fog.application.AppEdge;
import org.fog.application.AppModule;
import org.fog.application.Application;
import org.fog.entities.Actuator;
import org.fog.entities.FogDevice;
import org.fog.entities.Sensor;
import org.fog.entities.Tuple;
public class ModulePlacementOnlyCloud extends ModulePlacement{
private List<Sensor> sensors;
private List<Actuator> actuators;
private int cloudId;
public ModulePlacementOnlyCloud(List<FogDevice> fogDevices, List<Sensor> sensors, List<Actuator> actuators, Application application){
this.setFogDevices(fogDevices);
this.setApplication(application);
this.setSensors(sensors);
this.setActuators(actuators);
this.setModuleToDeviceMap(new HashMap<String, List<Integer>>());
this.setDeviceToModuleMap(new HashMap<Integer, List<AppModule>>());
this.setModuleInstanceCountMap(new HashMap<Integer, Map<String, Integer>>());
this.cloudId = CloudSim.getEntityId("cloud");
mapModules();
computeModuleInstanceCounts();
}
private void computeModuleInstanceCounts(){
FogDevice cloud = getDeviceById(CloudSim.getEntityId("cloud"));
getModuleInstanceCountMap().put(cloud.getId(), new HashMap<String, Integer>());
for(Sensor sensor : getSensors()){
String sensorType = sensor.getSensorName();
if(!getModuleInstanceCountMap().get(cloud.getId()).containsKey(sensorType))
getModuleInstanceCountMap().get(cloud.getId()).put(sensorType, 0);
getModuleInstanceCountMap().get(cloud.getId()).put(sensorType, getModuleInstanceCountMap().get(cloud.getId()).get(sensorType)+1);
}
for(Actuator actuator : getActuators()){
String actuatorType = actuator.getActuatorType();
if(!getModuleInstanceCountMap().get(cloud.getId()).containsKey(actuatorType))
getModuleInstanceCountMap().get(cloud.getId()).put(actuatorType, 0);
getModuleInstanceCountMap().get(cloud.getId()).put(actuatorType, getModuleInstanceCountMap().get(cloud.getId()).get(actuatorType)+1);
}
while(!isModuleInstanceCalculationComplete()){
for(AppModule module : getApplication().getModules()){
int maxInstances = 0;
for(AppEdge edge : getApplication().getEdges()){
if(!getModuleInstanceCountMap().get(cloudId).containsKey(edge.getSource()))
continue;
if(edge.getDestination().equals(module.getName()) && edge.getDirection()==Tuple.UP){
maxInstances = Math.max(maxInstances, getModuleInstanceCountMap().get(cloudId).get(edge.getSource()));
}
}
getModuleInstanceCountMap().get(cloudId).put(module.getName(), maxInstances);
}
}
System.out.println(getModuleInstanceCountMap());
}
private boolean isModuleInstanceCalculationComplete() {
for(AppModule module : getApplication().getModules()){
if(!getModuleInstanceCountMap().get(cloudId).containsKey(module.getName()))
return false;
}
return true;
}
@Override
protected void mapModules() {
List<AppModule> modules = getApplication().getModules();
for(AppModule module : modules){
FogDevice cloud = getDeviceById(cloudId);
createModuleInstanceOnDevice(module, cloud);
}
}
public List<Actuator> getActuators() {
return actuators;
}
public void setActuators(List<Actuator> actuators) {
this.actuators = actuators;
}
public List<Sensor> getSensors() {
return sensors;
}
public void setSensors(List<Sensor> sensors) {
this.sensors = sensors;
}
}