commit f0b12e1198afb38a8f72f68d855fbee6d0e73367 Author: Karsten Loesing karsten.loesing@gmx.net Date: Mon Nov 3 10:18:31 2014 +0100
Add graphing code for bandwidth by version (13634). --- task-13634/.gitignore | 8 +++++++ task-13634/aggregate.R | 10 +++++++++ task-13634/plot.R | 9 ++++++++ task-13634/src/Main.java | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+)
diff --git a/task-13634/.gitignore b/task-13634/.gitignore new file mode 100644 index 0000000..b23a00a --- /dev/null +++ b/task-13634/.gitignore @@ -0,0 +1,8 @@ +.classpath +.project +/bin +/in +Rplots.pdf +*.csv +*.png + diff --git a/task-13634/aggregate.R b/task-13634/aggregate.R new file mode 100644 index 0000000..0c2cf6b --- /dev/null +++ b/task-13634/aggregate.R @@ -0,0 +1,10 @@ +c <- read.csv("cw-by-ver.csv", header = FALSE) +c <- aggregate(list(cw = c$V3), + by = list(datetime = c$V1, version = c$V2), + FUN = sum) +c <- aggregate(list(cw = c$cw), + by = list(date = as.character(as.Date(c$datetime)), + version = c$version), + FUN = mean) +write.csv(c, "cw-by-ver-date.csv", row.names = FALSE, quote = FALSE) + diff --git a/task-13634/plot.R b/task-13634/plot.R new file mode 100644 index 0000000..efb84f0 --- /dev/null +++ b/task-13634/plot.R @@ -0,0 +1,9 @@ +require(ggplot2) +c <- read.csv("cw-by-ver-date.csv") +ggplot(c, aes(x = as.Date(date), y = cw, colour = version)) + +geom_line() + +scale_x_date("") + +scale_y_continuous("") + +ggtitle("Total consensus weight of running relays by version\n") +ggsave("cw-by-ver.png", width = 8, height = 5, dpi = 100) + diff --git a/task-13634/src/Main.java b/task-13634/src/Main.java new file mode 100644 index 0000000..7c0ddb0 --- /dev/null +++ b/task-13634/src/Main.java @@ -0,0 +1,55 @@ +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Iterator; +import java.util.TimeZone; + +import org.torproject.descriptor.Descriptor; +import org.torproject.descriptor.DescriptorFile; +import org.torproject.descriptor.DescriptorReader; +import org.torproject.descriptor.DescriptorSourceFactory; +import org.torproject.descriptor.NetworkStatusEntry; +import org.torproject.descriptor.RelayNetworkStatusConsensus; + + +public class Main { + public static void main(String[] args) throws Exception { + BufferedWriter bw = new BufferedWriter(new FileWriter( + "cw-by-ver.csv")); + DescriptorReader descriptorReader = + DescriptorSourceFactory.createDescriptorReader(); + descriptorReader.addDirectory(new File("in")); + Iterator<DescriptorFile> descriptorFiles = + descriptorReader.readDescriptors(); + while (descriptorFiles.hasNext()) { + DescriptorFile descriptorFile = descriptorFiles.next(); + for (Descriptor descriptor : descriptorFile.getDescriptors()) { + if (!(descriptor instanceof RelayNetworkStatusConsensus)) { + continue; + } + RelayNetworkStatusConsensus consensus = + (RelayNetworkStatusConsensus) descriptor; + DateFormat dateTimeFormat = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + dateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + String validAfter = dateTimeFormat.format( + consensus.getValidAfterMillis()); + for (NetworkStatusEntry entry : + consensus.getStatusEntries().values()) { + String version = entry.getVersion(); + if (version != null && version.startsWith("Tor ") && + version.length() >= 9) { + version = version.substring(4, 9); /* 0.2.5 of Tor 0.2.5.11 */ + } else { + version = "other"; + } + bw.write(validAfter + "," + version + "," + + entry.getBandwidth() + "\n"); + } + } + } + bw.close(); + } +}
tor-commits@lists.torproject.org