package org.fog.utils; import java.util.HashMap; import java.util.List; import java.util.Map; import org.cloudbus.cloudsim.core.CloudSim; import org.fog.entities.Tuple; public class TimeKeeper { private static TimeKeeper instance; private long simulationStartTime; private int count; private Map emitTimes; private Map endTimes; private Map> loopIdToTupleIds; private Map tupleIdToCpuStartTime; private Map tupleTypeToAverageCpuTime; private Map tupleTypeToExecutedTupleCount; private Map loopIdToCurrentAverage; private Map loopIdToCurrentNum; public static TimeKeeper getInstance(){ if(instance == null) instance = new TimeKeeper(); return instance; } public int getUniqueId(){ return count++; } public void tupleStartedExecution(Tuple tuple){ tupleIdToCpuStartTime.put(tuple.getCloudletId(), CloudSim.clock()); } public void tupleEndedExecution(Tuple tuple){ if(!tupleIdToCpuStartTime.containsKey(tuple.getCloudletId())) return; double executionTime = CloudSim.clock() - tupleIdToCpuStartTime.get(tuple.getCloudletId()); if(!tupleTypeToAverageCpuTime.containsKey(tuple.getTupleType())){ tupleTypeToAverageCpuTime.put(tuple.getTupleType(), executionTime); tupleTypeToExecutedTupleCount.put(tuple.getTupleType(), 1); } else{ double currentAverage = tupleTypeToAverageCpuTime.get(tuple.getTupleType()); int currentCount = tupleTypeToExecutedTupleCount.get(tuple.getTupleType()); tupleTypeToAverageCpuTime.put(tuple.getTupleType(), (currentAverage*currentCount+executionTime)/(currentCount+1)); } } public Map> loopIdToTupleIds(){ return getInstance().getLoopIdToTupleIds(); } private TimeKeeper(){ count = 1; setEmitTimes(new HashMap()); setEndTimes(new HashMap()); setLoopIdToTupleIds(new HashMap>()); setTupleTypeToAverageCpuTime(new HashMap()); setTupleTypeToExecutedTupleCount(new HashMap()); setTupleIdToCpuStartTime(new HashMap()); setLoopIdToCurrentAverage(new HashMap()); setLoopIdToCurrentNum(new HashMap()); } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public Map getEmitTimes() { return emitTimes; } public void setEmitTimes(Map emitTimes) { this.emitTimes = emitTimes; } public Map getEndTimes() { return endTimes; } public void setEndTimes(Map endTimes) { this.endTimes = endTimes; } public Map> getLoopIdToTupleIds() { return loopIdToTupleIds; } public void setLoopIdToTupleIds(Map> loopIdToTupleIds) { this.loopIdToTupleIds = loopIdToTupleIds; } public Map getTupleTypeToAverageCpuTime() { return tupleTypeToAverageCpuTime; } public void setTupleTypeToAverageCpuTime( Map tupleTypeToAverageCpuTime) { this.tupleTypeToAverageCpuTime = tupleTypeToAverageCpuTime; } public Map getTupleTypeToExecutedTupleCount() { return tupleTypeToExecutedTupleCount; } public void setTupleTypeToExecutedTupleCount( Map tupleTypeToExecutedTupleCount) { this.tupleTypeToExecutedTupleCount = tupleTypeToExecutedTupleCount; } public Map getTupleIdToCpuStartTime() { return tupleIdToCpuStartTime; } public void setTupleIdToCpuStartTime(Map tupleIdToCpuStartTime) { this.tupleIdToCpuStartTime = tupleIdToCpuStartTime; } public long getSimulationStartTime() { return simulationStartTime; } public void setSimulationStartTime(long simulationStartTime) { this.simulationStartTime = simulationStartTime; } public Map getLoopIdToCurrentAverage() { return loopIdToCurrentAverage; } public void setLoopIdToCurrentAverage(Map loopIdToCurrentAverage) { this.loopIdToCurrentAverage = loopIdToCurrentAverage; } public Map getLoopIdToCurrentNum() { return loopIdToCurrentNum; } public void setLoopIdToCurrentNum(Map loopIdToCurrentNum) { this.loopIdToCurrentNum = loopIdToCurrentNum; } }