[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