145 lines
3.8 KiB
Java
145 lines
3.8 KiB
Java
package org.fog.entities;
|
|
|
|
import org.cloudbus.cloudsim.core.CloudSim;
|
|
import org.cloudbus.cloudsim.core.SimEntity;
|
|
import org.cloudbus.cloudsim.core.SimEvent;
|
|
import org.fog.application.AppLoop;
|
|
import org.fog.application.MyApplication;
|
|
import org.fog.utils.FogEvents;
|
|
import org.fog.utils.GeoLocation;
|
|
import org.fog.utils.Logger;
|
|
import org.fog.utils.TimeKeeper;
|
|
|
|
public class MyActuator extends SimEntity{
|
|
|
|
private int gatewayDeviceId;
|
|
private double latency;
|
|
private GeoLocation geoLocation;
|
|
private String appId;
|
|
private int userId;
|
|
private String actuatorType;
|
|
private MyApplication app;
|
|
|
|
public MyActuator(String name, int userId, String appId, int gatewayDeviceId, double latency, GeoLocation geoLocation, String actuatorType, String srcModuleName) {
|
|
super(name);
|
|
this.setAppId(appId);
|
|
this.gatewayDeviceId = gatewayDeviceId;
|
|
this.geoLocation = geoLocation;
|
|
setUserId(userId);
|
|
setMyActuatorType(actuatorType);
|
|
setLatency(latency);
|
|
}
|
|
|
|
public MyActuator(String name, int userId, String appId, String actuatorType) {
|
|
super(name);
|
|
this.setAppId(appId);
|
|
setUserId(userId);
|
|
setMyActuatorType(actuatorType);
|
|
}
|
|
|
|
@Override
|
|
public void startEntity() {
|
|
sendNow(gatewayDeviceId, FogEvents.ACTUATOR_JOINED, getLatency());
|
|
}
|
|
|
|
@Override
|
|
public void processEvent(SimEvent ev) {
|
|
switch(ev.getTag()){
|
|
case FogEvents.TUPLE_ARRIVAL:
|
|
processTupleArrival(ev);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void processTupleArrival(SimEvent ev) {
|
|
Tuple tuple = (Tuple)ev.getData();
|
|
Logger.debug(getName(), "Received tuple "+tuple.getCloudletId()+"on "+tuple.getDestModuleName());
|
|
String srcModule = tuple.getSrcModuleName();
|
|
String destModule = tuple.getDestModuleName();
|
|
MyApplication app = getApp();
|
|
|
|
for(AppLoop loop : app.getLoops()){
|
|
if(loop.hasEdge(srcModule, destModule) && loop.isEndModule(destModule)){
|
|
|
|
Double startTime = TimeKeeper.getInstance().getEmitTimes().get(tuple.getActualTupleId());
|
|
if(startTime==null)
|
|
break;
|
|
if(!TimeKeeper.getInstance().getLoopIdToCurrentAverage().containsKey(loop.getLoopId())){
|
|
TimeKeeper.getInstance().getLoopIdToCurrentAverage().put(loop.getLoopId(), 0.0);
|
|
TimeKeeper.getInstance().getLoopIdToCurrentNum().put(loop.getLoopId(), 0);
|
|
}
|
|
double currentAverage = TimeKeeper.getInstance().getLoopIdToCurrentAverage().get(loop.getLoopId());
|
|
int currentCount = TimeKeeper.getInstance().getLoopIdToCurrentNum().get(loop.getLoopId());
|
|
double delay = CloudSim.clock()- TimeKeeper.getInstance().getEmitTimes().get(tuple.getActualTupleId());
|
|
TimeKeeper.getInstance().getEmitTimes().remove(tuple.getActualTupleId());
|
|
double newAverage = (currentAverage*currentCount + delay)/(currentCount+1);
|
|
TimeKeeper.getInstance().getLoopIdToCurrentAverage().put(loop.getLoopId(), newAverage);
|
|
TimeKeeper.getInstance().getLoopIdToCurrentNum().put(loop.getLoopId(), currentCount+1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void shutdownEntity() {
|
|
|
|
}
|
|
|
|
public int getGatewayDeviceId() {
|
|
return gatewayDeviceId;
|
|
}
|
|
|
|
public void setGatewayDeviceId(int gatewayDeviceId) {
|
|
this.gatewayDeviceId = gatewayDeviceId;
|
|
}
|
|
|
|
public GeoLocation getGeoLocation() {
|
|
return geoLocation;
|
|
}
|
|
|
|
public void setGeoLocation(GeoLocation geoLocation) {
|
|
this.geoLocation = geoLocation;
|
|
}
|
|
|
|
public int getUserId() {
|
|
return userId;
|
|
}
|
|
|
|
public void setUserId(int userId) {
|
|
this.userId = userId;
|
|
}
|
|
|
|
public String getAppId() {
|
|
return appId;
|
|
}
|
|
|
|
public void setAppId(String appId) {
|
|
this.appId = appId;
|
|
}
|
|
|
|
public String getMyActuatorType() {
|
|
return actuatorType;
|
|
}
|
|
|
|
public void setMyActuatorType(String actuatorType) {
|
|
this.actuatorType = actuatorType;
|
|
}
|
|
|
|
public MyApplication getApp() {
|
|
return app;
|
|
}
|
|
|
|
public void setApp(MyApplication app) {
|
|
this.app = app;
|
|
}
|
|
|
|
public double getLatency() {
|
|
return latency;
|
|
}
|
|
|
|
public void setLatency(double latency) {
|
|
this.latency = latency;
|
|
}
|
|
|
|
}
|