[or-cvs] [ernie/master 5/5] Automatically update list of displayed graphs.

karsten at torproject.org karsten at torproject.org
Wed May 19 17:14:36 UTC 2010


Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Wed, 19 May 2010 19:12:57 +0200
Subject: Automatically update list of displayed graphs.
Commit: fa1b671ede1a17a9f32f408ac1735ba6d0f90bab

---
 R/consensus-stats.R                                |    1 -
 etc/web.xml                                        |   32 ++++
 .../ernie/web/BridgeUsersGraphsServlet.java        |   96 +++++++++++
 .../ernie/web/ConsensusGraphsServlet.java          |  161 +++++++++++++++++
 .../ernie/web/NewUsersGraphsServlet.java           |   99 +++++++++++
 .../ernie/web/RecurringUsersGraphsServlet.java     |   99 +++++++++++
 website/bridge-users-graphs.html                   |  177 -------------------
 website/consensus-graphs.html                      |  131 --------------
 website/new-users-graphs.html                      |  180 --------------------
 website/recurring-users-graphs.html                |  179 -------------------
 10 files changed, 487 insertions(+), 668 deletions(-)
 create mode 100644 src/org/torproject/ernie/web/BridgeUsersGraphsServlet.java
 create mode 100644 src/org/torproject/ernie/web/ConsensusGraphsServlet.java
 create mode 100644 src/org/torproject/ernie/web/NewUsersGraphsServlet.java
 create mode 100644 src/org/torproject/ernie/web/RecurringUsersGraphsServlet.java
 delete mode 100644 website/bridge-users-graphs.html
 delete mode 100644 website/consensus-graphs.html
 delete mode 100644 website/new-users-graphs.html
 delete mode 100644 website/recurring-users-graphs.html

diff --git a/R/consensus-stats.R b/R/consensus-stats.R
index 4352361..6dec8ed 100644
--- a/R/consensus-stats.R
+++ b/R/consensus-stats.R
@@ -103,7 +103,6 @@ plot_all <- function(directory, filenamePart, titlePart, rows, breaks,
     breaks, labels)
 }
 
