package edu.usc.enl.dynamicmeasurement.process.scripts;
import edu.usc.enl.dynamicmeasurement.data.FinishPacket;
import edu.usc.enl.dynamicmeasurement.model.WildcardPattern;
import edu.usc.enl.dynamicmeasurement.process.EpochPacket;
import edu.usc.enl.dynamicmeasurement.process.StepPacketUser;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
/**
* Created with IntelliJ IDEA.
* User: masoud
* Date: 2/10/13
* Time: 5:15 PM
*/
public class TrimmedTrafficReport extends StepPacketUser {
private final int levels;
private final Map<WildcardPattern, WildcardPattern> snapshot;
private final PrintWriter pw;
private double sum = 0;
public TrimmedTrafficReport(boolean resetOnStep, int levels, PrintWriter pw) {
super();
this.levels = levels;
this.pw = pw;
snapshot = new HashMap<>(1 << (levels + 1), 1);
for (int i = 0; i < (1 << levels); i++) {
WildcardPattern w = new WildcardPattern(i, levels, 0);
snapshot.put(w, w);
while (w.canGoUp()) {
if (w.isLeft()) {
w = w.clone().goUp();
snapshot.put(w, w);
} else {
break;
}
}
}
}
@Override
protected void process2(edu.usc.enl.dynamicmeasurement.data.DataPacket p) {
long srcIP = p.getSrcIP();
srcIP >>>= levels;
for (int i = 0; i < levels; i++) {
WildcardPattern w = snapshot.get(new WildcardPattern(srcIP, levels + i, 0));
w.setWeight(w.getWeight() + p.getSize());
srcIP >>>= 1;
}
}
@Override
protected void step(EpochPacket p) {
//write the snapshot to file
for (WildcardPattern wildcardPattern : snapshot.keySet()) {
pw.println(p.getStep() + "," +
((wildcardPattern.getData() << wildcardPattern.getWildcardNum()) * 100 + wildcardPattern.getWildcardNum()) + "," +
wildcardPattern.getWildcardNum() + "," +
wildcardPattern.getWeight());
}
pw.flush();
}
@Override
public void finish(FinishPacket p) {
}
}