[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r15341: Extended parsing script to obtain more information about des (projects/hidserv/trunk)
Author: kloesing
Date: 2008-06-17 18:13:56 -0400 (Tue, 17 Jun 2008)
New Revision: 15341
Modified:
projects/hidserv/trunk/LogFileParser.java
Log:
Extended parsing script to obtain more information about descriptor publication and message transfer times.
Modified: projects/hidserv/trunk/LogFileParser.java
===================================================================
--- projects/hidserv/trunk/LogFileParser.java 2008-06-17 21:19:58 UTC (rev 15340)
+++ projects/hidserv/trunk/LogFileParser.java 2008-06-17 22:13:56 UTC (rev 15341)
@@ -6,8 +6,10 @@
import java.io.IOException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.SortedMap;
@@ -67,14 +69,27 @@
+ "and publtime is the \n# time in millis that it takes "
+ "afterwards to publish the first rendezvous \n# "
+ "service descriptor.\n");
- bw.write("testid,inittime,publtime\n");
+ /* TODO: how to extend to cover n-th estipo and n-th publtime? */
+ bw.write("testid,inittime,numipos,estipo...,publtime\n");
for (Map.Entry<String, Long> e : initializationTimes.entrySet()) {
+ bw.write(e.getKey() + "," + e.getValue() + ","
+ + numIntroPoints.get(e.getKey()));
+ if (introEstablishedTimes.containsKey(e.getKey())) {
+ for (long intro : introEstablishedTimes.get(e.getKey())) {
+ bw.write("," + intro);
+ }
+ }
+ if (sendingDescriptorTimes.containsKey(e.getKey())) {
+ bw.write("," + sendingDescriptorTimes.get(e.getKey()));
+ } else {
+ bw.write(",NA");
+ }
if (publicationTimes.containsKey(e.getKey())) {
- bw.write(e.getKey() + "," + e.getValue() + ","
- + publicationTimes.get(e.getKey()) + "\n");
+ bw.write("," + publicationTimes.get(e.getKey()));
} else {
- bw.write(e.getKey() + "," + e.getValue() + ",NA\n");
+ bw.write(",NA");
}
+ bw.write("\n");
}
bw.close();
} catch (IOException e) {
@@ -136,38 +151,53 @@
System.exit(1);
}
try {
- BufferedWriter bw = new BufferedWriter(new FileWriter(
+ BufferedWriter bwTimes = new BufferedWriter(new FileWriter(
outputDirectory.getAbsolutePath() + File.separatorChar
+ "reqtimes.csv", false));
- bw.write("# testid contains a unique test identifier that matches "
- + "with the\n# identifiers used in the other output "
- + "files, msgid is the message number,\n# and reqtime is "
- + "the time in millis that it takes to send a request "
- + "from\n# client to server.\n");
- bw.write("testid,msgid,reqtime\n");
+ bwTimes.write("# testid contains a unique test identifier that "
+ + "matches with the\n# identifiers used in the other "
+ + "output files, msgid is the message number,\n# and "
+ + "reqtime is the time in millis that it takes to send a "
+ + "request from\n# client to server.\ntestid,msgid,"
+ + "reqtime\n");
+ BufferedWriter bwAvg = new BufferedWriter(new FileWriter(
+ outputDirectory.getAbsolutePath() + File.separatorChar
+ + "reqavg.csv", false));
+ bwAvg.write("# testid contains a unique test identifier that "
+ + "matches with the\n# identifiers used in the other "
+ + "output files, reqavg is the average\n# request time "
+ + "of this test.\ntestid,reqavg\n");
for (Map.Entry<String, PuppeTorEvent> e : puppeTorEvents.entrySet()) {
PuppeTorEvent event = e.getValue();
+ StringBuilder sb = new StringBuilder();
if (!event.receivedRequest.isEmpty()
&& !event.sendingRequest.isEmpty()) {
int last = Math.min(event.receivedRequest.lastKey(),
event.sendingRequest.lastKey());
+ int count = 0;
+ long sum = 0;
for (int i = 0; i <= last; i++) {
- bw.write(e.getKey() + "," + i);
+ sb.append(e.getKey() + "," + i);
if (event.sendingRequest.containsKey(i)
&& event.receivedRequest.containsKey(i)) {
long reqtime = event.receivedRequest.get(i)
- event.sendingRequest.get(i);
if (reqtime < 0)
reqtime += 24L * 60L * 60L * 1000L;
- bw.write("," + reqtime);
+ sb.append("," + reqtime);
+ count++;
+ sum += reqtime;
} else {
- bw.write(",NA");
+ sb.append(",NA");
}
- bw.write("\n");
+ sb.append("\n");
}
+ bwTimes.write(sb.toString());
+ bwAvg.write(e.getKey() + "," + (sum / count) + "\n");
}
}
- bw.close();
+ bwTimes.close();
+ bwAvg.close();
} catch (IOException e) {
System.err
.println("IOException while writing output files! Exiting.");
@@ -175,38 +205,53 @@
System.exit(1);
}
try {
- BufferedWriter bw = new BufferedWriter(new FileWriter(
+ BufferedWriter bwTimes = new BufferedWriter(new FileWriter(
outputDirectory.getAbsolutePath() + File.separatorChar
+ "restimes.csv", false));
- bw.write("# testid contains a unique test identifier that matches "
- + "with the\n# identifiers used in the other output "
- + "files, msgid is the message number,\n# and restime is "
- + "the time in millis that it takes to send a response "
- + "from\n# server to client.\n");
- bw.write("testid,msgid,restime\n");
+ bwTimes.write("# testid contains a unique test identifier that "
+ + "matches with the\n# identifiers used in the other "
+ + "output files, msgid is the message number,\n# and "
+ + "restime is the time in millis that it takes to send a "
+ + "response from\n# server to client.\ntestid,msgid,"
+ + "restime\n");
+ BufferedWriter bwAvg = new BufferedWriter(new FileWriter(
+ outputDirectory.getAbsolutePath() + File.separatorChar
+ + "resavg.csv", false));
+ bwAvg.write("# testid contains a unique test identifier that "
+ + "matches with the\n# identifiers used in the other "
+ + "output files, resavg is the average\n# response time "
+ + "of this test.\ntestid,resavg\n");
for (Map.Entry<String, PuppeTorEvent> e : puppeTorEvents.entrySet()) {
PuppeTorEvent event = e.getValue();
+ StringBuilder sb = new StringBuilder();
if (!event.receivedRequest.isEmpty()
&& !event.receivedResponse.isEmpty()) {
int last = Math.min(event.receivedRequest.lastKey(),
event.receivedResponse.lastKey());
+ int count = 0;
+ long sum = 0;
for (int i = 0; i <= last; i++) {
- bw.write(e.getKey() + "," + i);
+ sb.append(e.getKey() + "," + i);
if (event.receivedResponse.containsKey(i)
&& event.receivedRequest.containsKey(i)) {
long restime = event.receivedResponse.get(i)
- event.receivedRequest.get(i);
if (restime < 0)
restime += 24L * 60L * 60L * 1000L;
- bw.write("," + restime);
+ sb.append("," + restime);
+ count++;
+ sum += restime;
} else {
- bw.write(",NA");
+ sb.append(",NA");
}
- bw.write("\n");
+ sb.append("\n");
}
+ bwTimes.write(sb.toString());
+ bwAvg.write(e.getKey() + "," + (sum / count) + "\n");
}
}
- bw.close();
+ bwTimes.close();
+ bwAvg.close();
} catch (IOException e) {
System.err
.println("IOException while writing output files! Exiting.");
@@ -216,11 +261,14 @@
}
static SortedMap<String, Long> initializationTimes = new TreeMap<String, Long>();
+ static SortedMap<String, List<Long>> introEstablishedTimes = new TreeMap<String, List<Long>>();
static SortedMap<String, Long> publicationTimes = new TreeMap<String, Long>();
+ static SortedMap<String, Integer> numIntroPoints = new TreeMap<String, Integer>();
+ static SortedMap<String, Long> sendingDescriptorTimes = new TreeMap<String, Long>();
static Pattern torLogPattern = Pattern
.compile("opening new log file|now have enough directory information|"
- + "Uploaded rendezvous descriptor");
+ + "ESTABLISHED cell|Sending publish request for hidden service|Rendezvous descriptor contains router|Uploaded rendezvous descriptor");
static void parseServerTorLog(File testcaseDirectory) throws IOException {
File torLog = new File(testcaseDirectory.getAbsolutePath()
@@ -234,7 +282,10 @@
String line = null;
long started = 0L;
long enoughDirInfo = 0L;
+ long sendingDesc = 0L;
long firstDescriptorUploaded = 0L;
+ int numIPos = 0;
+ List<Long> introEstablished = new ArrayList<Long>();
while ((line = br.readLine()) != null) {
if (!torLogPattern.matcher(line).find())
continue;
@@ -252,6 +303,14 @@
} else if (enoughDirInfo == 0L
&& line.contains("now have enough directory information")) {
enoughDirInfo = t;
+ } else if (line.contains("ESTABLISHED cell")) {
+ introEstablished.add(t);
+ } else if (sendingDesc == 0L
+ && line
+ .contains("Sending publish request for hidden service")) {
+ sendingDesc = t;
+ } else if (line.contains("Rendezvous descriptor contains router")) {
+ numIPos++;
} else if (firstDescriptorUploaded == 0L
&& line.contains("Uploaded rendezvous descriptor")) {
firstDescriptorUploaded = t;
@@ -261,13 +320,40 @@
break;
}
}
+ numIntroPoints.put(testcaseDirectory.getName(), numIPos);
if (enoughDirInfo > 0L && started > 0L) {
initializationTimes.put(testcaseDirectory.getName(), enoughDirInfo
- started);
}
- if (firstDescriptorUploaded > 0L && enoughDirInfo > 0L) {
+ if (sendingDesc > 0L && !introEstablished.isEmpty()) {
+ List<Long> newIntroEstablished = new ArrayList<Long>();
+ for (long t : introEstablished) {
+ if (t < sendingDesc) {
+ newIntroEstablished.add(t);
+ }
+ introEstablished = newIntroEstablished;
+ }
+ }
+ if (!introEstablished.isEmpty()) {
+ long temp = enoughDirInfo;
+ List<Long> introEstablishedDifferences = new ArrayList<Long>();
+ for (long t : introEstablished) {
+ introEstablishedDifferences.add(t - temp);
+ temp = t;
+ }
+ introEstablishedTimes.put(testcaseDirectory.getName(),
+ introEstablishedDifferences);
+ if (sendingDesc > 0L) {
+ sendingDescriptorTimes.put(testcaseDirectory.getName(),
+ sendingDesc - temp);
+ }
+ } else if (sendingDesc > 0L) {
+ sendingDescriptorTimes.put(testcaseDirectory.getName(), sendingDesc
+ - enoughDirInfo);
+ }
+ if (firstDescriptorUploaded > 0L && sendingDesc > 0L) {
publicationTimes.put(testcaseDirectory.getName(),
- firstDescriptorUploaded - enoughDirInfo);
+ firstDescriptorUploaded - sendingDesc);
}
}