[tor-commits] [metrics-tasks/master] Add graphing code for #4906.
karsten at torproject.org
karsten at torproject.org
Sun Jan 15 05:10:49 UTC 2012
commit 31f7b2a72901f7484f72e87e8013f15d89f28992
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Sun Jan 15 06:10:23 2012 +0100
Add graphing code for #4906.
---
task-4906/.gitignore | 7 +++++++
task-4906/Eval.java | 44 ++++++++++++++++++++++++++++++++++++++++++++
task-4906/README | 19 +++++++++++++++++++
task-4906/eval.R | 22 ++++++++++++++++++++++
4 files changed, 92 insertions(+), 0 deletions(-)
diff --git a/task-4906/.gitignore b/task-4906/.gitignore
new file mode 100644
index 0000000..515a3f8
--- /dev/null
+++ b/task-4906/.gitignore
@@ -0,0 +1,7 @@
+*.class
+in/
+lib/
+Rplots.pdf
+out.csv
+*.png
+
diff --git a/task-4906/Eval.java b/task-4906/Eval.java
new file mode 100644
index 0000000..1d2d702
--- /dev/null
+++ b/task-4906/Eval.java
@@ -0,0 +1,44 @@
+import java.io.*;
+import java.util.*;
+import org.torproject.descriptor.*;
+
+public class Eval {
+ public static void main(String[] args) throws IOException {
+ SortedMap<String, String> lines = new TreeMap<String, String>();
+ File inputDirectory = new File("in");
+ RelayDescriptorReader reader =
+ DescriptorSourceFactory.createRelayDescriptorReader();
+ reader.addDirectory(inputDirectory);
+ Iterator<DescriptorFile> descriptorFiles = reader.readDescriptors();
+ while (descriptorFiles.hasNext()) {
+ DescriptorFile descriptorFile = descriptorFiles.next();
+ for (Descriptor descriptor : descriptorFile.getDescriptors()) {
+ if (!(descriptor instanceof ExtraInfoDescriptor)) {
+ continue;
+ }
+ ExtraInfoDescriptor extraInfoDescriptor =
+ (ExtraInfoDescriptor) descriptor;
+ BandwidthHistory dirreqWriteHistory =
+ extraInfoDescriptor.getDirreqWriteHistory();
+ if (dirreqWriteHistory != null) {
+ String nickname = extraInfoDescriptor.getNickname();
+ for (Map.Entry<Long, Long> e :
+ dirreqWriteHistory.getBandwidthValues().entrySet()) {
+ long intervalEnd = e.getKey();
+ long writtenDirreqBytes = e.getValue();
+ String key = nickname + ","
+ + String.valueOf(intervalEnd / 1000L);
+ String value = key + "," + String.valueOf(writtenDirreqBytes);
+ lines.put(key, value);
+ }
+ }
+ }
+ }
+ BufferedWriter bw = new BufferedWriter(new FileWriter("out.csv"));
+ for (String line : lines.values()) {
+ bw.write(line + "\n");
+ }
+ bw.close();
+ }
+}
+
diff --git a/task-4906/README b/task-4906/README
new file mode 100644
index 0000000..7b1f97f
--- /dev/null
+++ b/task-4906/README
@@ -0,0 +1,19 @@
+Download and extract extra-info descriptors published by the directory
+authorities. Put them in an in/ subdirectory.
+
+ $ grep -REil "^extra-info gabelmoo|^extra-info moria1|^extra-info tor26|
+ ^extra-info ides|^extra-info dannenberg|^extra-info urras|
+ ^extra-info maatuska|^extra-info dizum" extra-infos-20??-?? |
+ xargs -I{} mv {} in/
+
+Put metrics-lib's descriptor.jar in lib/.
+
+Run the Java program.
+
+ $ javac -cp lib/descriptor.jar Eval.java
+ $ java -cp .:lib/descriptor.jar Eval
+
+Run R.
+
+ $ R --slave -f eval.R
+
diff --git a/task-4906/eval.R b/task-4906/eval.R
new file mode 100644
index 0000000..393fb7e
--- /dev/null
+++ b/task-4906/eval.R
@@ -0,0 +1,22 @@
+library(ggplot2)
+d <- read.csv("out.csv", header = FALSE,
+ col.names = c("dirauth", "intervalend", "writtendirreqbytes"))
+d <- data.frame(dirauth = d$dirauth,
+ date = as.Date(d$intervalend / 86400, origin = "1970-01-01 00:00:00"),
+ writtendirreqbytes = d$writtendirreqbytes, count = 1)
+c <- aggregate(x = list(count = d$count),
+ by = list(dirauth = d$dirauth, date = d$date), FUN = sum)
+d <- aggregate(x = list(writtendirreqbytes = d$writtendirreqbytes),
+ by = list(dirauth = d$dirauth, date = d$date), FUN = sum)
+e <- data.frame(dirauth = d$dirauth, date = d$date,
+ writtendirreqbytespersec = (d$writtendirreqbytes / c$count) / 900)
+ggplot(e, aes(x = date, y = writtendirreqbytespersec / 1024,
+ colour = dirauth)) +
+geom_line() +
+scale_x_date(name = "\nDate") +
+scale_y_continuous(name = "KiB/s\n") +
+scale_colour_hue(name = "Directory authority") +
+opts(title = "Written bytes on CONN_TYPE_DIR connections\n")
+ggsave("dirauth-written-dirreq-bytes.png", width = 8, height = 6,
+ dpi = 100)
+
More information about the tor-commits
mailing list