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.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Created with IntelliJ IDEA.
* User: Masoud
* Date: 1/31/13
* Time: 7:02 PM
*/
public class TrafficReport extends StepPacketUser {
private Map<WildcardPattern, WildcardPattern> snapshot = new HashMap<>();
private final PrintWriter pw;
private double sum = 0;
public TrafficReport(boolean resetOnStep, Set<WildcardPattern> wildcards,
String outputFile) throws IOException {
super();
snapshot = new HashMap<>(wildcards.size());
for (WildcardPattern wildcard : wildcards) {
snapshot.put(wildcard, wildcard);
}
new File(outputFile).getParentFile().mkdirs();
pw = new PrintWriter(new BufferedWriter(new FileWriter(outputFile)));
}
@Override
public void finish(FinishPacket p) {
pw.close();
}
@Override
protected void process2(edu.usc.enl.dynamicmeasurement.data.DataPacket p) {
long srcIP = p.getSrcIP();
sum += p.getSize();
for (int i = 0; i < WildcardPattern.TOTAL_LENGTH + 1; i++) {
WildcardPattern wildcardPattern = snapshot.get(new WildcardPattern(srcIP >>> i, i, 0));
if (wildcardPattern != null) {
wildcardPattern.setWeight(wildcardPattern.getWeight() + p.getSize());
}
}
}
@Override
protected void step(EpochPacket p) {
//write the snapshot to file
for (WildcardPattern wildcardPattern : snapshot.keySet()) {
pw.println(p.getStep() + "," +
((wildcardPattern.getData() << (wildcardPattern.getWildcardNum() + 6)) + wildcardPattern.getWildcardNum()) + "," +
wildcardPattern.getWildcardNum() + "," +
wildcardPattern.getWeight());
}
pw.flush();
for (WildcardPattern wildcardPattern : snapshot.keySet()) {
wildcardPattern.setWeight(0);
}
System.out.println(p.getStep() + "," + sum);
}
@Override
protected void reset() {
super.reset();
sum = 0;
}
}