-# TODO these need to be updated manually
 plot_current <- function(directory, filenamePart, titlePart, rows, breaks,
     labels) {
   plot_pastdays(directory, filenamePart, titlePart, c(30, 90, 180), rows,
diff --git a/etc/web.xml b/etc/web.xml
index cf9280d..8798eac 100644
--- a/etc/web.xml
+++ b/etc/web.xml
@@ -82,5 +82,37 @@
     <servlet-name>ErnieGeneratedFile</servlet-name>
     <url-pattern>/data/*</url-pattern>
   </servlet-mapping>
+  <servlet>
+    <servlet-name>BridgeUsersGraphs</servlet-name>
+    <servlet-class>org.torproject.ernie.web.BridgeUsersGraphsServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>BridgeUsersGraphs</servlet-name>
+    <url-pattern>/bridge-users-graphs.html</url-pattern>
+  </servlet-mapping>
+  <servlet>
+    <servlet-name>ConsensusGraphsServlet</servlet-name>
+    <servlet-class>org.torproject.ernie.web.ConsensusGraphsServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>ConsensusGraphsServlet</servlet-name>
+    <url-pattern>/consensus-graphs.html</url-pattern>
+  </servlet-mapping>
+  <servlet>
+    <servlet-name>NewUsersGraphs</servlet-name>
+    <servlet-class>org.torproject.ernie.web.NewUsersGraphsServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>NewUsersGraphs</servlet-name>
+    <url-pattern>/new-users-graphs.html</url-pattern>
+  </servlet-mapping>
+  <servlet>
+    <servlet-name>RecurringUsersGraphs</servlet-name>
+    <servlet-class>org.torproject.ernie.web.RecurringUsersGraphsServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>RecurringUsersGraphs</servlet-name>
+    <url-pattern>/recurring-users-graphs.html</url-pattern>
+  </servlet-mapping>
 </web-app>
 
diff --git a/src/org/torproject/ernie/web/BridgeUsersGraphsServlet.java b/src/org/torproject/ernie/web/BridgeUsersGraphsServlet.java
new file mode 100644
index 0000000..c8c0d45
--- /dev/null
+++ b/src/org/torproject/ernie/web/BridgeUsersGraphsServlet.java
@@ -0,0 +1,96 @@
+package org.torproject.ernie.web;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+import java.io.*;
+import java.util.*;
+
+public class BridgeUsersGraphsServlet extends HttpServlet {
+
+  public void doGet(HttpServletRequest request,
+      HttpServletResponse response) throws IOException,
+      ServletException {
+
+    PrintWriter out = response.getWriter();
+    out.print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
+        + "<html>\n"
+        + "  <head>\n"
+        + "    <title>Tor Metrics Portal: Tor users via bridges</title>\n"
+        + "    <meta http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">\n"
+        + "    <link href=\"http://www.torproject.org/stylesheet-ltr.css\" type=text/css rel=stylesheet>\n"
+        + "    <link href=\"http://www.torproject.org/favicon.ico\" type=image/x-icon rel=\"shortcut icon\">\n"
+        + "  </head>\n"
+        + "  <body>\n"
+        + "    <div class=\"center\">\n"
+        + "      <table class=\"banner\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"\">\n"
+        + "        <tr>\n"
+        + "          <td class=\"banner-left\"><a href=\"https://www.torproject.org/\"><img src=\"http://www.torproject.org/images/top-left.png\" alt=\"Click to go to home page\" width=\"193\" height=\"79\"></a></td>\n"
+        + "          <td class=\"banner-middle\">\n"
+        + "            <a href=\"/\">Home</a>\n"
+        + "            <a class=\"current\">Graphs</a>\n"
+        + "            <a href=\"papers.html\">Papers</a>\n"
+        + "            <a href=\"data.html\">Data</a>\n"
+        + "            <a href=\"tools.html\">Tools</a>\n"
+        + "          </td>\n"
+        + "          <td class=\"banner-right\"></td>\n"
+        + "        </tr>\n"
+        + "      </table>\n"
+        + "      <div class=\"main-column\">\n"
+        + "        <h2>Tor Metrics Portal: Graphs</h2>\n"
+        + "        <br/>\n"
+        + "        <h3>Tor users via bridges</h3>\n"
+        + "        <br/>\n"
+        + "        <p>Users who cannot connect directly to the Tor network instead\n"
+        + "        connect via bridges, which are non-public relays. The following\n"
+        + "        graphs display an estimate of Tor users via bridges based on the\n"
+        + "        unique IP addresses as seen by a few hundred bridges.</p>\n"
+        + "        <ul>\n"
+        + "          <li><a href=\"#bahrain\">Bahrain</a></li>\n"
+        + "          <li><a href=\"#china\">China</a></li>\n"
+        + "          <li><a href=\"#cuba\">Cuba</a></li>\n"
+        + "          <li><a href=\"#ethiopia\">Ethiopia</a></li>\n"
+        + "          <li><a href=\"#iran\">Iran</a></li>\n"
+        + "          <li><a href=\"#burma\">Burma</a></li>\n"
+        + "          <li><a href=\"#saudi\">Saudi</a></li>\n"
+        + "          <li><a href=\"#syria\">Syria</a></li>\n"
+        + "          <li><a href=\"#tunisia\">Tunisia</a></li>\n"
+        + "          <li><a href=\"#turkmenistan\">Turkmenistan</a></li>\n"
+        + "          <li><a href=\"#uzbekistan\">Uzbekistan</a></li>\n"
+        + "          <li><a href=\"#vietnam\">Vietnam</a></li>\n"
+        + "          <li><a href=\"#yemen\">Yemen</a></li>\n"
+        + "        </ul>\n"
+        + "        <ul>\n"
+        + "          <li><a href=\"csv/bridge-users.csv\">CSV</a> file containing all\n"
+        + "             data.</li>\n"
+        + "        </ul>"
+        + "        ");
+    List<String> countries = Arrays.asList((
+        "bahrain,china,cuba,ethiopia,iran,burma,saudi,syria,tunisia,"
+        + "turkmenistan,uzbekistan,vietnam,yemen").split(","));
+    List<String> suffixes = new ArrayList<String>(Arrays.asList(
+        "30d,90d,180d,all".split(",")));
+    Calendar now = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+    suffixes.add(String.format("%tY", now));
+    suffixes.add(String.format("%1$tY-q%2$d", now,
+        1 + now.get(Calendar.MONTH) / 3));
+    suffixes.add(String.format("%1$tY-%1$tm", now));
+    for (String country : countries) {
+      out.print("<p><a id=\"" + country + "\"/>\n");
+      for (String suffix : suffixes) {
+        out.print("        <img src=\"graphs/bridge-users/" + country
+            + "-bridges-" + suffix + ".png\"/>\n");
+      }
+      out.print("        </p>");
+    }
+    out.print("<br/>\n"
+        + "      </div>\n"
+        + "    </div>\n"
+        + "    <div class=\"bottom\" id=\"bottom\">\n"
+        + "      <p>\"Tor\" and the \"Onion Logo\" are <a href=\"https://www.torproject.org/trademark-faq.html.en\">registered trademarks</a> of The Tor Project, Inc.</p>\n"
+        + "    </div>\n"
+        + "  </body>\n"
+        + "</html>\n");
+    out.close();
+  }
+}
+
diff --git a/src/org/torproject/ernie/web/ConsensusGraphsServlet.java b/src/org/torproject/ernie/web/ConsensusGraphsServlet.java
new file mode 100644
index 0000000..28721d5
--- /dev/null
+++ b/src/org/torproject/ernie/web/ConsensusGraphsServlet.java
@@ -0,0 +1,161 @@
+package org.torproject.ernie.web;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+import java.io.*;
+import java.util.*;
+
+public class ConsensusGraphsServlet extends HttpServlet {
+
+  public void doGet(HttpServletRequest request,
+      HttpServletResponse response) throws IOException,
+      ServletException {
+
+    PrintWriter out = response.getWriter();
+    out.print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
+        + "<html>\n"
+        + "  <head>\n"
+        + "    <title>Tor Metrics Portal: Relays in the Tor network</title>\n"
+        + "    <meta http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">\n"
+        + "    <link href=\"http://www.torproject.org/stylesheet-ltr.css\" type=text/css rel=stylesheet>\n"
+        + "    <link href=\"http://www.torproject.org/favicon.ico\" type=image/x-icon rel=\"shortcut icon\">\n"
+        + "  </head>\n"
+        + "  <body>\n"
+        + "    <div class=\"center\">\n"
+        + "      <table class=\"banner\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"\">\n"
+        + "        <tr>\n"
+        + "          <td class=\"banner-left\"><a href=\"https://www.torproject.org/\"><img src=\"http://www.torproject.org/images/top-left.png\" alt=\"Click to go to home page\" width=\"193\" height=\"79\"></a></td>\n"
+        + "          <td class=\"banner-middle\">\n"
+        + "            <a href=\"/\">Home</a>\n"
+        + "            <a class=\"current\">Graphs</a>\n"
+        + "            <a href=\"reports.html\">Reports</a>\n"
+        + "            <a href=\"papers.html\">Papers</a>\n"
+        + "            <a href=\"data.html\">Data</a>\n"
+        + "            <a href=\"tools.html\">Tools</a>\n"
+        + "          </td>\n"
+        + "          <td class=\"banner-right\"></td>\n"
+        + "        </tr>\n"
+        + "      </table>\n"
+        + "      <div class=\"main-column\">\n"
+        + "        <h2>Tor Metrics Portal: Graphs</h2>\n"
+        + "        <br/>\n"
+        + "        <h3>Relays in the Tor network</h3>\n"
+        + "        <br/>\n"
+        + "        <p>The number of relays in the Tor network can be extracted from\n"
+        + "        the hourly published network status consensuses.</p>\n"
+        + "        <ul>\n"
+        + "          <li>Number of relays and bridges:\n"
+        + "            <ul>\n"
+        + "              <li>Past <a href=\"#networksize-30d\">30</a>,\n"
+        + "                  <a href=\"#networksize-90d\">90</a>,\n"
+        + "                  <a href=\"#networksize-180d\">180</a> days</li>\n"
+        + "              <li><a href=\"#networksize-all\">All data</a> up to today</li>\n"
+        + "              <li>Annual graphs of\n");
+    Calendar now = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+    Calendar lastQuarter = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+    lastQuarter.add(Calendar.MONTH, -3);
+    Calendar lastMonth = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+    lastMonth.add(Calendar.MONTH, -1);
+    for (int i = now.get(Calendar.YEAR); i > 2006; i--) {
+      out.print("                  <a href=\"#networksize-" + i + "\">"
+          + i + "</a>,\n");
+    }
+    out.print("                  <a href=\"#networksize-2006\">2006</a></li>\n");
+    out.print("              <li>Quarterly graphs of\n");
+    out.printf("                  <a href=\"#networksize-%1$tY-q%2$d\">"
+        + "Q%2$d %1$tY</a>,%n", now, 1 + now.get(Calendar.MONTH) / 3);
+    out.printf("                  <a href=\"#networksize-%1$tY-q%2$d\">"
+        + "Q%2$d %1$tY</a></li>%n", lastQuarter, 1 + lastQuarter.get(Calendar.MONTH) / 3);
+    out.print("              <li>Monthly graphs of\n");
+    out.printf("                  <a href=\"#networksize-%1$tY-%1$tm\">"
+        + "%1$tb %1$tY</a>,%n", now);
+    out.printf("                  <a href=\"#networksize-%1$tY-%1$tm\">"
+        + "%1$tb %1$tY</a></li>%n", lastMonth);
+    out.print("              <li><a href=\"graphs/networksize/\">More graphs</a> of past\n"
+        + "                  quarters and months</li>\n"
+        + "              <li><a href=\"csv/networksize.csv\">CSV</a> file\n"
+        + "                  containing raw data</li>\n"
+        + "            </ul>\n"
+        + "          </li>\n"
+        + "          <li>Number of exit relays:\n"
+        + "            <ul>\n"
+        + "              <li>Past <a href=\"#exit-72h\">72 hours</a> up to\n"
+        + "                  now</li>\n"
+        + "              <li>Past <a href=\"#exit-30d\">30</a>,\n"
+        + "                  <a href=\"#exit-90d\">90</a>,\n"
+        + "                  <a href=\"#exit-180d\">180</a> days</li>\n"
+        + "              <li><a href=\"#exit-all\">All data</a> up to today</li>\n"
+        + "              <li>Annual graphs of\n");
+    for (int i = now.get(Calendar.YEAR); i > 2006; i--) {
+      out.print("                  <a href=\"#exit-" + i + "\">"
+          + i + "</a>,\n");
+    }
+    out.print("                  <a href=\"#exit-2006\">2006</a></li>\n");
+    out.print("              <li>Quarterly graphs of\n");
+    out.printf("                  <a href=\"#exit-%1$tY-q%2$d\">"
+        + "Q%2$d %1$tY</a>,%n", now, 1 + now.get(Calendar.MONTH) / 3);
+    out.printf("                  <a href=\"#exit-%1$tY-q%2$d\">"
+        + "Q%2$d %1$tY</a></li>%n", lastQuarter, 1 + lastQuarter.get(Calendar.MONTH) / 3);
+    out.print("              <li>Monthly graphs of\n");
+    out.printf("                  <a href=\"#exit-%1$tY-%1$tm\">"
+        + "%1$tb %1$tY</a>,%n", now);
+    out.printf("                  <a href=\"#exit-%1$tY-%1$tm\">"
+        + "%1$tb %1$tY</a></li>%n", lastMonth);
+    out.print("              <li><a href=\"graphs/exit/\">More graphs</a> of past\n"
+        + "                  quarters and months</li>\n"
+        + "              <li><a href=\"csv/exit.csv\">CSV</a> file\n"
+        + "                  containing raw data</li>\n"
+        + "            </ul>\n"
+        + "          </li>\n"
+        + "        </ul>\n"
+        + "        <p><a id=\"networksize-30d\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-30d.png\"/>\n"
+        + "        </p><p><a id=\"networksize-90d\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-90d.png\"/>\n"
+        + "        </p><p><a id=\"networksize-180d\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-180d.png\"/>\n"
+        + "        </p><p><a id=\"networksize-all\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-all.png\"/>\n");
+    for (int i = now.get(Calendar.YEAR); i > 2006; i--) {
+      out.print("        </p><p><a id=\"networksize-" + i + "\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-" + i + ".png\"/>\n");
+    }
+    out.print("        </p><p><a id=\"networksize-2006\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-2006.png\"/>\n");
+    out.printf("        </p><p><a id=\"networksize-%1$tY-q%2$d\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-%1$tY-q%2$d.png\"/>\n",
+        now, 1 + now.get(Calendar.MONTH) / 3);
+    out.printf("        </p><p><a id=\"networksize-%1$tY-q%2$d\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-%1$tY-q%2$d.png\"/>\n",
+        lastQuarter, 1 + lastQuarter.get(Calendar.MONTH) / 3);
+    out.printf("        </p><p><a id=\"networksize-%1$tY-%1$tm\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-%1$tY-%1$tm.png\"/>\n", now);
+    out.printf("        </p><p><a id=\"networksize-%1$tY-%1$tm\"/>\n"
+        + "          <img src=\"graphs/networksize/networksize-%1$tY-%1$tm.png\"/>\n", lastMonth);
+    out.print("        </p><p><a id=\"exit-72h\"/><img src=\"graphs/exit/exit-72h.png\"/>\n"
+        + "        </p><p><a id=\"exit-30d\"/><img src=\"graphs/exit/exit-30d.png\"/>\n"
+        + "        </p><p><a id=\"exit-90d\"/><img src=\"graphs/exit/exit-90d.png\"/>\n"
+        + "        </p><p><a id=\"exit-180d\"/><img src=\"graphs/exit/exit-180d.png\"/>\n"
+        + "        </p><p><a id=\"exit-all\"/><img src=\"graphs/exit/exit-all.png\"/>\n");
+    for (int i = now.get(Calendar.YEAR); i > 2006; i--) {
+      out.print("        </p><p><a id=\"exit-" + i + "\"/><img src=\"graphs/exit/exit-" + i + ".png\"/>\n");
+    }
+    out.print("        </p><p><a id=\"exit-2006\"/><img src=\"graphs/exit/exit-2006.png\"/>\n");
+    out.printf("        </p><p><a id=\"exit-%1$tY-q%2$d\"/><img src=\"graphs/exit/exit-%1$tY-q%2$d.png\"/>\n",
+        now, 1 + now.get(Calendar.MONTH) / 3);
+    out.printf("        </p><p><a id=\"exit-%1$tY-q%2$d\"/><img src=\"graphs/exit/exit-%1$tY-q%2$d.png\"/>\n",
+        lastQuarter, 1 + lastQuarter.get(Calendar.MONTH) / 3);
+    out.printf("        </p><p><a id=\"exit-%1$tY-%1$tm\"/><img src=\"graphs/exit/exit-%1$tY-%1$tm.png\"/>\n", now);
+    out.printf("        </p><p><a id=\"exit-%1$tY-%1$tm\"/><img src=\"graphs/exit/exit-%1$tY-%1$tm.png\"/>\n", lastMonth);
+    out.print("        </p><br/>\n"
+        + "      </div>\n"
+        + "    </div>\n"
+        + "    <div class=\"bottom\" id=\"bottom\">\n"
+        + "      <p>\"Tor\" and the \"Onion Logo\" are <a href=\"https://www.torproject.org/trademark-faq.html.en\">registered trademarks</a> of The Tor Project, Inc.</p>\n"
+        + "    </div>\n"
+        + "  </body>\n"
+        + "</html>\n");
+    out.close();
+  }
+}
+
diff --git a/src/org/torproject/ernie/web/NewUsersGraphsServlet.java b/src/org/torproject/ernie/web/NewUsersGraphsServlet.java
new file mode 100644
index 0000000..293a3bf
--- /dev/null
+++ b/src/org/torproject/ernie/web/NewUsersGraphsServlet.java
@@ -0,0 +1,99 @@
+package org.torproject.ernie.web;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+import java.io.*;
+import java.util.*;
+
+public class NewUsersGraphsServlet extends HttpServlet {
+
+  public void doGet(HttpServletRequest request,
+      HttpServletResponse response) throws IOException,
+      ServletException {
+
+    PrintWriter out = response.getWriter();
+    out.print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
+        + "<html>\n"
+        + "  <head>\n"
+        + "    <title>Tor Metrics Portal: New or returning, directly connecting Tor users</title>\n"
+        + "    <meta http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">\n"
+        + "    <link href=\"http://www.torproject.org/stylesheet-ltr.css\" type=text/css rel=stylesheet>\n"
+        + "    <link href=\"http://www.torproject.org/favicon.ico\" type=image/x-icon rel=\"shortcut icon\">\n"
+        + "  </head>\n"
+        + "  <body>\n"
+        + "    <div class=\"center\">\n"
+        + "      <table class=\"banner\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"\">\n"
+        + "        <tr>\n"
+        + "          <td class=\"banner-left\"><a href=\"https://www.torproject.org/\"><img src=\"http://www.torproject.org/images/top-left.png\" alt=\"Click to go to home page\" width=\"193\" height=\"79\"></a></td>\n"
+        + "          <td class=\"banner-middle\">\n"
+        + "            <a href=\"/\">Home</a>\n"
+        + "            <a class=\"current\">Graphs</a>\n"
+        + "            <a href=\"papers.html\">Papers</a>\n"
+        + "            <a href=\"data.html\">Data</a>\n"
+        + "            <a href=\"tools.html\">Tools</a>\n"
+        + "          </td>\n"
+        + "          <td class=\"banner-right\"></td>\n"
+        + "        </tr>\n"
+        + "      </table>\n"
+        + "      <div class=\"main-column\">\n"
+        + "        <h2>Tor Metrics Portal: Graphs</h2>\n"
+        + "        <br/>\n"
+        + "        <h3>New or returning, directly connecting Tor users</h3>\n"
+        + "        <br/>\n"
+        + "        <p>Users connecting to the Tor network for the first time request\n"
+        + "        a list of running relays from one of currently seven directory\n"
+        + "        authorities. Likewise, returning users whose network information is\n"
+        + "        out of date connect to one of the directory authorities to\n"
+        + "        download a fresh list of relays. The following graphs display an\n"
+        + "        estimate of new or returning Tor users based on the requests as\n"
+        + "        seen by gabelmoo, one of the directory authorities.</p>\n"
+        + "        <ul>\n"
+        + "          <li><a href=\"#bahrain\">Bahrain</a></li>\n"
+        + "          <li><a href=\"#china\">China</a></li>\n"
+        + "          <li><a href=\"#cuba\">Cuba</a></li>\n"
+        + "          <li><a href=\"#ethiopia\">Ethiopia</a></li>\n"
+        + "          <li><a href=\"#iran\">Iran</a></li>\n"
+        + "          <li><a href=\"#burma\">Burma</a></li>\n"
+        + "          <li><a href=\"#saudi\">Saudi</a></li>\n"
+        + "          <li><a href=\"#syria\">Syria</a></li>\n"
+        + "          <li><a href=\"#tunisia\">Tunisia</a></li>\n"
+        + "          <li><a href=\"#turkmenistan\">Turkmenistan</a></li>\n"
+        + "          <li><a href=\"#uzbekistan\">Uzbekistan</a></li>\n"
+        + "          <li><a href=\"#vietnam\">Vietnam</a></li>\n"
+        + "          <li><a href=\"#yemen\">Yemen</a></li>\n"
+        + "        </ul>\n"
+        + "        <ul>\n"
+        + "          <li><a href=\"csv/new-users.csv\">CSV</a> file containing all\n"
+        + "            data.</li>\n"
+        + "        </ul>\n"
+        + "        ");
+    List<String> countries = Arrays.asList((
+        "bahrain,china,cuba,ethiopia,iran,burma,saudi,syria,tunisia,"
+        + "turkmenistan,uzbekistan,vietnam,yemen").split(","));
+    List<String> suffixes = new ArrayList<String>(Arrays.asList(
+        "30d,90d,180d,all".split(",")));
+    Calendar now = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+    suffixes.add(String.format("%tY", now));
+    suffixes.add(String.format("%1$tY-q%2$d", now,
+        1 + now.get(Calendar.MONTH) / 3));
+    suffixes.add(String.format("%1$tY-%1$tm", now));
+    for (String country : countries) {
+      out.print("<p><a id=\"" + country + "\"/>\n");
+      for (String suffix : suffixes) {
+        out.print("        <img src=\"graphs/new-users/" + country
+            + "-new-" + suffix + ".png\"/>\n");
+      }
+      out.print("        </p>");
+    }
+    out.print("<br/>\n"
+        + "      </div>\n"
+        + "    </div>\n"
+        + "    <div class=\"bottom\" id=\"bottom\">\n"
+        + "      <p>\"Tor\" and the \"Onion Logo\" are <a href=\"https://www.torproject.org/trademark-faq.html.en\">registered trademarks</a> of The Tor Project, Inc.</p>\n"
+        + "    </div>\n"
+        + "  </body>\n"
+        + "</html>\n");
+    out.close();
+  }
+}
+
diff --git a/src/org/torproject/ernie/web/RecurringUsersGraphsServlet.java b/src/org/torproject/ernie/web/RecurringUsersGraphsServlet.java
new file mode 100644
index 0000000..afdfb75
--- /dev/null
+++ b/src/org/torproject/ernie/web/RecurringUsersGraphsServlet.java
@@ -0,0 +1,99 @@
+package org.torproject.ernie.web;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+import java.io.*;
+import java.util.*;
+
+public class RecurringUsersGraphsServlet extends HttpServlet {
+
+  public void doGet(HttpServletRequest request,
+      HttpServletResponse response) throws IOException,
+      ServletException {
+
+    PrintWriter out = response.getWriter();
+    out.print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
+        + "<html>\n"
+        + "  <head>\n"
+        + "    <title>Tor Metrics Portal: Recurring, directly connecting Tor users</title>\n"
+        + "    <meta http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">\n"
+        + "    <link href=\"http://www.torproject.org/stylesheet-ltr.css\" type=text/css rel=stylesheet>\n"
+        + "    <link href=\"http://www.torproject.org/favicon.ico\" type=image/x-icon rel=\"shortcut icon\">\n"
+        + "  </head>\n"
+        + "  <body>\n"
+        + "    <div class=\"center\">\n"
+        + "      <table class=\"banner\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"\">\n"
+        + "        <tr>\n"
+        + "          <td class=\"banner-left\"><a href=\"https://www.torproject.org/\"><img src=\"http://www.torproject.org/images/top-left.png\" alt=\"Click to go to home page\" width=\"193\" height=\"79\"></a></td>\n"
+        + "          <td class=\"banner-middle\">\n"
+        + "            <a href=\"/\">Home</a>\n"
+        + "            <a class=\"current\">Graphs</a>\n"
+        + "            <a href=\"reports.html\">Reports</a>\n"
+        + "            <a href=\"papers.html\">Papers</a>\n"
+        + "            <a href=\"data.html\">Data</a>\n"
+        + "            <a href=\"tools.html\">Tools</a>\n"
+        + "          </td>\n"
+        + "          <td class=\"banner-right\"></td>\n"
+        + "        </tr>\n"
+        + "      </table>\n"
+        + "      <div class=\"main-column\">\n"
+        + "        <h2>Tor Metrics Portal: Graphs</h2>\n"
+        + "        <br/>\n"
+        + "        <h3>Recurring, directly connecting Tor users</h3>\n"
+        + "        <br/>\n"
+        + "        <p>After being connected to the Tor network, users need to refresh\n"
+        + "        their list of running relays on a regular basis. They send their\n"
+        + "        requests to one out of a few hundred directory mirrors to save\n"
+        + "        bandwidth of the directory authorities. The following graphs show\n"
+        + "        an estimate of recurring Tor users based on the requests as seen\n"
+        + "        by trusted, a particularly fast directory mirror.</p>\n"
+        + "        <ul>\n"
+        + "          <li><a href=\"#bahrain\">Bahrain</a></li>\n"
+        + "          <li><a href=\"#china\">China</a></li>\n"
+        + "          <li><a href=\"#cuba\">Cuba</a></li>\n"
+        + "          <li><a href=\"#ethiopia\">Ethiopia</a></li>\n"
+        + "          <li><a href=\"#iran\">Iran</a></li>\n"
+        + "          <li><a href=\"#burma\">Burma</a></li>\n"
+        + "          <li><a href=\"#saudi\">Saudi</a></li>\n"
+        + "          <li><a href=\"#syria\">Syria</a></li>\n"
+        + "          <li><a href=\"#tunisia\">Tunisia</a></li>\n"
+        + "          <li><a href=\"#turkmenistan\">Turkmenistan</a></li>\n"
+        + "          <li><a href=\"#uzbekistan\">Uzbekistan</a></li>\n"
+        + "          <li><a href=\"#vietnam\">Vietnam</a></li>\n"
+        + "          <li><a href=\"#yemen\">Yemen</a></li>\n"
+        + "        </ul>\n"
+        + "        <ul>\n"
+        + "          <li><a href=\"csv/recurring-users.csv\">CSV</a> file containing\n"
+        + "             all data.</li>\n"
+        + "        </ul>\n"
+        + "        ");
+    List<String> countries = Arrays.asList((
+        "bahrain,china,cuba,ethiopia,iran,burma,saudi,syria,tunisia,"
+        + "turkmenistan,uzbekistan,vietnam,yemen").split(","));
+    List<String> suffixes = new ArrayList<String>(Arrays.asList(
+        "30d,90d,180d,all".split(",")));
+    Calendar now = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+    suffixes.add(String.format("%tY", now));
+    suffixes.add(String.format("%1$tY-q%2$d", now,
+        1 + now.get(Calendar.MONTH) / 3));
+    suffixes.add(String.format("%1$tY-%1$tm", now));
+    for (String country : countries) {
+      out.print("<p><a id=\"" + country + "\"/>\n");
+      for (String suffix : suffixes) {
+        out.print("        <img src=\"graphs/direct-users/" + country
+            + "-direct-" + suffix + ".png\"/>\n");
+      }
+      out.print("        </p>");
+    }
+    out.print("<br/>\n"
+        + "      </div>\n"
+        + "    </div>\n"
+        + "    <div class=\"bottom\" id=\"bottom\">\n"
+        + "      <p>\"Tor\" and the \"Onion Logo\" are <a href=\"https://www.torproject.org/trademark-faq.html.en\">registered trademarks</a> of The Tor Project, Inc.</p>\n"
+        + "    </div>\n"
+        + "  </body>\n"
+        + "</html>\n");
+    out.close();
+  }
+}
+
diff --git a/website/bridge-users-graphs.html b/website/bridge-users-graphs.html
deleted file mode 100644
index 48ca24e..0000000
--- a/website/bridge-users-graphs.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <title>Tor Metrics Portal: Tor users via bridges</title>
-    <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-    <link href="http://www.torproject.org/stylesheet-ltr.css" type=text/css rel=stylesheet>
-    <link href="http://www.torproject.org/favicon.ico" type=image/x-icon rel="shortcut icon">
-  </head>
-  <body>
-    <div class="center">
-      <table class="banner" border="0" cellpadding="0" cellspacing="0" summary="">
-        <tr>
-          <td class="banner-left"><a href="https://www.torproject.org/"><img src="http://www.torproject.org/images/top-left.png" alt="Click to go to home page" width="193" height="79"></a></td>
-          <td class="banner-middle">
-            <a href="/">Home</a>
-            <a class="current">Graphs</a>
-            <a href="papers.html">Papers</a>
-            <a href="data.html">Data</a>
-            <a href="tools.html">Tools</a>
-          </td>
-          <td class="banner-right"></td>
-        </tr>
-      </table>
-      <div class="main-column">
-        <h2>Tor Metrics Portal: Graphs</h2>
-        <br/>
-        <h3>Tor users via bridges</h3>
-        <br/>
-        <p>Users who cannot connect directly to the Tor network instead
-        connect via bridges, which are non-public relays. The following
-        graphs display an estimate of Tor users via bridges based on the
-        unique IP addresses as seen by a few hundred bridges.</p>
-        <ul>
-          <li><a href="#bahrain">Bahrain</a></li>
-          <li><a href="#china">China</a></li>
-          <li><a href="#cuba">Cuba</a></li>
-          <li><a href="#ethiopia">Ethiopia</a></li>
-          <li><a href="#iran">Iran</a></li>
-          <li><a href="#burma">Burma</a></li>
-          <li><a href="#saudi">Saudi</a></li>
-          <li><a href="#syria">Syria</a></li>
-          <li><a href="#tunisia">Tunisia</a></li>
-          <li><a href="#turkmenistan">Turkmenistan</a></li>
-          <li><a href="#uzbekistan">Uzbekistan</a></li>
-          <li><a href="#vietnam">Vietnam</a></li>
-          <li><a href="#yemen">Yemen</a></li>
-        </ul>
-        <ul>
-          <li><a href="csv/bridge-users.csv">CSV</a> file containing all
-             data.</li>
-        </ul>
-        <p><a id="bahrain"/>
-        <img src="graphs/bridge-users/bahrain-bridges-30d.png"/>
-        <img src="graphs/bridge-users/bahrain-bridges-90d.png"/>
-        <img src="graphs/bridge-users/bahrain-bridges-180d.png"/>
-        <img src="graphs/bridge-users/bahrain-bridges-all.png"/>
-        <img src="graphs/bridge-users/bahrain-bridges-2010.png"/>
-        <img src="graphs/bridge-users/bahrain-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/bahrain-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/bahrain-bridges-2010-04.png"/>
-        </p><p><a id="china"/>
-        <img src="graphs/bridge-users/china-bridges-30d.png"/>
-        <img src="graphs/bridge-users/china-bridges-90d.png"/>
-        <img src="graphs/bridge-users/china-bridges-180d.png"/>
-        <img src="graphs/bridge-users/china-bridges-all.png"/>
-        <img src="graphs/bridge-users/china-bridges-2010.png"/>
-        <img src="graphs/bridge-users/china-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/china-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/china-bridges-2010-04.png"/>
-        </p><p><a id="cuba"/>
-        <img src="graphs/bridge-users/cuba-bridges-30d.png"/>
-        <img src="graphs/bridge-users/cuba-bridges-90d.png"/>
-        <img src="graphs/bridge-users/cuba-bridges-180d.png"/>
-        <img src="graphs/bridge-users/cuba-bridges-all.png"/>
-        <img src="graphs/bridge-users/cuba-bridges-2010.png"/>
-        <img src="graphs/bridge-users/cuba-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/cuba-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/cuba-bridges-2010-04.png"/>
-        </p><p><a id="ethiopia"/>
-        <img src="graphs/bridge-users/ethiopia-bridges-30d.png"/>
-        <img src="graphs/bridge-users/ethiopia-bridges-90d.png"/>
-        <img src="graphs/bridge-users/ethiopia-bridges-180d.png"/>
-        <img src="graphs/bridge-users/ethiopia-bridges-all.png"/>
-        <img src="graphs/bridge-users/ethiopia-bridges-2010.png"/>
-        <img src="graphs/bridge-users/ethiopia-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/ethiopia-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/ethiopia-bridges-2010-04.png"/>
-        </p><p><a id="iran"/>
-        <img src="graphs/bridge-users/iran-bridges-30d.png"/>
-        <img src="graphs/bridge-users/iran-bridges-90d.png"/>
-        <img src="graphs/bridge-users/iran-bridges-180d.png"/>
-        <img src="graphs/bridge-users/iran-bridges-all.png"/>
-        <img src="graphs/bridge-users/iran-bridges-2010.png"/>
-        <img src="graphs/bridge-users/iran-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/iran-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/iran-bridges-2010-04.png"/>
-        </p><p><a id="burma"/>
-        <img src="graphs/bridge-users/burma-bridges-30d.png"/>
-        <img src="graphs/bridge-users/burma-bridges-90d.png"/>
-        <img src="graphs/bridge-users/burma-bridges-180d.png"/>
-        <img src="graphs/bridge-users/burma-bridges-all.png"/>
-        <img src="graphs/bridge-users/burma-bridges-2010.png"/>
-        <img src="graphs/bridge-users/burma-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/burma-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/burma-bridges-2010-04.png"/>
-        </p><p><a id="saudi"/>
-        <img src="graphs/bridge-users/saudi-bridges-30d.png"/>
-        <img src="graphs/bridge-users/saudi-bridges-90d.png"/>
-        <img src="graphs/bridge-users/saudi-bridges-180d.png"/>
-        <img src="graphs/bridge-users/saudi-bridges-all.png"/>
-        <img src="graphs/bridge-users/saudi-bridges-2010.png"/>
-        <img src="graphs/bridge-users/saudi-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/saudi-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/saudi-bridges-2010-04.png"/>
-        </p><p><a id="syria"/>
-        <img src="graphs/bridge-users/syria-bridges-30d.png"/>
-        <img src="graphs/bridge-users/syria-bridges-90d.png"/>
-        <img src="graphs/bridge-users/syria-bridges-180d.png"/>
-        <img src="graphs/bridge-users/syria-bridges-all.png"/>
-        <img src="graphs/bridge-users/syria-bridges-2010.png"/>
-        <img src="graphs/bridge-users/syria-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/syria-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/syria-bridges-2010-04.png"/>
-        </p><p><a id="tunisia"/>
-        <img src="graphs/bridge-users/tunisia-bridges-30d.png"/>
-        <img src="graphs/bridge-users/tunisia-bridges-90d.png"/>
-        <img src="graphs/bridge-users/tunisia-bridges-180d.png"/>
-        <img src="graphs/bridge-users/tunisia-bridges-all.png"/>
-        <img src="graphs/bridge-users/tunisia-bridges-2010.png"/>
-        <img src="graphs/bridge-users/tunisia-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/tunisia-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/tunisia-bridges-2010-04.png"/>
-        </p><p><a id="turkmenistan"/>
-        <img src="graphs/bridge-users/turkmenistan-bridges-30d.png"/>
-        <img src="graphs/bridge-users/turkmenistan-bridges-90d.png"/>
-        <img src="graphs/bridge-users/turkmenistan-bridges-180d.png"/>
-        <img src="graphs/bridge-users/turkmenistan-bridges-all.png"/>
-        <img src="graphs/bridge-users/turkmenistan-bridges-2010.png"/>
-        <img src="graphs/bridge-users/turkmenistan-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/turkmenistan-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/turkmenistan-bridges-2010-04.png"/>
-        </p><p><a id="uzbekistan"/>
-        <img src="graphs/bridge-users/uzbekistan-bridges-30d.png"/>
-        <img src="graphs/bridge-users/uzbekistan-bridges-90d.png"/>
-        <img src="graphs/bridge-users/uzbekistan-bridges-180d.png"/>
-        <img src="graphs/bridge-users/uzbekistan-bridges-all.png"/>
-        <img src="graphs/bridge-users/uzbekistan-bridges-2010.png"/>
-        <img src="graphs/bridge-users/uzbekistan-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/uzbekistan-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/uzbekistan-bridges-2010-04.png"/>
-        </p><p><a id="vietnam"/>
-        <img src="graphs/bridge-users/vietnam-bridges-30d.png"/>
-        <img src="graphs/bridge-users/vietnam-bridges-90d.png"/>
-        <img src="graphs/bridge-users/vietnam-bridges-180d.png"/>
-        <img src="graphs/bridge-users/vietnam-bridges-all.png"/>
-        <img src="graphs/bridge-users/vietnam-bridges-2010.png"/>
-        <img src="graphs/bridge-users/vietnam-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/vietnam-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/vietnam-bridges-2010-04.png"/>
-        </p><p><a id="yemen"/>
-        <img src="graphs/bridge-users/yemen-bridges-30d.png"/>
-        <img src="graphs/bridge-users/yemen-bridges-90d.png"/>
-        <img src="graphs/bridge-users/yemen-bridges-180d.png"/>
-        <img src="graphs/bridge-users/yemen-bridges-all.png"/>
-        <img src="graphs/bridge-users/yemen-bridges-2010.png"/>
-        <img src="graphs/bridge-users/yemen-bridges-2010-q2.png"/>
-        <img src="graphs/bridge-users/yemen-bridges-2010-03.png"/>
-        <img src="graphs/bridge-users/yemen-bridges-2010-04.png"/>
-        </p><br/>
-      </div>
-    </div>
-    <div class="bottom" id="bottom">
-      <p>"Tor" and the "Onion Logo" are <a href="https://www.torproject.org/trademark-faq.html.en">registered trademarks</a> of The Tor Project, Inc.</p>
-    </div>
-  </body>
-</html>
-
diff --git a/website/consensus-graphs.html b/website/consensus-graphs.html
deleted file mode 100644
index 6cb520d..0000000
--- a/website/consensus-graphs.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <title>Tor Metrics Portal: Relays in the Tor network</title>
-    <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-    <link href="http://www.torproject.org/stylesheet-ltr.css" type=text/css rel=stylesheet>
-    <link href="http://www.torproject.org/favicon.ico" type=image/x-icon rel="shortcut icon">
-  </head>
-  <body>
-    <div class="center">
-      <table class="banner" border="0" cellpadding="0" cellspacing="0" summary="">
-        <tr>
-          <td class="banner-left"><a href="https://www.torproject.org/"><img src="http://www.torproject.org/images/top-left.png" alt="Click to go to home page" width="193" height="79"></a></td>
-          <td class="banner-middle">
-            <a href="/">Home</a>
-            <a class="current">Graphs</a>
-            <a href="papers.html">Papers</a>
-            <a href="data.html">Data</a>
-            <a href="tools.html">Tools</a>
-          </td>
-          <td class="banner-right"></td>
-        </tr>
-      </table>
-      <div class="main-column">
-        <h2>Tor Metrics Portal: Graphs</h2>
-        <br/>
-        <h3>Relays in the Tor network</h3>
-        <br/>
-        <p>The number of relays in the Tor network can be extracted from
-        the hourly published network status consensuses.</p>
-        <ul>
-          <li>Number of relays and bridges:
-            <ul>
-              <li>Past <a href="#networksize-30d">30</a>,
-                  <a href="#networksize-90d">90</a>,
-                  <a href="#networksize-180d">180</a> days</li>
-              <li><a href="#networksize-all">All data</a> up to today</li>
-              <li>Annual graphs of
-                  <a href="#networksize-2010">2010</a>,
-                  <a href="#networksize-2009">2009</a>,
-                  <a href="#networksize-2008">2008</a>,
-                  <a href="#networksize-2007">2007</a>,
-                  <a href="#networksize-2006">2006</a></li>
-              <li>Quarterly graphs of
-                  <a href="#networksize-2010-q2">Q2 2010</a>,
-                  <a href="#networksize-2010-q1">Q1 2010</a></li>
-              <li>Monthly graphs of
-                  <a href="#networksize-2010-04">Apr 2010</a>,
-                  <a href="#networksize-2010-03">Mar 2010</a></li>
-              <li><a href="graphs/networksize/">More graphs</a> of past
-                  quarters and months</li>
-              <li><a href="csv/networksize.csv">CSV</a> file
-                  containing raw data</li>
-            </ul>
-          </li>
-          <li>Number of exit relays:
-            <ul>
-              <li>Past <a href="#exit-72h">72 hours</a> up to
-                  now</li>
-              <li>Past <a href="#exit-30d">30</a>,
-                  <a href="#exit-90d">90</a>,
-                  <a href="#exit-180d">180</a> days</li>
-              <li><a href="#exit-all">All data</a> up to today</li>
-              <li>Annual graphs of
-                  <a href="#exit-2010">2010</a>,
-                  <a href="#exit-2009">2009</a>,
-                  <a href="#exit-2008">2008</a>,
-                  <a href="#exit-2007">2007</a>,
-                  <a href="#exit-2006">2006</a></li>
-              <li>Quarterly graphs of
-                  <a href="#exit-2010-q2">Q2 2010</a>,
-                  <a href="#exit-2010-q1">Q1 2010</a></li>
-              <li>Monthly graphs of
-                  <a href="#exit-2010-04">Apr 2010</a>,
-                  <a href="#exit-2010-03">Mar 2010</a></li>
-              <li><a href="graphs/exit/">More graphs</a> of past
-                  quarters and months</li>
-              <li><a href="csv/exit.csv">CSV</a> file
-                  containing raw data</li>
-            </ul>
-          </li>
-        </ul>
-        <p><a id="networksize-30d"/>
-          <img src="graphs/networksize/networksize-30d.png"/>
-        </p><p><a id="networksize-90d"/>
-          <img src="graphs/networksize/networksize-90d.png"/>
-        </p><p><a id="networksize-180d"/>
-          <img src="graphs/networksize/networksize-180d.png"/>
-        </p><p><a id="networksize-all"/>
-          <img src="graphs/networksize/networksize-all.png"/>
-        </p><p><a id="networksize-2010"/>
-          <img src="graphs/networksize/networksize-2010.png"/>
-        </p><p><a id="networksize-2009"/>
-          <img src="graphs/networksize/networksize-2009.png"/>
-        </p><p><a id="networksize-2008"/>
-          <img src="graphs/networksize/networksize-2008.png"/>
-        </p><p><a id="networksize-2007"/>
-          <img src="graphs/networksize/networksize-2007.png"/>
-        </p><p><a id="networksize-2006"/>
-          <img src="graphs/networksize/networksize-2006.png"/>
-        </p><p><a id="networksize-2010-q2"/>
-          <img src="graphs/networksize/networksize-2010-q2.png"/>
-        </p><p><a id="networksize-2010-q1"/>
-          <img src="graphs/networksize/networksize-2010-q1.png"/>
-        </p><p><a id="networksize-2010-04"/>
-          <img src="graphs/networksize/networksize-2010-04.png"/>
-        </p><p><a id="networksize-2010-03"/>
-          <img src="graphs/networksize/networksize-2010-03.png"/>
-        </p><p><a id="exit-72h"/><img src="graphs/exit/exit-72h.png"/>
-        </p><p><a id="exit-30d"/><img src="graphs/exit/exit-30d.png"/>
-        </p><p><a id="exit-90d"/><img src="graphs/exit/exit-90d.png"/>
-        </p><p><a id="exit-180d"/><img src="graphs/exit/exit-180d.png"/>
-        </p><p><a id="exit-all"/><img src="graphs/exit/exit-all.png"/>
-        </p><p><a id="exit-2010"/><img src="graphs/exit/exit-2010.png"/>
-        </p><p><a id="exit-2009"/><img src="graphs/exit/exit-2009.png"/>
-        </p><p><a id="exit-2008"/><img src="graphs/exit/exit-2008.png"/>
-        </p><p><a id="exit-2007"/><img src="graphs/exit/exit-2007.png"/>
-        </p><p><a id="exit-2006"/><img src="graphs/exit/exit-2006.png"/>
-        </p><p><a id="exit-2010-q2"/><img src="graphs/exit/exit-2010-q2.png"/>
-        </p><p><a id="exit-2010-q1"/><img src="graphs/exit/exit-2010-q1.png"/>
-        </p><p><a id="exit-2010-04"/><img src="graphs/exit/exit-2010-04.png"/>
-        </p><p><a id="exit-2010-03"/><img src="graphs/exit/exit-2010-03.png"/>
-        </p><br/>
-      </div>
-    </div>
-    <div class="bottom" id="bottom">
-      <p>"Tor" and the "Onion Logo" are <a href="https://www.torproject.org/trademark-faq.html.en">registered trademarks</a> of The Tor Project, Inc.</p>
-    </div>
-  </body>
-</html>
-
diff --git a/website/new-users-graphs.html b/website/new-users-graphs.html
deleted file mode 100644
index 64b3bf7..0000000
--- a/website/new-users-graphs.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <title>Tor Metrics Portal: New or returning, directly connecting Tor users</title>
-    <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-    <link href="http://www.torproject.org/stylesheet-ltr.css" type=text/css rel=stylesheet>
-    <link href="http://www.torproject.org/favicon.ico" type=image/x-icon rel="shortcut icon">
-  </head>
-  <body>
-    <div class="center">
-      <table class="banner" border="0" cellpadding="0" cellspacing="0" summary="">
-        <tr>
-          <td class="banner-left"><a href="https://www.torproject.org/"><img src="http://www.torproject.org/images/top-left.png" alt="Click to go to home page" width="193" height="79"></a></td>
-          <td class="banner-middle">
-            <a href="/">Home</a>
-            <a class="current">Graphs</a>
-            <a href="papers.html">Papers</a>
-            <a href="data.html">Data</a>
-            <a href="tools.html">Tools</a>
-          </td>
-          <td class="banner-right"></td>
-        </tr>
-      </table>
-      <div class="main-column">
-        <h2>Tor Metrics Portal: Graphs</h2>
-        <br/>
-        <h3>New or returning, directly connecting Tor users</h3>
-        <br/>
-        <p>Users connecting to the Tor network for the first time request
-        a list of running relays from one of currently seven directory
-        authorities. Likewise, returning users whose network information is
-        out of date connect to one of the directory authorities to
-        download a fresh list of relays. The following graphs display an
-        estimate of new or returning Tor users based on the requests as
-        seen by gabelmoo, one of the directory authorities.</p>
-        <ul>
-          <li><a href="#bahrain">Bahrain</a></li>
-          <li><a href="#china">China</a></li>
-          <li><a href="#cuba">Cuba</a></li>
-          <li><a href="#ethiopia">Ethiopia</a></li>
-          <li><a href="#iran">Iran</a></li>
-          <li><a href="#burma">Burma</a></li>
-          <li><a href="#saudi">Saudi</a></li>
-          <li><a href="#syria">Syria</a></li>
-          <li><a href="#tunisia">Tunisia</a></li>
-          <li><a href="#turkmenistan">Turkmenistan</a></li>
-          <li><a href="#uzbekistan">Uzbekistan</a></li>
-          <li><a href="#vietnam">Vietnam</a></li>
-          <li><a href="#yemen">Yemen</a></li>
-        </ul>
-        <ul>
-          <li><a href="csv/new-users.csv">CSV</a> file containing all
-            data.</li>
-        </ul>
-        <p><a id="bahrain"/>
-        <img src="graphs/new-users/bahrain-new-30d.png"/>
-        <img src="graphs/new-users/bahrain-new-90d.png"/>
-        <img src="graphs/new-users/bahrain-new-180d.png"/>
-        <img src="graphs/new-users/bahrain-new-all.png"/>
-        <img src="graphs/new-users/bahrain-new-2010.png"/>
-        <img src="graphs/new-users/bahrain-new-2010-q2.png"/>
-        <img src="graphs/new-users/bahrain-new-2010-03.png"/>
-        <img src="graphs/new-users/bahrain-new-2010-04.png"/>
-        </p><p><a id="china"/>
-        <img src="graphs/new-users/china-new-30d.png"/>
-        <img src="graphs/new-users/china-new-90d.png"/>
-        <img src="graphs/new-users/china-new-180d.png"/>
-        <img src="graphs/new-users/china-new-all.png"/>
-        <img src="graphs/new-users/china-new-2010.png"/>
-        <img src="graphs/new-users/china-new-2010-q2.png"/>
-        <img src="graphs/new-users/china-new-2010-03.png"/>
-        <img src="graphs/new-users/china-new-2010-04.png"/>
-        </p><p><a id="cuba"/>
-        <img src="graphs/new-users/cuba-new-30d.png"/>
-        <img src="graphs/new-users/cuba-new-90d.png"/>
-        <img src="graphs/new-users/cuba-new-180d.png"/>
-        <img src="graphs/new-users/cuba-new-all.png"/>
-        <img src="graphs/new-users/cuba-new-2010.png"/>
-        <img src="graphs/new-users/cuba-new-2010-q2.png"/>
-        <img src="graphs/new-users/cuba-new-2010-03.png"/>
-        <img src="graphs/new-users/cuba-new-2010-04.png"/>
-        </p><p><a id="ethiopia"/>
-        <img src="graphs/new-users/ethiopia-new-30d.png"/>
-        <img src="graphs/new-users/ethiopia-new-90d.png"/>
-        <img src="graphs/new-users/ethiopia-new-180d.png"/>
-        <img src="graphs/new-users/ethiopia-new-all.png"/>
-        <img src="graphs/new-users/ethiopia-new-2010.png"/>
-        <img src="graphs/new-users/ethiopia-new-2010-q2.png"/>
-        <img src="graphs/new-users/ethiopia-new-2010-03.png"/>
-        <img src="graphs/new-users/ethiopia-new-2010-04.png"/>
-        </p><p><a id="iran"/>
-        <img src="graphs/new-users/iran-new-30d.png"/>
-        <img src="graphs/new-users/iran-new-90d.png"/>
-        <img src="graphs/new-users/iran-new-180d.png"/>
-        <img src="graphs/new-users/iran-new-all.png"/>
-        <img src="graphs/new-users/iran-new-2010.png"/>
-        <img src="graphs/new-users/iran-new-2010-q2.png"/>
-        <img src="graphs/new-users/iran-new-2010-03.png"/>
-        <img src="graphs/new-users/iran-new-2010-04.png"/>
-        </p><p><a id="burma"/>
-        <img src="graphs/new-users/burma-new-30d.png"/>
-        <img src="graphs/new-users/burma-new-90d.png"/>
-        <img src="graphs/new-users/burma-new-180d.png"/>
-        <img src="graphs/new-users/burma-new-all.png"/>
-        <img src="graphs/new-users/burma-new-2010.png"/>
-        <img src="graphs/new-users/burma-new-2010-q2.png"/>
-        <img src="graphs/new-users/burma-new-2010-03.png"/>
-        <img src="graphs/new-users/burma-new-2010-04.png"/>
-        </p><p><a id="saudi"/>
-        <img src="graphs/new-users/saudi-new-30d.png"/>
-        <img src="graphs/new-users/saudi-new-90d.png"/>
-        <img src="graphs/new-users/saudi-new-180d.png"/>
-        <img src="graphs/new-users/saudi-new-all.png"/>
-        <img src="graphs/new-users/saudi-new-2010.png"/>
-        <img src="graphs/new-users/saudi-new-2010-q2.png"/>
-        <img src="graphs/new-users/saudi-new-2010-03.png"/>
-        <img src="graphs/new-users/saudi-new-2010-04.png"/>
-        </p><p><a id="syria"/>
-        <img src="graphs/new-users/syria-new-30d.png"/>
-        <img src="graphs/new-users/syria-new-90d.png"/>
-        <img src="graphs/new-users/syria-new-180d.png"/>
-        <img src="graphs/new-users/syria-new-all.png"/>
-        <img src="graphs/new-users/syria-new-2010.png"/>
-        <img src="graphs/new-users/syria-new-2010-q2.png"/>
-        <img src="graphs/new-users/syria-new-2010-03.png"/>
-        <img src="graphs/new-users/syria-new-2010-04.png"/>
-        </p><p><a id="tunisia"/>
-        <img src="graphs/new-users/tunisia-new-30d.png"/>
-        <img src="graphs/new-users/tunisia-new-90d.png"/>
-        <img src="graphs/new-users/tunisia-new-180d.png"/>
-        <img src="graphs/new-users/tunisia-new-all.png"/>
-        <img src="graphs/new-users/tunisia-new-2010.png"/>
-        <img src="graphs/new-users/tunisia-new-2010-q2.png"/>
-        <img src="graphs/new-users/tunisia-new-2010-03.png"/>
-        <img src="graphs/new-users/tunisia-new-2010-04.png"/>
-        </p><p><a id="turkmenistan"/>
-        <img src="graphs/new-users/turkmenistan-new-30d.png"/>
-        <img src="graphs/new-users/turkmenistan-new-90d.png"/>
-        <img src="graphs/new-users/turkmenistan-new-180d.png"/>
-        <img src="graphs/new-users/turkmenistan-new-all.png"/>
-        <img src="graphs/new-users/turkmenistan-new-2010.png"/>
-        <img src="graphs/new-users/turkmenistan-new-2010-q2.png"/>
-        <img src="graphs/new-users/turkmenistan-new-2010-03.png"/>
-        <img src="graphs/new-users/turkmenistan-new-2010-04.png"/>
-        </p><p><a id="uzbekistan"/>
-        <img src="graphs/new-users/uzbekistan-new-30d.png"/>
-        <img src="graphs/new-users/uzbekistan-new-90d.png"/>
-        <img src="graphs/new-users/uzbekistan-new-180d.png"/>
-        <img src="graphs/new-users/uzbekistan-new-all.png"/>
-        <img src="graphs/new-users/uzbekistan-new-2010.png"/>
-        <img src="graphs/new-users/uzbekistan-new-2010-q2.png"/>
-        <img src="graphs/new-users/uzbekistan-new-2010-03.png"/>
-        <img src="graphs/new-users/uzbekistan-new-2010-04.png"/>
-        </p><p><a id="vietnam"/>
-        <img src="graphs/new-users/vietnam-new-30d.png"/>
-        <img src="graphs/new-users/vietnam-new-90d.png"/>
-        <img src="graphs/new-users/vietnam-new-180d.png"/>
-        <img src="graphs/new-users/vietnam-new-all.png"/>
-        <img src="graphs/new-users/vietnam-new-2010.png"/>
-        <img src="graphs/new-users/vietnam-new-2010-q2.png"/>
-        <img src="graphs/new-users/vietnam-new-2010-03.png"/>
-        <img src="graphs/new-users/vietnam-new-2010-04.png"/>
-        </p><p><a id="yemen"/>
-        <img src="graphs/new-users/yemen-new-30d.png"/>
-        <img src="graphs/new-users/yemen-new-90d.png"/>
-        <img src="graphs/new-users/yemen-new-180d.png"/>
-        <img src="graphs/new-users/yemen-new-all.png"/>
-        <img src="graphs/new-users/yemen-new-2010.png"/>
-        <img src="graphs/new-users/yemen-new-2010-q2.png"/>
-        <img src="graphs/new-users/yemen-new-2010-03.png"/>
-        <img src="graphs/new-users/yemen-new-2010-04.png"/>
-        </p><br/>
-      </div>
-    </div>
-    <div class="bottom" id="bottom">
-      <p>"Tor" and the "Onion Logo" are <a href="https://www.torproject.org/trademark-faq.html.en">registered trademarks</a> of The Tor Project, Inc.</p>
-    </div>
-  </body>
-</html>
-
diff --git a/website/recurring-users-graphs.html b/website/recurring-users-graphs.html
deleted file mode 100644
index e9f309f..0000000
--- a/website/recurring-users-graphs.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-  <head>
-    <title>Tor Metrics Portal: Recurring, directly connecting Tor users</title>
-    <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-    <link href="http://www.torproject.org/stylesheet-ltr.css" type=text/css rel=stylesheet>
-    <link href="http://www.torproject.org/favicon.ico" type=image/x-icon rel="shortcut icon">
-  </head>
-  <body>
-    <div class="center">
-      <table class="banner" border="0" cellpadding="0" cellspacing="0" summary="">
-        <tr>
-          <td class="banner-left"><a href="https://www.torproject.org/"><img src="http://www.torproject.org/images/top-left.png" alt="Click to go to home page" width="193" height="79"></a></td>
-          <td class="banner-middle">
-            <a href="/">Home</a>
-            <a class="current">Graphs</a>
-            <a href="papers.html">Papers</a>
-            <a href="data.html">Data</a>
-            <a href="tools.html">Tools</a>
-          </td>
-          <td class="banner-right"></td>
-        </tr>
-      </table>
-      <div class="main-column">
-        <h2>Tor Metrics Portal: Graphs</h2>
-        <br/>
-        <h3>Recurring, directly connecting Tor users</h3>
-        <br/>
-        <p>After being connected to the Tor network, users need to refresh
-        their list of running relays on a regular basis. They send their
-        requests to one out of a few hundred directory mirrors to save
-        bandwidth of the directory authorities. The following graphs show
-        an estimate of recurring Tor users based on the requests as seen
-        by trusted, a particularly fast directory mirror.</p>
-        <ul>
-          <li><a href="#bahrain">Bahrain</a></li>
-          <li><a href="#china">China</a></li>
-          <li><a href="#cuba">Cuba</a></li>
-          <li><a href="#ethiopia">Ethiopia</a></li>
-          <li><a href="#iran">Iran</a></li>
-          <li><a href="#burma">Burma</a></li>
-          <li><a href="#saudi">Saudi</a></li>
-          <li><a href="#syria">Syria</a></li>
-          <li><a href="#tunisia">Tunisia</a></li>
-          <li><a href="#turkmenistan">Turkmenistan</a></li>
-          <li><a href="#uzbekistan">Uzbekistan</a></li>
-          <li><a href="#vietnam">Vietnam</a></li>
-          <li><a href="#yemen">Yemen</a></li>
-        </ul>
-        <ul>
-          <li><a href="csv/recurring-users.csv">CSV</a> file containing
-             all data.</li>
-        </ul>
-        <p><a id="bahrain"/>
-        <img src="graphs/direct-users/bahrain-direct-30d.png"/>
-        <img src="graphs/direct-users/bahrain-direct-90d.png"/>
-        <img src="graphs/direct-users/bahrain-direct-180d.png"/>
-        <img src="graphs/direct-users/bahrain-direct-all.png"/>
-        <img src="graphs/direct-users/bahrain-direct-2010.png"/>
-        <img src="graphs/direct-users/bahrain-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/bahrain-direct-2010-03.png"/>
-        <img src="graphs/direct-users/bahrain-direct-2010-04.png"/>
-        </p><p><a id="china"/>
-        <img src="graphs/direct-users/china-direct-30d.png"/>
-        <img src="graphs/direct-users/china-direct-90d.png"/>
-        <img src="graphs/direct-users/china-direct-180d.png"/>
-        <img src="graphs/direct-users/china-direct-all.png"/>
-        <img src="graphs/direct-users/china-direct-2010.png"/>
-        <img src="graphs/direct-users/china-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/china-direct-2010-03.png"/>
-        <img src="graphs/direct-users/china-direct-2010-04.png"/>
-        </p><p><a id="cuba"/>
-        <img src="graphs/direct-users/cuba-direct-30d.png"/>
-        <img src="graphs/direct-users/cuba-direct-90d.png"/>
-        <img src="graphs/direct-users/cuba-direct-180d.png"/>
-        <img src="graphs/direct-users/cuba-direct-all.png"/>
-        <img src="graphs/direct-users/cuba-direct-2010.png"/>
-        <img src="graphs/direct-users/cuba-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/cuba-direct-2010-03.png"/>
-        <img src="graphs/direct-users/cuba-direct-2010-04.png"/>
-        </p><p><a id="ethiopia"/>
-        <img src="graphs/direct-users/ethiopia-direct-30d.png"/>
-        <img src="graphs/direct-users/ethiopia-direct-90d.png"/>
-        <img src="graphs/direct-users/ethiopia-direct-180d.png"/>
-        <img src="graphs/direct-users/ethiopia-direct-all.png"/>
-        <img src="graphs/direct-users/ethiopia-direct-2010.png"/>
-        <img src="graphs/direct-users/ethiopia-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/ethiopia-direct-2010-03.png"/>
-        <img src="graphs/direct-users/ethiopia-direct-2010-04.png"/>
-        </p><p><a id="iran"/>
-        <img src="graphs/direct-users/iran-direct-30d.png"/>
-        <img src="graphs/direct-users/iran-direct-90d.png"/>
-        <img src="graphs/direct-users/iran-direct-180d.png"/>
-        <img src="graphs/direct-users/iran-direct-all.png"/>
-        <img src="graphs/direct-users/iran-direct-2010.png"/>
-        <img src="graphs/direct-users/iran-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/iran-direct-2010-03.png"/>
-        <img src="graphs/direct-users/iran-direct-2010-04.png"/>
-        </p><p><a id="burma"/>
-        <img src="graphs/direct-users/burma-direct-30d.png"/>
-        <img src="graphs/direct-users/burma-direct-90d.png"/>
-        <img src="graphs/direct-users/burma-direct-180d.png"/>
-        <img src="graphs/direct-users/burma-direct-all.png"/>
-        <img src="graphs/direct-users/burma-direct-2010.png"/>
-        <img src="graphs/direct-users/burma-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/burma-direct-2010-03.png"/>
-        <img src="graphs/direct-users/burma-direct-2010-04.png"/>
-        </p><p><a id="saudi"/>
-        <img src="graphs/direct-users/saudi-direct-30d.png"/>
-        <img src="graphs/direct-users/saudi-direct-90d.png"/>
-        <img src="graphs/direct-users/saudi-direct-180d.png"/>
-        <img src="graphs/direct-users/saudi-direct-all.png"/>
-        <img src="graphs/direct-users/saudi-direct-2010.png"/>
-        <img src="graphs/direct-users/saudi-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/saudi-direct-2010-03.png"/>
-        <img src="graphs/direct-users/saudi-direct-2010-04.png"/>
-        </p><p><a id="syria"/>
-        <img src="graphs/direct-users/syria-direct-30d.png"/>
-        <img src="graphs/direct-users/syria-direct-90d.png"/>
-        <img src="graphs/direct-users/syria-direct-180d.png"/>
-        <img src="graphs/direct-users/syria-direct-all.png"/>
-        <img src="graphs/direct-users/syria-direct-2010.png"/>
-        <img src="graphs/direct-users/syria-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/syria-direct-2010-03.png"/>
-        <img src="graphs/direct-users/syria-direct-2010-04.png"/>
-        </p><p><a id="tunisia"/>
-        <img src="graphs/direct-users/tunisia-direct-30d.png"/>
-        <img src="graphs/direct-users/tunisia-direct-90d.png"/>
-        <img src="graphs/direct-users/tunisia-direct-180d.png"/>
-        <img src="graphs/direct-users/tunisia-direct-all.png"/>
-        <img src="graphs/direct-users/tunisia-direct-2010.png"/>
-        <img src="graphs/direct-users/tunisia-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/tunisia-direct-2010-03.png"/>
-        <img src="graphs/direct-users/tunisia-direct-2010-04.png"/>
-        </p><p><a id="turkmenistan"/>
-        <img src="graphs/direct-users/turkmenistan-direct-30d.png"/>
-        <img src="graphs/direct-users/turkmenistan-direct-90d.png"/>
-        <img src="graphs/direct-users/turkmenistan-direct-180d.png"/>
-        <img src="graphs/direct-users/turkmenistan-direct-all.png"/>
-        <img src="graphs/direct-users/turkmenistan-direct-2010.png"/>
-        <img src="graphs/direct-users/turkmenistan-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/turkmenistan-direct-2010-03.png"/>
-        <img src="graphs/direct-users/turkmenistan-direct-2010-04.png"/>
-        </p><p><a id="uzbekistan"/>
-        <img src="graphs/direct-users/uzbekistan-direct-30d.png"/>
-        <img src="graphs/direct-users/uzbekistan-direct-90d.png"/>
-        <img src="graphs/direct-users/uzbekistan-direct-180d.png"/>
-        <img src="graphs/direct-users/uzbekistan-direct-all.png"/>
-        <img src="graphs/direct-users/uzbekistan-direct-2010.png"/>
-        <img src="graphs/direct-users/uzbekistan-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/uzbekistan-direct-2010-03.png"/>
-        <img src="graphs/direct-users/uzbekistan-direct-2010-04.png"/>
-        </p><p><a id="vietnam"/>
-        <img src="graphs/direct-users/vietnam-direct-30d.png"/>
-        <img src="graphs/direct-users/vietnam-direct-90d.png"/>
-        <img src="graphs/direct-users/vietnam-direct-180d.png"/>
-        <img src="graphs/direct-users/vietnam-direct-all.png"/>
-        <img src="graphs/direct-users/vietnam-direct-2010.png"/>
-        <img src="graphs/direct-users/vietnam-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/vietnam-direct-2010-03.png"/>
-        <img src="graphs/direct-users/vietnam-direct-2010-04.png"/>
-        </p><p><a id="yemen"/>
-        <img src="graphs/direct-users/yemen-direct-30d.png"/>
-        <img src="graphs/direct-users/yemen-direct-90d.png"/>
-        <img src="graphs/direct-users/yemen-direct-180d.png"/>
-        <img src="graphs/direct-users/yemen-direct-all.png"/>
-        <img src="graphs/direct-users/yemen-direct-2010.png"/>
-        <img src="graphs/direct-users/yemen-direct-2010-q2.png"/>
-        <img src="graphs/direct-users/yemen-direct-2010-03.png"/>
-        <img src="graphs/direct-users/yemen-direct-2010-04.png"/>
-        </p><br/>
-      </div>
-    </div>
-    <div class="bottom" id="bottom">
-      <p>"Tor" and the "Onion Logo" are <a href="https://www.torproject.org/trademark-faq.html.en">registered trademarks</a> of The Tor Project, Inc.</p>
-    </div>
-  </body>
-</html>
-
-- 
1.6.5



More information about the tor-commits mailing list