[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [metrics-tasks/master] Add code for bw scanner failure graph.
commit c7c45eedad124208fc696c3136ba87e3740914af
Author: Karsten Loesing <karsten.loesing@xxxxxxx>
Date: Thu Mar 17 13:32:41 2011 +0100
Add code for bw scanner failure graph.
---
task-2772/.gitignore | 6 ++
task-2772/Eval.java | 125 ++++++++++++++++++++++++++++++++++++++++
task-2772/README | 30 ++++++++++
task-2772/torperf-bwscanners.R | 32 ++++++++++
4 files changed, 193 insertions(+), 0 deletions(-)
diff --git a/task-2772/.gitignore b/task-2772/.gitignore
new file mode 100644
index 0000000..820c53c
--- /dev/null
+++ b/task-2772/.gitignore
@@ -0,0 +1,6 @@
+consensus-params
+votes-measured
+*.class
+*.csv
+*.pdf
+
diff --git a/task-2772/Eval.java b/task-2772/Eval.java
new file mode 100755
index 0000000..c4344fb
--- /dev/null
+++ b/task-2772/Eval.java
@@ -0,0 +1,125 @@
+import java.io.*;
+import java.text.*;
+import java.util.*;
+public class Eval {
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new FileReader(
+ "consensus-params"));
+ String line = null;
+ SortedMap<String, String> consensusParams =
+ new TreeMap<String, String>();
+ SortedSet<String> params = new TreeSet<String>(Arrays.asList((
+ "CircPriorityHalflifeMsec,CircuitPriorityHalflifeMsec,"
+ + "CircuitPriorityHalflife,bwconnburst,bwconnrate,"
+ + "circwindow,cbtquantile,refuseunknownexits,cbtnummodes").
+ split(",")));
+ while ((line = br.readLine()) != null) {
+ String date = line.substring(23, 33);
+ StringBuilder sb = new StringBuilder();
+ for (String param : params) {
+ if (line.contains(param + "=")) {
+ sb.append("," + line.substring(line.indexOf(param + "=")).
+ split(" ")[0].split("=")[1]);
+ } else {
+ sb.append(",NA");
+ }
+ }
+ consensusParams.put(date, sb.toString());
+ String[] parts = line.split(" ");
+ for (int i = 1; i < parts.length; i++) {
+ if (!params.contains(parts[i].split("=")[0])) {
+ System.out.println("Unknown consensus param '"
+ + parts[i].split("=")[0] + "' in " + line);
+ }
+ }
+ }
+ br.close();
+ br = new BufferedReader(new FileReader("votes-measured"));
+ SortedMap<String, String> votesMeasured =
+ new TreeMap<String, String>();
+ long bwscannerStart = 0L, bwscannerEnd = 0L;
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ SimpleDateFormat dateTimeFormat = new SimpleDateFormat(
+ "yyyy-MM-dd HH:mm:ss");
+ dateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ BufferedWriter bw = new BufferedWriter(new FileWriter(
+ "bwscanner-failures.csv"));
+ bw.write("start,end\n");
+ while ((line = br.readLine()) != null) {
+ String date = line.substring(5, 15);
+ String votes = line.substring(0, 5).trim();
+ votesMeasured.put(date, votes);
+ String dateTime = line.substring(5, 15) + " "
+ + line.substring(16, 18) + ":" + line.substring(19, 21) + ":"
+ + line.substring(22, 24);
+ long dateTimeSeconds = dateTimeFormat.parse(dateTime).getTime();
+ if (Integer.parseInt(votes) >= 3) {
+ if (bwscannerStart == 0L) {
+ bwscannerStart = bwscannerEnd = dateTimeSeconds;
+ } else if (bwscannerEnd + 12L * 60L * 60L * 1000L >=
+ dateTimeSeconds) {
+ bwscannerEnd = dateTimeSeconds;
+ } else {
+ //bw.write(dateFormat.format(bwscannerStart) + ","
+ // + dateFormat.format(bwscannerEnd) + "\n");
+ bw.write(dateFormat.format(bwscannerEnd) + ","
+ + dateFormat.format(dateTimeSeconds
+ + 24L * 60L * 60L * 1000L) + "\n");
+ bwscannerStart = bwscannerEnd = dateTimeSeconds;
+ }
+ }
+ }
+ /*if (bwscannerStart > 0L) {
+ bw.write(dateFormat.format(bwscannerStart) + ","
+ + dateFormat.format(bwscannerEnd) + "\n");
+ }*/
+ bw.close();
+ br.close();
+ br = new BufferedReader(new FileReader("torperf.csv"));
+ br.readLine();
+ bw = new BufferedWriter(new FileWriter("torperf-stats.csv"));
+ bw.write("date,source,md");
+ for (String param : params) {
+ bw.write("," + param);
+ }
+ bw.write(",votesMeasured\n");
+ long lastDateSeconds = 0L;
+ String lastSource = null;
+ while ((line = br.readLine()) != null) {
+ String[] parts = line.split(",");
+ String date = parts[1];
+ long dateSeconds = dateFormat.parse(date).getTime();
+ String source = parts[0];
+ while (source.equals(lastSource) &&
+ lastDateSeconds + 24L * 60L * 60L * 1000L < dateSeconds) {
+ lastDateSeconds += 24L * 60L * 60L * 1000L;
+ bw.write(dateFormat.format(lastDateSeconds) + "," + source
+ + ",NA");
+ for (String param : params) {
+ bw.write(",NA");
+ }
+ bw.write(",NA\n");
+ }
+ lastDateSeconds = dateSeconds;
+ lastSource = source;
+ String md = parts[3];
+ bw.write(date + "," + source + "," + md);
+ if (consensusParams.containsKey(date)) {
+ bw.write(consensusParams.get(date));
+ } else {
+ for (String param : params) {
+ bw.write(",NA");
+ }
+ }
+ if (votesMeasured.containsKey(date)) {
+ bw.write("," + votesMeasured.get(date) + "\n");
+ } else {
+ bw.write(",NA\n");
+ }
+ }
+ bw.close();
+ br.close();
+ }
+}
+
diff --git a/task-2772/README b/task-2772/README
new file mode 100644
index 0000000..2c8b94e
--- /dev/null
+++ b/task-2772/README
@@ -0,0 +1,30 @@
+Graphing torperf results and bandwidth authority failures
+=========================================================
+
+ - Download the consensus and vote tarballs from the metrics website and
+ extract them locally. You'll want the tarballs since October 2009.
+
+ - Run grep to extract the relevant pieces and save Java the bulk of the
+ parsing work.
+
+ $ grep -Rm1 "Measured" votes-20* | cut -c 18-36 | sort | uniq -c
+ > votes-measured
+
+ $ grep -Rm1 "^params " consensuses-20* > consensus-params
+
+ - Download the Torperf statistics from the metrics website here:
+
+ https://metrics.torproject.org/csv/torperf.csv
+
+ - Compile and run Eval.java
+
+ $ javac Eval.java && java Eval
+
+ - You should find two files bwscanner-failures.csv and torperf-stats.csv
+ in this directory.
+
+ - Run the R code to draw the graph of Torperf results and bwscanner
+ outages. The result will be a new file torperf-bwscanners.pdf.
+
+ $ R --slave -f torperf-bwscanners.R
+
diff --git a/task-2772/torperf-bwscanners.R b/task-2772/torperf-bwscanners.R
new file mode 100644
index 0000000..f2dee38
--- /dev/null
+++ b/task-2772/torperf-bwscanners.R
@@ -0,0 +1,32 @@
+options(warn = -1)
+suppressPackageStartupMessages(library("ggplot2"))
+
+a <- read.csv("torperf-stats.csv", stringsAsFactors = FALSE,
+ header = TRUE)
+a <- a[a$source == "all-1mb",]
+ymax <- max(a$md, na.rm = TRUE) / 1e3
+
+b <- read.csv("bwscanner-failures.csv", stringsAsFactors = FALSE,
+ header = TRUE)
+b <- b[b$end >= min(a$date, na.rm = TRUE),]
+b[1,1] <- max(b[1,1], min(a$date, na.rm = TRUE))
+
+ggplot(a, aes(x = as.Date(date), y = md/1e3)) +
+
+geom_line(size = 0.5) +
+
+scale_y_continuous(name = paste("Download time of 1 MB file over Tor",
+ "in seconds\n")) +
+
+scale_x_date(name = "") +
+
+geom_rect(aes(NULL, NULL, xmin = as.Date(start), xmax = as.Date(end),
+ ymin = -Inf, ymax = Inf, fill = TRUE), data = b) +
+
+scale_fill_manual(name = "", breaks = TRUE,
+ labels = "Bandwidth scanners failing", values = alpha("red2", 0.4)) +
+
+opts(legend.position = "bottom")
+
+ggsave(filename = "torperf-bwscanners.pdf", width = 8, height = 6)
+
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits