package edu.usc.enl.dynamicmeasurement.algorithms.transform; import edu.usc.enl.dynamicmeasurement.data.ConfigReader; import edu.usc.enl.dynamicmeasurement.model.WildcardPattern; import edu.usc.enl.dynamicmeasurement.process.EpochPacket; import edu.usc.enl.dynamicmeasurement.util.Util; import org.w3c.dom.Element; import java.util.HashMap; import java.util.Map; /** * Created with IntelliJ IDEA. * User: masoud * Date: 7/25/13 * Time: 1:43 PM */ public class SkewPacketUser extends TrafficTransformer { private Map<Long, Double> ipTraffic = new HashMap<>(); private double skewChangeFactor = -1; public SkewPacketUser(Element element) { super(element); Map<String, Element> childrenProperties = Util.getChildrenProperties(element, "Property"); this.skewChangeFactor = Double.parseDouble(childrenProperties.get("Skew").getAttribute(ConfigReader.PROPERTY_VALUE)); } public SkewPacketUser(WildcardPattern filter, double skewChangeFactor) { super(filter); this.skewChangeFactor = skewChangeFactor; } @Override protected void process2(edu.usc.enl.dynamicmeasurement.data.DataPacket p) { if (match(p)) { Double aDouble = ipTraffic.get(p.getSrcIP()); if (aDouble == null) { aDouble = 0d; } ipTraffic.put(p.getSrcIP(), aDouble + p.getSize()); } else { passPacket(p); } } @Override protected void step(EpochPacket p) { long time = p.getTime(); double oldSum = 0; double newSum = 0; for (Map.Entry<Long, Double> entry : ipTraffic.entrySet()) { oldSum += entry.getValue(); double newSize = Math.pow(entry.getValue(), skewChangeFactor); newSum += newSize; entry.setValue(newSize); } double sumScaleFactor = //1; oldSum / newSum; for (Map.Entry<Long, Double> entry : ipTraffic.entrySet()) { edu.usc.enl.dynamicmeasurement.data.DataPacket p2 = new edu.usc.enl.dynamicmeasurement.data.DataPacket(time, 0, 0, 0, 0, 0, 0); p2.setSrcIP(entry.getKey()); p2.setSize(entry.getValue() * sumScaleFactor); passPacket(p2); } passPacket(p); } @Override protected void reset() { super.reset(); ipTraffic.clear(); } }