[tor-commits] [metrics-web/master] Add two hidserv-stats graphs.

karsten at torproject.org karsten at torproject.org
Tue Mar 17 22:03:57 UTC 2015


commit 4ea56ba80d54d8a34a994181ecb715c544654162
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Tue Mar 17 10:28:56 2015 +0100

    Add two hidserv-stats graphs.
    
    Implements (part of?) #15273.
---
 website/etc/web.xml                                |    8 +++
 website/rserve/graphs.R                            |   51 +++++++++++++++
 .../org/torproject/metrics/web/IndexServlet.java   |    6 ++
 .../metrics/web/graphs/GraphsSubpagesServlet.java  |    4 ++
 .../metrics/web/graphs/RObjectGenerator.java       |    4 ++
 website/web/WEB-INF/hidserv-data.jsp               |    3 +-
 website/web/WEB-INF/hidserv-dir-onions-seen.jsp    |    3 +-
 website/web/WEB-INF/hidserv-frac-reporting.jsp     |   66 +++++++++++++++++++
 website/web/WEB-INF/hidserv-rend-relayed-cells.jsp |   68 ++++++++++++++++++++
 9 files changed, 211 insertions(+), 2 deletions(-)

diff --git a/website/etc/web.xml b/website/etc/web.xml
index 09c0a8b..1cb3381 100644
--- a/website/etc/web.xml
+++ b/website/etc/web.xml
@@ -66,6 +66,8 @@
     <url-pattern>/connbidirect-data.html</url-pattern>
     <url-pattern>/hidserv-data.html</url-pattern>
     <url-pattern>/hidserv-dir-onions-seen.html</url-pattern>
+    <url-pattern>/hidserv-rend-relayed-cells.html</url-pattern>
+    <url-pattern>/hidserv-frac-reporting.html</url-pattern>
   </servlet-mapping>
 
   <servlet>
@@ -250,6 +252,12 @@
     <url-pattern>/hidserv-dir-onions-seen.png</url-pattern>
     <url-pattern>/hidserv-dir-onions-seen.pdf</url-pattern>
     <url-pattern>/hidserv-dir-onions-seen.svg</url-pattern>
+    <url-pattern>/hidserv-rend-relayed-cells.png</url-pattern>
+    <url-pattern>/hidserv-rend-relayed-cells.pdf</url-pattern>
+    <url-pattern>/hidserv-rend-relayed-cells.svg</url-pattern>
+    <url-pattern>/hidserv-frac-reporting.png</url-pattern>
+    <url-pattern>/hidserv-frac-reporting.pdf</url-pattern>
+    <url-pattern>/hidserv-frac-reporting.svg</url-pattern>
   </servlet-mapping>
 
   <servlet>
diff --git a/website/rserve/graphs.R b/website/rserve/graphs.R
index 7f68854..63946fe 100644
--- a/website/rserve/graphs.R
+++ b/website/rserve/graphs.R
@@ -1010,3 +1010,54 @@ plot_hidserv_dir_onions_seen <- function(start, end, path) {
   ggsave(filename = path, width = 8, height = 5, dpi = 72)
 }
 
