[tor-commits] [metrics-web/master] Put #6498 graphs on a new page on the metrics website.

karsten at torproject.org karsten at torproject.org
Fri Aug 3 13:37:20 UTC 2012


commit f0c1411185567bc8bbae9db7fefc75930df6979a
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Fri Aug 3 15:28:04 2012 +0200

    Put #6498 graphs on a new page on the metrics website.
    
    Requires running metrics-tasks.git/task-6498 locally.
---
 etc/web.xml                                        |   12 ++++
 rserve/graphs.R                                    |   59 ++++++++++++++++++++
 .../ernie/web/GraphsSubpagesServlet.java           |    2 +
 src/org/torproject/ernie/web/RObjectGenerator.java |    3 +
 web/WEB-INF/banner.jsp                             |    4 +
 5 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/etc/web.xml b/etc/web.xml
index cc9c3d5..1425d2b 100644
--- a/etc/web.xml
+++ b/etc/web.xml
@@ -40,6 +40,10 @@
   </servlet-mapping>
   <servlet-mapping>
     <servlet-name>GraphsSubpages</servlet-name>
+    <url-pattern>/fast-exits.html</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>GraphsSubpages</servlet-name>
     <url-pattern>/users.html</url-pattern>
   </servlet-mapping>
   <servlet-mapping>
@@ -217,6 +221,14 @@
     <servlet-name>GraphImage</servlet-name>
     <url-pattern>/connbidirect.png</url-pattern>
   </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>GraphImage</servlet-name>
+    <url-pattern>/fast-exits.png</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>GraphImage</servlet-name>
+    <url-pattern>/almost-fast-exits.png</url-pattern>
+  </servlet-mapping>
 
   <servlet>
     <servlet-name>Csv</servlet-name>
diff --git a/rserve/graphs.R b/rserve/graphs.R
index fac88a7..a441d86 100644
--- a/rserve/graphs.R
+++ b/rserve/graphs.R
@@ -957,3 +957,62 @@ plot_connbidirect <- function(start, end, path, dpi) {
   ggsave(filename = path, width = 8, height = 5, dpi = as.numeric(dpi))
 }
 
