package org.fog.test.perfeval; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Random; import org.cloudbus.cloudsim.Host; import org.cloudbus.cloudsim.Log; import org.cloudbus.cloudsim.Pe; import org.cloudbus.cloudsim.Storage; import org.cloudbus.cloudsim.core.CloudSim; import org.cloudbus.cloudsim.power.PowerHost; import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple; import org.cloudbus.cloudsim.sdn.overbooking.BwProvisionerOverbooking; import org.cloudbus.cloudsim.sdn.overbooking.PeProvisionerOverbooking; import org.fog.application.AppEdge; import org.fog.application.AppLoop; import org.fog.application.MyApplication; import org.fog.application.selectivity.FractionalSelectivity; import org.fog.entities.FogBroker; import org.fog.entities.FogDeviceCharacteristics; import org.fog.entities.MyActuator; import org.fog.entities.MyFogDevice; import org.fog.entities.MySensor; import org.fog.entities.Tuple; import org.fog.placement.ModuleMapping; import org.fog.placement.MyController; import org.fog.placement.MyModulePlacement; import org.fog.policy.AppModuleAllocationPolicy; import org.fog.scheduler.StreamOperatorScheduler; import org.fog.utils.FogLinearPowerModel; import org.fog.utils.FogUtils; import org.fog.utils.TimeKeeper; import org.fog.utils.distribution.DeterministicDistribution; public class TestApplication { static List fogDevices = new ArrayList(); static Map deviceById = new HashMap(); static List sensors = new ArrayList(); static List actuators = new ArrayList(); static List idOfEndDevices = new ArrayList(); static Map> deadlineInfo = new HashMap>(); static Map> additionalMipsInfo = new HashMap>(); static boolean CLOUD = false; static int numOfGateways = 2; static int numOfEndDevPerGateway = 3; static double sensingInterval = 5; public static void main(String[] args) { Log.printLine("Starting TestApplication..."); try { Log.disable(); int num_user = 1; Calendar calendar = Calendar.getInstance(); boolean trace_flag = false; CloudSim.init(num_user, calendar, trace_flag); String appId = "test_app"; FogBroker broker = new FogBroker("broker"); createFogDevices(broker.getId(), appId); MyApplication application = createApplication(appId, broker.getId()); application.setUserId(broker.getId()); ModuleMapping moduleMapping = ModuleMapping.createModuleMapping(); moduleMapping.addModuleToDevice("storageModule", "cloud"); for(int i=0;i peList = new ArrayList(); peList.add(new Pe(0, new PeProvisionerOverbooking(mips))); int hostId = FogUtils.generateEntityId(); long storage = 1000000; int bw = 10000; PowerHost host = new PowerHost( hostId, new RamProvisionerSimple(ram), new BwProvisionerOverbooking(bw), storage, peList, new StreamOperatorScheduler(peList), new FogLinearPowerModel(busyPower, idlePower) ); List hostList = new ArrayList(); hostList.add(host); String arch = "x86"; String os = "Linux"; String vmm = "Xen"; double time_zone = 10.0; double cost = 3.0; double costPerMem = 0.05; double costPerStorage = 0.001; double costPerBw = 0.0; LinkedList storageList = new LinkedList(); FogDeviceCharacteristics characteristics = new FogDeviceCharacteristics( arch, os, vmm, host, time_zone, cost, costPerMem, costPerStorage, costPerBw); MyFogDevice fogdevice = null; try { fogdevice = new MyFogDevice(nodeName, characteristics, new AppModuleAllocationPolicy(hostList), storageList, 10, upBw, downBw, 0, ratePerMips); } catch (Exception e) { e.printStackTrace(); } fogdevice.setLevel(level); fogdevice.setMips((int) mips); return fogdevice; } @SuppressWarnings({"serial" }) private static MyApplication createApplication(String appId, int userId){ MyApplication application = MyApplication.createApplication(appId, userId); application.addAppModule("clientModule",10, 1000, 1000, 100); application.addAppModule("mainModule", 50, 1500, 4000, 800); application.addAppModule("storageModule", 10, 50, 12000, 100); application.addAppEdge("IoTSensor", "clientModule", 100, 200, "IoTSensor", Tuple.UP, AppEdge.SENSOR); application.addAppEdge("clientModule", "mainModule", 6000, 600 , "RawData", Tuple.UP, AppEdge.MODULE); application.addAppEdge("mainModule", "storageModule", 1000, 300, "StoreData", Tuple.UP, AppEdge.MODULE); application.addAppEdge("mainModule", "clientModule", 100, 50, "ResultData", Tuple.DOWN, AppEdge.MODULE); application.addAppEdge("clientModule", "IoTActuator", 100, 50, "Response", Tuple.DOWN, AppEdge.ACTUATOR); application.addTupleMapping("clientModule", "IoTSensor", "RawData", new FractionalSelectivity(1.0)); application.addTupleMapping("mainModule", "RawData", "ResultData", new FractionalSelectivity(1.0)); application.addTupleMapping("mainModule", "RawData", "StoreData", new FractionalSelectivity(1.0)); application.addTupleMapping("clientModule", "ResultData", "Response", new FractionalSelectivity(1.0)); for(int id:idOfEndDevices) { MapmoduleDeadline = new HashMap(); moduleDeadline.put("mainModule", getvalue(3.00, 5.00)); MapmoduleAddMips = new HashMap(); moduleAddMips.put("mainModule", getvalue(0, 500)); deadlineInfo.put(id, moduleDeadline); additionalMipsInfo.put(id,moduleAddMips); } final AppLoop loop1 = new AppLoop(new ArrayList(){{add("IoTSensor");add("clientModule");add("mainModule");add("clientModule");add("IoTActuator");}}); List loops = new ArrayList(){{add(loop1);}}; application.setLoops(loops); application.setDeadlineInfo(deadlineInfo); application.setAdditionalMipsInfo(additionalMipsInfo); return application; } }