+plot_hidserv_rend_relayed_cells <- function(start, end, path) {
+  end <- min(end, as.character(Sys.Date() - 2))
+  h <- read.csv(paste("/srv/metrics.torproject.org/web/shared/stats/",
+                "hidserv.csv", sep = ""), stringsAsFactors = FALSE)
+  h <- h[h$date >= start & h$date <= end &
+         h$type == "rend-relayed-cells", ]
+  h <- rbind(data.frame(date = NA, wiqm = 0),
+             data.frame(date = as.Date(h$date, "%Y-%m-%d"),
+                        wiqm = ifelse(h$frac >= 0.01, h$wiqm, NA)))
+  date_breaks <- date_breaks(as.numeric(max(h$date, na.rm = TRUE)
+                                      - min(h$date, na.rm = TRUE)))
+  ggplot(h, aes(x = date, y = wiqm * 8 * 512 / (86400 * 1e6))) +
+    geom_line(size = 0.75) +
+    scale_x_date(name = paste("\nThe Tor Project - ",
+        "https://metrics.torproject.org/", sep = ""),
+        format = date_breaks$format, major = date_breaks$major,
+        minor = date_breaks$minor) +
+    scale_y_continuous(name = "") +
+    opts(title = "Hidden-service traffic in Mbit/s\n")
+  ggsave(filename = path, width = 8, height = 5, dpi = 72)
+}
+
+plot_hidserv_frac_reporting <- function(start, end, path) {
+  end <- min(end, as.character(Sys.Date() - 2))
+  h <- read.csv(paste("/srv/metrics.torproject.org/web/shared/stats/",
+                "hidserv.csv", sep = ""), stringsAsFactors = FALSE)
+  h <- h[h$date >= start & h$date <= end, ]
+  h <- rbind(data.frame(date = NA, frac = 0,
+                        type = c("rend-relayed-cells",
+                                 "dir-onions-seen")),
+             data.frame(date = as.Date(h$date, "%Y-%m-%d"),
+                        frac = h$frac, type = h$type))
+  date_breaks <- date_breaks(as.numeric(max(h$date, na.rm = TRUE)
+                                      - min(h$date, na.rm = TRUE)))
+  ggplot(h, aes(x = date, y = frac, colour = type)) +
+    geom_line(size = 0.75) +
+    geom_hline(yintercept = 0.01, linetype = 2) +
+    scale_x_date(name = paste("\nThe Tor Project - ",
+        "https://metrics.torproject.org/", sep = ""),
+        format = date_breaks$format, major = date_breaks$major,
+        minor = date_breaks$minor) +
+    scale_y_continuous(name = "", formatter = "percent") +
+    scale_colour_hue(name = "",
+                     breaks = c("rend-relayed-cells", "dir-onions-seen"),
+                     labels = c("Hidden-service traffic",
+                                "Unique .onion addresses")) +
+    opts(title = paste("Fraction of relays reporting hidden-service",
+                       "statistics"), legend.position = "top")
+  ggsave(filename = path, width = 8, height = 5, dpi = 72)
+}
+
diff --git a/website/src/org/torproject/metrics/web/IndexServlet.java b/website/src/org/torproject/metrics/web/IndexServlet.java
index 7b2c91c..4a3e47c 100644
--- a/website/src/org/torproject/metrics/web/IndexServlet.java
+++ b/website/src/org/torproject/metrics/web/IndexServlet.java
@@ -154,6 +154,12 @@ public class IndexServlet extends HttpServlet {
     availableMetrics.add(new Metric("hidserv-dir-onions-seen.html",
         "Unique .onion addresses", new String[] { "Hidden services" },
         "Graph", "Basic"));
+    availableMetrics.add(new Metric("hidserv-rend-relayed-cells.html",
+        "Hidden-service traffic", new String[] { "Hidden services" },
+        "Graph", "Basic"));
+    availableMetrics.add(new Metric("hidserv-frac-reporting.html",
+        "Fraction of relays reporting hidden-service statistics",
+        new String[] { "Hidden services" }, "Graph", "Advanced"));
     availableMetrics.add(new Metric("hidserv-data.html",
         "Hidden-service statistics", new String[] { "Hidden services" },
         "Data", "Advanced"));
diff --git a/website/src/org/torproject/metrics/web/graphs/GraphsSubpagesServlet.java b/website/src/org/torproject/metrics/web/graphs/GraphsSubpagesServlet.java
index 0333f4d..c2033d5 100644
--- a/website/src/org/torproject/metrics/web/graphs/GraphsSubpagesServlet.java
+++ b/website/src/org/torproject/metrics/web/graphs/GraphsSubpagesServlet.java
@@ -94,6 +94,10 @@ public class GraphsSubpagesServlet extends HttpServlet {
         "WEB-INF/hidserv-data.jsp");
     this.availableGraphsSubpages.put("hidserv-dir-onions-seen.html",
         "WEB-INF/hidserv-dir-onions-seen.jsp");
+    this.availableGraphsSubpages.put("hidserv-rend-relayed-cells.html",
+        "WEB-INF/hidserv-rend-relayed-cells.jsp");
+    this.availableGraphsSubpages.put("hidserv-frac-reporting.html",
+        "WEB-INF/hidserv-frac-reporting.jsp");
 
     this.availableGraphsSubpageTables = new HashMap<String, String>();
     this.availableGraphsSubpageTables.put("userstats-relay-table.html",
diff --git a/website/src/org/torproject/metrics/web/graphs/RObjectGenerator.java b/website/src/org/torproject/metrics/web/graphs/RObjectGenerator.java
index b598192..f0fb0f5 100644
--- a/website/src/org/torproject/metrics/web/graphs/RObjectGenerator.java
+++ b/website/src/org/torproject/metrics/web/graphs/RObjectGenerator.java
@@ -88,6 +88,10 @@ public class RObjectGenerator implements ServletContextListener {
     this.availableGraphs.put("advbwdist-relay", "start,end,n,filename");
     this.availableGraphs.put("hidserv-dir-onions-seen",
         "start,end,filename");
+    this.availableGraphs.put("hidserv-rend-relayed-cells",
+        "start,end,filename");
+    this.availableGraphs.put("hidserv-frac-reporting",
+        "start,end,filename");
 
     this.availableGraphFileTypes = new HashSet<String>(Arrays.asList(
         "png,pdf,svg".split(",")));
diff --git a/website/web/WEB-INF/hidserv-data.jsp b/website/web/WEB-INF/hidserv-data.jsp
index ef31f86..f8ccdf2 100644
--- a/website/web/WEB-INF/hidserv-data.jsp
+++ b/website/web/WEB-INF/hidserv-data.jsp
@@ -52,7 +52,8 @@ network fraction.</li>
 <h4>Related metrics</h4>
 <ul>
 <li><a href="hidserv-dir-onions-seen.html">Graph: Unique .onion addresses</a></li>
-<li><a href="relayflags.html">Graph: Relays with Exit, Fast, Guard, Stable, and HSDir flags</a></li>
+<li><a href="hidserv-rend-relayed-cells.html">Graph: Hidden-service traffic</a></li>
+<li><a href="hidserv-frac-reporting.html">Graph: Fraction of relays reporting hidden-service statistics</a></li>
 </ul>
 
     </div>
diff --git a/website/web/WEB-INF/hidserv-dir-onions-seen.jsp b/website/web/WEB-INF/hidserv-dir-onions-seen.jsp
index ebab737..6983538 100644
--- a/website/web/WEB-INF/hidserv-dir-onions-seen.jsp
+++ b/website/web/WEB-INF/hidserv-dir-onions-seen.jsp
@@ -52,7 +52,8 @@ technical report</a>.</p>
 
 <h4>Related metrics</h4>
 <ul>
-<li><a href="relayflags.html">Graph: Relays with Exit, Fast, Guard, Stable, and HSDir flags</a></li>
+<li><a href="hidserv-rend-relayed-cells.html">Graph: Hidden-service traffic</a></li>
+<li><a href="hidserv-frac-reporting.html">Graph: Fraction of relays reporting hidden-service statistics</a></li>
 <li><a href="hidserv-data.html">Data: Hidden-service statistics</a></li>
 </ul>
 
diff --git a/website/web/WEB-INF/hidserv-frac-reporting.jsp b/website/web/WEB-INF/hidserv-frac-reporting.jsp
new file mode 100644
index 0000000..d1cc30d
--- /dev/null
+++ b/website/web/WEB-INF/hidserv-frac-reporting.jsp
@@ -0,0 +1,66 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>Tor Metrics — Fraction of relays reporting hidden-service statistics</title>
+  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+  <link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
+  <link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
+</head>
+<body>
+  <div class="center">
+    <%@ include file="banner.jsp"%>
+    <div class="main-column">
+
+<h2><a href="/">Tor Metrics</a> — Fraction of relays reporting hidden-service statistics</h2>
+<br>
+<p>The following graph shows the fraction of
+<a href="about.html#relay">relays</a> that report statistics on
+<a href="about.html#hidden-service">hidden service</a> usage.
+If at least 1% of relays report a statistic, it gets extrapolated towards
+a network total, where higher fractions are produce more accurate results.
+For more details on the extrapolation algorithm, see <a
+href="https://blog.torproject.org/blog/some-statistics-about-onions">this
+blog post</a> and <a
+href="https://research.torproject.org/techreports/extrapolating-hidserv-stats-2015-01-31.pdf">this
+technical report</a>.</p>
+
+<img src="hidserv-frac-reporting.png${hidserv_frac_reporting_url}"
+     width="576" height="360" alt="Fraction of relays reporting hidden-service statistics graph">
+<form action="hidserv-frac-reporting.html">
+  <div class="formrow">
+    <input type="hidden" name="graph" value="hidserv-frac-reporting">
+    <p>
+    <label>Start date (yyyy-mm-dd):</label>
+      <input type="text" name="start" size="10"
+             value="<c:choose><c:when test="${fn:length(hidserv_frac_reporting_start) == 0}">${default_start_date}</c:when><c:otherwise>${hidserv_frac_reporting_start[0]}</c:otherwise></c:choose>">
+    <label>End date (yyyy-mm-dd):</label>
+      <input type="text" name="end" size="10"
+             value="<c:choose><c:when test="${fn:length(hidserv_frac_reporting_end) == 0}">${default_end_date}</c:when><c:otherwise>${hidserv_frac_reporting_end[0]}</c:otherwise></c:choose>">
+    </p><p>
+    <input class="submit" type="submit" value="Update graph">
+    </p>
+  </div>
+</form>
+<p>Download graph as
+<a href="hidserv-frac-reporting.pdf${hidserv_frac_reporting_url}">PDF</a> or
+<a href="hidserv-frac-reporting.svg${hidserv_frac_reporting_url}">SVG</a>.</p>
+<br>
+
+<h4>Related metrics</h4>
+<ul>
+<li><a href="hidserv-dir-onions-seen.html">Graph: Unique .onion addresses</a></li>
+<li><a href="hidserv-rend-relayed-cells.html">Graph: Hidden-service traffic</a></li>
+<li><a href="hidserv-data.html">Data: Hidden-service statistics</a></li>
+</ul>
+
+    </div>
+  </div>
+  <div class="bottom" id="bottom">
+    <%@ include file="footer.jsp"%>
+  </div>
+</body>
+</html>
+
diff --git a/website/web/WEB-INF/hidserv-rend-relayed-cells.jsp b/website/web/WEB-INF/hidserv-rend-relayed-cells.jsp
new file mode 100644
index 0000000..7c7f89a
--- /dev/null
+++ b/website/web/WEB-INF/hidserv-rend-relayed-cells.jsp
@@ -0,0 +1,68 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <title>Tor Metrics — Hidden-service traffic</title>
+  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+  <link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
+  <link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
+</head>
+<body>
+  <div class="center">
+    <%@ include file="banner.jsp"%>
+    <div class="main-column">
+
+<h2><a href="/">Tor Metrics</a> — Hidden-service traffic</h2>
+<br>
+<p>The following graph shows the amount of hidden-service traffic in the
+network per day.
+This number is extrapolated from aggregated statistics on hidden-service
+traffic reported by single <a href="about.html#relay">relays</a>
+acting as rendezvous points for
+<a href="about.html#hidden-service">hidden services</a>, if at least 1% of
+relays reported these statistics.
+For more details on the extrapolation algorithm, see <a
+href="https://blog.torproject.org/blog/some-statistics-about-onions">this
+blog post</a> and <a
+href="https://research.torproject.org/techreports/extrapolating-hidserv-stats-2015-01-31.pdf">this
+technical report</a>.</p>
+
+<img src="hidserv-rend-relayed-cells.png${hidserv_rend_relayed_cells_url}"
+     width="576" height="360" alt="Hidden-service traffic graph">
+<form action="hidserv-rend-relayed-cells.html">
+  <div class="formrow">
+    <input type="hidden" name="graph" value="hidserv-rend-relayed-cells">
+    <p>
+    <label>Start date (yyyy-mm-dd):</label>
+      <input type="text" name="start" size="10"
+             value="<c:choose><c:when test="${fn:length(hidserv_rend_relayed_cells_start) == 0}">${default_start_date}</c:when><c:otherwise>${hidserv_rend_relayed_cells_start[0]}</c:otherwise></c:choose>">
+    <label>End date (yyyy-mm-dd):</label>
+      <input type="text" name="end" size="10"
+             value="<c:choose><c:when test="${fn:length(hidserv_rend_relayed_cells_end) == 0}">${default_end_date}</c:when><c:otherwise>${hidserv_rend_relayed_cells_end[0]}</c:otherwise></c:choose>">
+    </p><p>
+    <input class="submit" type="submit" value="Update graph">
+    </p>
+  </div>
+</form>
+<p>Download graph as
+<a href="hidserv-rend-relayed-cells.pdf${hidserv_rend_relayed_cells_url}">PDF</a> or
+<a href="hidserv-rend-relayed-cells.svg${hidserv_rend_relayed_cells_url}">SVG</a>.</p>
+<br>
+
+<h4>Related metrics</h4>
+<ul>
+<li><a href="hidserv-dir-onions-seen.html">Graph: Unique .onion addresses</a></li>
+<li><a href="hidserv-frac-reporting.html">Graph: Fraction of relays reporting hidden-service statistics</a></li>
+<li><a href="hidserv-data.html">Data: Hidden-service statistics</a></li>
+</ul>
+
+    </div>
+  </div>
+  <div class="bottom" id="bottom">
+    <%@ include file="footer.jsp"%>
+  </div>
+</body>
+</html>
+



More information about the tor-commits mailing list