+plot_fast_exits <- function(start, end, path, dpi) {
+  r <- read.csv(paste("/srv/metrics.torproject.org/task-6498-graphs/",
+    "task-6498/task-6498-results.csv", sep = ""),
+    stringsAsFactors = FALSE)
+  r <- r[r$valid_after >= paste(start, "00:00:00") &
+         r$valid_after <= paste(end, "23:59:59") &
+         r$valid_after < paste(Sys.Date() - 1, "23:59:59"), ]
+  r <- r[r$min_rate == 11875 & r$ports == "80-443-554-1755" &
+    r$min_advbw == 5000, ]
+  r <- aggregate(list(relays = r$relays, P_exit = 100 * r$exit_prob),
+    by = list(date = as.Date(cut.Date(as.Date(r$valid_after), "day"))),
+    FUN = median)
+  r <- melt(r, id.vars = c("date"))
+  r <- data.frame(r, type = ifelse(r$variable == "P_exit",
+    "Total exit probability (in %)", "Number of relays"))
+  ggplot(r, aes(x = date, y = value)) +
+  geom_line(colour = "purple", size = 0.75) +
+  facet_grid(type ~ ., scales = "free_y") +
+  scale_x_date(name = "") +
+  scale_y_continuous(name = "") +
+  scale_colour_manual(values = c("purple", "orange")) +
+  opts(title = paste("Fast exits (95+ Mbit/s configured bandwidth",
+    "rate,\n5000+ KB/s advertised bandwidth capacity,\n",
+    "exit to ports 80, 443, 554, and 1755,\n",
+    "at most 2 relays per /24 network)\n", sep = ""))
+  ggsave(filename = path, width = 8, height = 6, dpi = as.numeric(dpi))
+}
+
+plot_almost_fast_exits <- function(start, end, path, dpi) {
+  t <- read.csv(paste("/srv/metrics.torproject.org/task-6498-graphs/",
+    "task-6498/task-6498-results.csv", sep = ""),
+    stringsAsFactors = FALSE)
+  t <- t[t$valid_after >= paste(start, "00:00:00") &
+         t$valid_after <= paste(end, "23:59:59") &
+         t$valid_after < paste(Sys.Date() - 1, "23:59:59"), ]
+  t1 <- t[t$min_rate == 11875 & t$ports == "80-443-554-1755" &
+    t$min_advbw == 5000, ]
+  t2 <- t[t$min_rate == 10000 & t$ports == "80-443" &
+    t$min_advbw == 2000, ]
+  t <- rbind(
+    data.frame(t1, var = "95+ Mbit/s, 5000+ KB/s, 80/443/554/1755"),
+    data.frame(t2, var = "80+ Mbit/s, 2000+ KB/s, 80/443"))
+  t <- aggregate(list(relays = t$relays, P_exit = 100 * t$exit_prob),
+    by = list(date = as.Date(cut.Date(as.Date(t$valid_after), "day")),
+    var = t$var), FUN = median)
+  t <- melt(t, id.vars = c("date", "var"))
+  t <- data.frame(t, type = ifelse(t$variable == "P_exit",
+    "Total exit probability (in %)", "Number of relays"))
+  ggplot(t, aes(x = date, y = value, colour = var)) +
+  geom_line(size = 0.75) +
+  facet_grid(type ~ ., scales = "free_y") +
+  scale_x_date(name = "") +
+  scale_y_continuous(name = "") +
+  scale_colour_manual(name = "", values = c("purple", "orange")) +
+  opts(title = "Relays almost meeting the fast-exit requirements",
+    legend.position = "top")
+  ggsave(filename = path, width = 8, height = 6, dpi = as.numeric(dpi))
+}
+
diff --git a/src/org/torproject/ernie/web/GraphsSubpagesServlet.java b/src/org/torproject/ernie/web/GraphsSubpagesServlet.java
index d557ce5..b7172f2 100644
--- a/src/org/torproject/ernie/web/GraphsSubpagesServlet.java
+++ b/src/org/torproject/ernie/web/GraphsSubpagesServlet.java
@@ -39,6 +39,8 @@ public class GraphsSubpagesServlet extends HttpServlet {
     this.availableGraphsSubpages = new HashMap<String, String>();
     this.availableGraphsSubpages.put("network.html",
         "WEB-INF/network.jsp");
+    this.availableGraphsSubpages.put("fast-exits.html",
+        "WEB-INF/fast-exits.jsp");
     this.availableGraphsSubpages.put("users.html", "WEB-INF/users.jsp");
     this.availableGraphsSubpages.put("packages.html",
         "WEB-INF/packages.jsp");
diff --git a/src/org/torproject/ernie/web/RObjectGenerator.java b/src/org/torproject/ernie/web/RObjectGenerator.java
index aea9389..3a856c6 100644
--- a/src/org/torproject/ernie/web/RObjectGenerator.java
+++ b/src/org/torproject/ernie/web/RObjectGenerator.java
@@ -101,6 +101,9 @@ public class RObjectGenerator implements ServletContextListener {
     this.availableGraphs.put("torperf-failures",
          "start,end,source,filesize,filename,dpi");
     this.availableGraphs.put("connbidirect", "start,end,filename,dpi");
+    this.availableGraphs.put("fast-exits", "start,end,filename,dpi");
+    this.availableGraphs.put("almost-fast-exits",
+        "start,end,filename,dpi");
     GraphParameterChecker.getInstance().setAvailableGraphs(
         availableGraphs);
 
diff --git a/web/WEB-INF/banner.jsp b/web/WEB-INF/banner.jsp
index 38ed77f..21d6bfb 100644
--- a/web/WEB-INF/banner.jsp
+++ b/web/WEB-INF/banner.jsp
@@ -16,6 +16,7 @@
         %>class="current"<%} else {%>href="/status.html"<%}%>>Status</a>
     <%if (currentPage.endsWith("graphs.jsp") ||
          currentPage.endsWith("network.jsp") ||
+         currentPage.endsWith("fast-exits.jsp") ||
          currentPage.endsWith("users.jsp") ||
          currentPage.endsWith("performance.jsp")) {
      %><br>
@@ -23,6 +24,9 @@
         <a <%if (currentPage.endsWith("network.jsp")){
             %>class="current"<%} else {%>href="/network.html"<%}
             %>>Network</a>
+        <a <%if (currentPage.endsWith("fast-exits.jsp")){
+            %>class="current"<%} else {%>href="/fast-exits.html"<%}
+            %>>Fast Exits</a>
         <a <%if (currentPage.endsWith("users.jsp")) {
             %>class="current"<%} else {%>href="/users.html"<%}
             %>>Users</a>



More information about the tor-commits mailing list