tor-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
June 2014
- 21 participants
- 1212 discussions

26 Jun '14
commit 0deee127602fd1f8bf3f9cdfd2900d862cc130f0
Author: Mike Perry <mikeperry-git(a)torproject.org>
Date: Thu Jun 26 08:53:04 2014 -0700
Bump versions for 4.0-alpha-1.
---
gitian/versions.alpha | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/gitian/versions.alpha b/gitian/versions.alpha
index 962a1bd..4674a5f 100755
--- a/gitian/versions.alpha
+++ b/gitian/versions.alpha
@@ -1,16 +1,16 @@
-TORBROWSER_VERSION=4.0-alpha1-pre
+TORBROWSER_VERSION=4.0-alpha-1
BUNDLE_LOCALES="ar de es-ES fa fr it ko nl pl pt-PT ru tr vi zh-CN"
BUILD_PT_BUNDLES=1
-VERIFY_TAGS=0
+VERIFY_TAGS=1
FIREFOX_VERSION=24.6.0esr
-TORBROWSER_TAG=tor-browser-${FIREFOX_VERSION}-4.x-1
-TOR_TAG=tor-0.2.4.22
+TORBROWSER_TAG=tor-browser-${FIREFOX_VERSION}-4.x-1-build1
+TOR_TAG=tor-0.2.5.5-alpha
TORLAUNCHER_TAG=0.2.6.0
-TORBUTTON_TAG=1.6.9.0
-HTTPSE_TAG=3.4.5 # XXX: HTTPSE_VER is used instead, pending #11630
+TORBUTTON_TAG=1.6.10.1
+HTTPSE_TAG=3.5.1 # XXX: HTTPSE_VER is used instead, pending #11630
NSIS_TAG=v0.2
ZLIB_TAG=v1.2.8
LIBEVENT_TAG=release-2.0.21-stable
@@ -27,7 +27,7 @@ MEEK_TAG=0.9
GITIAN_TAG=tor-browser-builder-3.x-5
-OPENSSL_VER=1.0.1g
+OPENSSL_VER=1.0.1h
GMP_VER=5.1.3
FIREFOX_LANG_VER=$FIREFOX_VERSION
BINUTILS_VER=2.24
@@ -37,7 +37,7 @@ PYCRYPTO_VER=2.6.1
ARGPARSE_VER=1.2.1
PYYAML_VER=3.11
ZOPEINTERFACE_VER=4.0.5
-TWISTED_VER=13.1.0
+TWISTED_VER=13.2.0
M2CRYPTO_VER=0.21.1
PY2EXE_VER=0.6.9
SETUPTOOLS_VER=1.4
@@ -49,7 +49,7 @@ GO_VER=1.2
## File names for the source packages
OPENSSL_PACKAGE=openssl-${OPENSSL_VER}.tar.gz
GMP_PACKAGE=gmp-${GMP_VER}.tar.bz2
-NOSCRIPT_PACKAGE=noscript_security_suite-2.6.8.22-sm+fx+fn.xpi
+NOSCRIPT_PACKAGE=noscript_security_suite-2.6.8.28-fx+sm+fn.xpi
HTTPSE_PACKAGE=https-everywhere-${HTTPSE_VER}.xpi
TOOLCHAIN4_PACKAGE=x86_64-apple-darwin10.tar.xz
TOOLCHAIN4_OLD_PACKAGE=multiarch-darwin11-cctools127.2-gcc42-5666.3-llvmgcc42-2336.1-Linux-120724.tar.xz
@@ -72,19 +72,19 @@ PARSLEY_PACKAGE=Parsley-${PARSLEY_VER}.tar.gz
GO_PACKAGE=go${GO_VER}.src.tar.gz
# Hashes for packages with weak sigs or no sigs
-OPENSSL_HASH=53cb818c3b90e507a8348f4f5eaedb05d8bfe5358aabb508b7263cc670c3e028
+OPENSSL_HASH=9d1c8a9836aa63e2c6adb684186cbd4371c9e9dcc01d6e3bb447abf2d4d3d093
GMP_HASH=752079520b4690531171d0f4532e40f08600215feefede70b24fabdc6f1ab160
OSXSDK_HASH=6602d8d5ddb371fbc02e2a5967d9bd0cd7358d46f9417753c8234b923f2ea6fc
TOOLCHAIN4_HASH=7b71bfe02820409b994c5c33a7eab81a81c72550f5da85ff7af70da3da244645
TOOLCHAIN4_OLD_HASH=65c1b2d302358a6b95a26c6828a66908a199276193bb0b268f2dcc1a997731e9
-NOSCRIPT_HASH=5ec75d2f6fbf3ff7950a8eea2c7878d887ed3916aa89f99ec76b322b1e140c08
+NOSCRIPT_HASH=aea2ef3a262a70e871df0de937ac8f53cd2c5d1913066200d192bb6e30924275
HTTPSE_HASH=62ac6560bb224a8f5557722153a72fb245b30b345940c537423bfbb7d8144e29
MSVCR100_HASH=1221a09484964a6f38af5e34ee292b9afefccb3dc6e55435fd3aaf7c235d9067
PYCRYPTO_HASH=f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c
ARGPARSE_HASH=ddaf4b0a618335a32b6664d4ae038a1de8fbada3b25033f9021510ed2b3941a4
PYYAML_HASH=c36c938a872e5ff494938b33b14aaa156cb439ec67548fcab3535bb78b0846e8
ZOPEINTERFACE_HASH=1a7c84716bbd9981915b64a81d8a3f076a5934a8c8df4224655469b3564940cc
-TWISTED_HASH=110e957dd8fc4c6eaba8abe4f0477e60b2873e3cf1c260325863fd2ef69341c6
+TWISTED_HASH=095175638c019ac7c0604f4c291724a16ff1acd062e181b01293bf4dcbc62cf3
M2CRYPTO_HASH=25b94498505c2d800ee465db0cc1aff097b1615adc3ac042a1c85ceca264fc0a
PY2EXE_HASH=610a8800de3d973ed5ed4ac505ab42ad058add18a68609ac09e6cf3598ef056c
SETUPTOOLS_HASH=75d288687066ed124311d6ca5f40ffa92a0e81adcd7fff318c6e84082713cf39
1
0

[tor-browser-bundle/master] Revert "Log Tor Browser output to file and disown the process."
by mikeperry@torproject.org 26 Jun '14
by mikeperry@torproject.org 26 Jun '14
26 Jun '14
commit 27f1353baa0e3ce4dafcebe0eae6b48aa2f8704c
Author: Mike Perry <mikeperry-git(a)torproject.org>
Date: Thu Jun 26 08:38:12 2014 -0700
Revert "Log Tor Browser output to file and disown the process."
This reverts commit c2bd8a5f070e771623aebfb66e95e9e954e5522d.
Reverted due to https://trac.torproject.org/projects/tor/ticket/12472
and https://trac.torproject.org/projects/tor/ticket/12468. We need to stop
HTTPS-Everywhere from logging URLs before we do this.
---
RelativeLink/RelativeLink.sh | 45 +++++++++++-------------------------------
1 file changed, 12 insertions(+), 33 deletions(-)
diff --git a/RelativeLink/RelativeLink.sh b/RelativeLink/RelativeLink.sh
index 86a40d9..4e6b7bb 100755
--- a/RelativeLink/RelativeLink.sh
+++ b/RelativeLink/RelativeLink.sh
@@ -284,41 +284,20 @@ setControlPortPasswd ${TOR_CONTROL_PASSWD:='"secret"'}
# XXX: Debug mode for Firefox??
+# not in debug mode, run proceed normally
printf "Launching Tor Browser for Linux in ${HOME}...\n"
cd "${HOME}"
-logfile=${PWD}/tbb-debug.log
-touch $logfile && printf "Logging Tor Browser output to file: %s\n" "${logfile}"
-
-# !!! We pass command-line arguments we got (except --debug) to Firefox.
+# XXX Someday we should pass whatever command-line arguments we got
+# (probably filenames or URLs) to Firefox.
+# !!! Dash above comment! Now we pass command-line arguments we got (except --debug) to Firefox.
# !!! Use at your own risk!
# Adding --class for fixing bug 11102.
-TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./firefox --class "Tor Browser" \
- -profile TorBrowser/Data/Browser/profile.default "${@}" > $logfile 2>&1 </dev/null &
-
-pid="$!"
-
-for second in `seq 1 15` ; do
- sleep 1
- # Doing `kill -0` doesn't send a signal to the process, but it'll yell
- # "No such process" if that process doesn't exist (i.e. it already died):
- if `kill -0 $pid 2>&1 >/dev/null` ; then
- wait "$pid"
- exitcode="$?"
- complain "Tor Browser exited abnormally. Exit code: $exitcode "
- exit "$exitcode"
- else
- continue
- fi
-done
-
-if test -z "${exitcode}" ; then
- if test -z "$(kill -0 $pid 2>&1 >/dev/null)" ; then
- printf "Running Tor Browser process (PID %s) in background...\n" "$pid"
- disown "$pid"
- exitcode="0"
- else
- exitcode="66" # Something odd happened
- fi
+TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./firefox --class "Tor Browser" \
+ -profile TorBrowser/Data/Browser/profile.default "${@}"
+exitcode="$?"
+if [ "$exitcode" -ne 0 ]; then
+ complain "Tor Browser exited abnormally. Exit code: $exitcode"
+ exit "$exitcode"
+else
+ printf '\nTor Browser exited cleanly.\n'
fi
-
-exit "$exitcode"
1
0

26 Jun '14
commit 80b06cdf422238f5eece38a1974d31e6e7be7a17
Author: Arthur Edelstein <arthuredelstein(a)gmail.com>
Date: Mon Jun 2 12:13:31 2014 -0700
remove obsolete files, re Bug 1506 P0
---
src/chrome.manifest | 12 ---
src/components/tor-protocol.js | 103 ----------------------
src/components/torRefSpoofer.js | 125 ---------------------------
src/components/tors-protocol.js | 103 ----------------------
src/components/window-mapper.js | 180 ---------------------------------------
5 files changed, 523 deletions(-)
diff --git a/src/chrome.manifest b/src/chrome.manifest
index 0318f79..af44862 100644
--- a/src/chrome.manifest
+++ b/src/chrome.manifest
@@ -155,18 +155,6 @@ contract @torproject.org/torbutton-torCheckService;1 {5d57312b-5d8c-4169-b4af-e8
component {f36d72c9-9718-4134-b550-e109638331d7} components/torbutton-logger.js
contract @torproject.org/torbutton-logger;1 {f36d72c9-9718-4134-b550-e109638331d7}
-# component {b985e49c-12cb-4f29-9d14-b62603332ec4} components/window-mapper.js
-# contract @torproject.org/content-window-mapper;1 {b985e49c-12cb-4f29-9d14-b62603332ec4}
-
-# component {65be2be0-ceb4-44c2-91a5-9c75c53430bf} components/torRefSpoofer.js
-# contract @torproject.org/torRefSpoofer;1 {65be2be0-ceb4-44c2-91a5-9c75c53430bf}
-
-# component {52183e20-4d4b-11de-8a39-0800200c9a66} components/tor-protocol.js
-# contract @mozilla.org/network/protocol;1?name=tor {52183e20-4d4b-11de-8a39-0800200c9a66}
-
-# component {a5a4bc50-5e8d-11de-8a39-0800200c9a66} components/tors-protocol.js
-# contract @mozilla.org/network/protocol;1?name=tors {a5a4bc50-5e8d-11de-8a39-0800200c9a66}
-
category profile-after-change CookieJarSelector @torproject.org/cookie-jar-selector;1
# category profile-after-change RefSpoofer @torproject.org/torRefSpoofer;1
category profile-after-change TBSessionBlocker @torproject.org/torbutton-ss-blocker;1
diff --git a/src/components/tor-protocol.js b/src/components/tor-protocol.js
deleted file mode 100644
index 4ba5cf4..0000000
--- a/src/components/tor-protocol.js
+++ /dev/null
@@ -1,103 +0,0 @@
-// Bug 1506 P0: This code is toggle-mode code and is unused. Kill it.
-
-// Test protocol related
-const kSCHEME = "tor";
-const kPROTOCOL_NAME = "tor";
-const kPROTOCOL_CONTRACTID = "@mozilla.org/network/protocol;1?name=" + kSCHEME;
-const kPROTOCOL_CID = Components.ID("52183e20-4d4b-11de-8a39-0800200c9a66");
-
-// Mozilla defined
-const kSIMPLEURI_CONTRACTID = "@mozilla.org/network/simple-uri;1";
-const kIOSERVICE_CONTRACTID = "@mozilla.org/network/io-service;1";
-const nsISupports = Components.interfaces.nsISupports;
-const nsIIOService = Components.interfaces.nsIIOService;
-const nsIProtocolHandler = Components.interfaces.nsIProtocolHandler;
-const nsIURI = Components.interfaces.nsIURI;
-
-function Protocol()
-{
-}
-
-Protocol.prototype =
-{
- QueryInterface: function(iid)
- {
- if (!iid.equals(nsIProtocolHandler) &&
- !iid.equals(nsISupports))
- throw Components.results.NS_ERROR_NO_INTERFACE;
- return this;
- },
-
- scheme: kSCHEME,
- defaultPort: -1,
- protocolFlags: nsIProtocolHandler.URI_NORELATIVE |
- nsIProtocolHandler.URI_NOAUTH,
-
- allowPort: function(port, scheme)
- {
- return false;
- },
-
- newURI: function(spec, charset, baseURI)
- {
- const nsIStandardURL = Components.interfaces.nsIStandardURL;
- var uri = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(nsIStandardURL);
- uri.init(nsIStandardURL.URLTYPE_STANDARD, 80, spec, charset, baseURI);
-
- return uri.QueryInterface(Components.interfaces.nsIURI);
-
- },
-
- newChannel: function(aURI)
- {
- var prefs = Components.classes["@mozilla.org/preferences-service;1"]
- .getService(Components.interfaces.nsIPrefBranch);
- if (!prefs.getBoolPref("extensions.torbutton.tor_urls")) {
- throw Components.results.NS_ERROR_UNKNOWN_PROTOCOL;
- }
-
- /*The protocol has been called, therefore we want to enable tor, wait for it to activate return the new channel with the scheme of http.*/
- var ios = Components.classes[kIOSERVICE_CONTRACTID].getService(nsIIOService);
- var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
- .getService(Components.interfaces.nsIPromptService);
- var tor_enabled = prefs.getBoolPref("extensions.torbutton.tor_enabled");
- var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
- .getService(Components.interfaces.nsIWindowMediator);
- var chrome = wm.getMostRecentWindow("navigator:browser");
- if (!ios.allowPort(aURI.port, aURI.scheme))
- throw Components.results.NS_ERROR_FAILURE;
-
- if (!tor_enabled)
- {
- var result = prompt.confirm(null, "Allow Tor toggle?", "Do you want to enable Tor and navigate to " + aURI.spec + "?");
- if (!result)
- throw Components.results.NS_ERROR_UNEXPECTED;
- chrome.torbutton_enable_tor(true);
- }
-
- //if tor is turned on then, else we should throw exception of some sort.
- tor_enabled = prefs.getBoolPref("extensions.torbutton.tor_enabled");
- if (!tor_enabled)
- throw Components.results.NS_ERROR_UNEXPECTED;
- else
- {
- aURI.scheme = "http";
- return ios.newChannelFromURI(aURI);
- }
- },
-
- // method of nsIClassInfo
- classDescription: "Tor protocol handler",
- classID: kPROTOCOL_CID,
- contractID: kPROTOCOL_CONTRACTID,
-}
-
-/**
-* XPCOMUtils.generateNSGetFactory was introduced in Mozilla 2 (Firefox 4).
-* XPCOMUtils.generateNSGetModule is for Mozilla 1.9.2 (Firefox 3.6).
-*/
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-if (XPCOMUtils.generateNSGetFactory)
- var NSGetFactory = XPCOMUtils.generateNSGetFactory([Protocol]);
-else
- var NSGetModule = XPCOMUtils.generateNSGetModule([Protocol]);
diff --git a/src/components/torRefSpoofer.js b/src/components/torRefSpoofer.js
deleted file mode 100644
index 8b50075..0000000
--- a/src/components/torRefSpoofer.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// Bug 1506 P0: I don't really believe referers matter in the grand scheme.
-// Kill this code.
-
-const kMODULE_CID = Components.ID("65be2be0-ceb4-44c2-91a5-9c75c53430bf");
-const kMODULE_CONTRACTID = "@torproject.org/torRefSpoofer;1";
-
-function RefSpoofer() {
- this.logger = Components.classes["@torproject.org/torbutton-logger;1"].getService(Components.interfaces.nsISupports).wrappedJSObject;
- this.logger.log(3, "RefSpoof component created");
- this.specials = /[-[\]{}()*+?.,\\^$|#\s]/g;
-}
-
-
-RefSpoofer.prototype = {
- observe: function(subject, topic, data)
- {
- if (topic == "http-on-modify-request") {
- var prefs = Components.classes["@mozilla.org/preferences-service;1"]
- .getService(Components.interfaces.nsIPrefBranch);
- var tor_enabled = prefs.getBoolPref("extensions.torbutton.tor_enabled");
-
- if (!tor_enabled)
- return;
-
- subject.QueryInterface(Components.interfaces.nsIHttpChannel);
- this.onModifyRequest(subject);
- return;
- }
- if (topic == "profile-after-change") {
- this.logger.log(3, "RefSpoof got profile-after-change");
- var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
- os.addObserver(this, "http-on-modify-request", false);
- return;
- }
- },
- onModifyRequest: function(oHttpChannel)
- {
- var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
-
- var spoofmode = prefs.getIntPref("extensions.torbutton.refererspoof");
-
- var ios = Components.classes["@mozilla.org/network/io-service;1"]
- .getService(Components.interfaces.nsIIOService);
-
- if (spoofmode == 0)
- try {
- oHttpChannel.QueryInterface(Components.interfaces.nsIChannel);
- var referer;
- try{
- referer = oHttpChannel.getRequestHeader("Referer");
- referer = ios.newURI(referer,null,null);//make a nsIURI object for referer
- }catch(referr) {
- return;//no referer available or invalid uri
- }
- var requestURI = oHttpChannel.URI; //request nsIURI object
- var destHost = referer.host; //referer host w/o scheme
- var srcHost = oHttpChannel.URI.host;//request host without scheme
-
- // match is not what we want, unless we escape dots:
- var destHostMatch = destHost.replace(this.specials, "\\$&");
- var srcHostMatch = srcHost.replace(this.specials, "\\$&");
-
- // FIXME: This isn't exactly bulletproof security here, but it still
- // may need to be more lenient not to break sites...
- //
- // If we suspect issues, we can try doing the following first:
- // 1. Strip off all TLD suffixes, up to but not including '.'
- // 2. If more than one domain part is till left, strip off prefix
-
- //if they're in the same domain(if we can tell) or have the same host, keep the referer
- if (srcHost.split(".").length >= destHost.split(".").length
- && srcHost.match(destHostMatch)) // dest is a substring of src
- return;
- else if (destHost.split(".").length >= srcHost.split(".").length
- && destHost.match(srcHostMatch)) // src is a substring of dest
- return;
- //if they do not have the same host
- this.adjustRef(oHttpChannel, requestURI.scheme + "://" + requestURI.host);
- this.logger.safe_log(3, "Adjusting Referer, ",
- "from " + destHost + " to " + requestURI.host);
- }
- catch (ex) {
- this.logger.log(5, "RefSpoof onModifyRequest: " +ex);
- }
- else if (spoofmode == 2)
- this.adjustRef(oHttpChannel, "");
- },
- adjustRef: function(oChannel, sRef)
- {
- try {
- if (oChannel.referrer)
- {
- oChannel.referrer.spec = sRef;
- oChannel.setRequestHeader("Referer", sRef, false);
- }
- return true;
- }
- catch (ex) {
- this.logger.log(5, "RefSpoof adjustRef: " +ex);
- }
- return false;
- },
- QueryInterface: function(iid)
- {
- if (!iid.equals(Components.interfaces.nsISupports) &&
- !iid.equals(Components.interfaces.nsIObserver) &&
- !iid.equals(Components.interfaces.nsISupportsWeakReference))
- throw Components.results.NS_ERROR_NO_INTERFACE;
- return this;
- },
- _xpcom_categories: [{category:"profile-after-change"}],
- classID: kMODULE_CID,
- contractID: kMODULE_CONTRACTID,
- classDescription: "Tor Ref Spoofer"
-};
-
-/**
-* XPCOMUtils.generateNSGetFactory was introduced in Mozilla 2 (Firefox 4).
-* XPCOMUtils.generateNSGetModule is for Mozilla 1.9.2 (Firefox 3.6).
-*/
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-if (XPCOMUtils.generateNSGetFactory)
- var NSGetFactory = XPCOMUtils.generateNSGetFactory([RefSpoofer]);
-else
- var NSGetModule = XPCOMUtils.generateNSGetModule([RefSpoofer]);
diff --git a/src/components/tors-protocol.js b/src/components/tors-protocol.js
deleted file mode 100644
index f075e43..0000000
--- a/src/components/tors-protocol.js
+++ /dev/null
@@ -1,103 +0,0 @@
-// Bug 1506 P0: This code is toggle-mode code and is unused. Kill it.
-
-// Test protocol related
-const kSCHEME = "tors";
-const kPROTOCOL_NAME = "tors";
-const kPROTOCOL_CONTRACTID = "@mozilla.org/network/protocol;1?name=" + kSCHEME;
-const kPROTOCOL_CID = Components.ID("a5a4bc50-5e8d-11de-8a39-0800200c9a66");
-
-// Mozilla defined
-const kSIMPLEURI_CONTRACTID = "@mozilla.org/network/simple-uri;1";
-const kIOSERVICE_CONTRACTID = "@mozilla.org/network/io-service;1";
-const nsISupports = Components.interfaces.nsISupports;
-const nsIIOService = Components.interfaces.nsIIOService;
-const nsIProtocolHandler = Components.interfaces.nsIProtocolHandler;
-const nsIURI = Components.interfaces.nsIURI;
-
-function Protocol()
-{
-}
-
-Protocol.prototype =
-{
- QueryInterface: function(iid)
- {
- if (!iid.equals(nsIProtocolHandler) &&
- !iid.equals(nsISupports))
- throw Components.results.NS_ERROR_NO_INTERFACE;
- return this;
- },
-
- scheme: kSCHEME,
- defaultPort: -1,
- protocolFlags: nsIProtocolHandler.URI_NORELATIVE |
- nsIProtocolHandler.URI_NOAUTH,
-
- allowPort: function(port, scheme)
- {
- return false;
- },
-
- newURI: function(spec, charset, baseURI)
- {
- const nsIStandardURL = Components.interfaces.nsIStandardURL;
- var uri = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(nsIStandardURL);
- uri.init(nsIStandardURL.URLTYPE_STANDARD, 433, spec, charset, baseURI);
-
- return uri.QueryInterface(Components.interfaces.nsIURI);
-
- },
-
- newChannel: function(aURI)
- {
- var prefs = Components.classes["@mozilla.org/preferences-service;1"]
- .getService(Components.interfaces.nsIPrefBranch);
- if (!prefs.getBoolPref("extensions.torbutton.tor_urls")) {
- throw Components.results.NS_ERROR_UNKNOWN_PROTOCOL;
- }
-
- /*The protocol has been called, therefore we want to enable tor, wait for it to activate return the new channel with the scheme of https.*/
- var ios = Components.classes[kIOSERVICE_CONTRACTID].getService(nsIIOService);
- var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
- .getService(Components.interfaces.nsIPromptService);
- var tor_enabled = prefs.getBoolPref("extensions.torbutton.tor_enabled");
- var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
- .getService(Components.interfaces.nsIWindowMediator);
- var chrome = wm.getMostRecentWindow("navigator:browser");
- if (!ios.allowPort(aURI.port, aURI.scheme))
- throw Components.results.NS_ERROR_FAILURE;
-
- if (!tor_enabled)
- {
- var result = prompt.confirm(null, "Allow Tor toggle?", "Do you want to enable Tor and navigate to " + aURI.spec + "?");
- if (!result)
- throw Components.results.NS_ERROR_UNEXPECTED;
- chrome.torbutton_enable_tor(true);
- }
-
- //if tor is turned on then, else we should throw exception of some sort.
- tor_enabled = prefs.getBoolPref("extensions.torbutton.tor_enabled");
- if (!tor_enabled)
- throw Components.results.NS_ERROR_UNEXPECTED;
- else
- {
- aURI.scheme = "https";
- return ios.newChannelFromURI(aURI);
- }
- },
-
- // method of nsIClassInfo
- classDescription: "Tor protocol handler",
- classID: kPROTOCOL_CID,
- contractID: kPROTOCOL_CONTRACTID
-}
-
-/**
-* XPCOMUtils.generateNSGetFactory was introduced in Mozilla 2 (Firefox 4).
-* XPCOMUtils.generateNSGetModule is for Mozilla 1.9.2 (Firefox 3.6).
-*/
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-if (XPCOMUtils.generateNSGetFactory)
- var NSGetFactory = XPCOMUtils.generateNSGetFactory([Protocol]);
-else
- var NSGetModule = XPCOMUtils.generateNSGetModule([Protocol]);
diff --git a/src/components/window-mapper.js b/src/components/window-mapper.js
deleted file mode 100644
index a04f12b..0000000
--- a/src/components/window-mapper.js
+++ /dev/null
@@ -1,180 +0,0 @@
-// Bug 1506 P0: This code is toggle-mode code and is unused. Kill it.
-
-/*************************************************************************
- * ContentWindowMapper (JavaScript XPCOM component)
- *
- * Allows you to find a tabbrowser tab for a top level content window.
- *
- *************************************************************************/
-
-// Module specific constants
-const kMODULE_NAME = "Content Window Mapper";
-const kMODULE_CONTRACTID = "@torproject.org/content-window-mapper;1";
-const kMODULE_CID = Components.ID("b985e49c-12cb-4f29-9d14-b62603332ec4");
-
-const Cr = Components.results;
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const EXPIRATION_TIME = 60000; // 60 seconds
-
-const nsISupports = Components.interfaces.nsISupports;
-const nsIClassInfo = Components.interfaces.nsIClassInfo;
-const nsIComponentRegistrar = Components.interfaces.nsIComponentRegistrar;
-const nsIObserverService = Components.interfaces.nsIObserverService;
-
-function ContentWindowMapper() {
- this.cache = {};
-
- this.logger = Components.classes["@torproject.org/torbutton-logger;1"]
- .getService(Components.interfaces.nsISupports).wrappedJSObject;
- this.logger.log(3, "Component Load 2: Content window mapper online: "+kMODULE_CONTRACTID);
- this.last_expired = Date.now();
- // This JSObject is exported directly to chrome
- this.wrappedJSObject = this;
-}
-
-ContentWindowMapper.prototype =
-{
- QueryInterface: function(iid)
- {
- if (!iid.equals(nsIClassInfo) &&
- !iid.equals(nsISupports)) {
- Components.returnCode = Cr.NS_ERROR_NO_INTERFACE;
- return null;
- }
- return this;
- },
-
- wrappedJSObject: null, // Initialized by constructor
-
- // make this an nsIClassInfo object
- flags: nsIClassInfo.DOM_OBJECT,
-
- // method of nsIClassInfo
- classDescription: kMODULE_NAME,
- classID: kMODULE_CID,
- contractID: kMODULE_CONTRACTID,
-
- // method of nsIClassInfo
- getInterfaces: function(count) {
- var interfaceList = [nsIClassInfo];
- count.value = interfaceList.length;
- return interfaceList;
- },
-
- // method of nsIClassInfo
- getHelperForLanguage: function(count) { return null; },
-
- checkCache: function(topContentWindow) {
- if(typeof(topContentWindow.ghetto_guid) != "undefined"
- && typeof(this.cache[topContentWindow.ghetto_guid]) != "undefined") {
- return this.cache[topContentWindow.ghetto_guid].browser;
- }
-
- return null;
- },
-
- addCache: function(topContentWindow, browser) {
- var insertion = new Object();
- insertion.browser = browser;
- insertion.time = Date.now();
- topContentWindow.ghetto_guid = Math.random().toString()+Math.random().toString();
- this.cache[topContentWindow.ghetto_guid] = insertion;
- },
-
- expireOldCache: function() {
- var now = Date.now();
-
- if((now - this.last_expired) < EXPIRATION_TIME) {
- this.logger.log(3, "Early mapper check.");
- return;
- }
-
- var delkeys = [];
- for(var elem in this.cache) {
- if((now - this.cache[elem].time) > EXPIRATION_TIME) {
- this.logger.log(2, "Deleting cached element: "+elem.location);
- delkeys.push(elem);
- }
- }
-
- for(var k in delkeys) {
- delete this.cache[k];
- }
-
- this.last_expired = now;
- },
-
- getBrowserForContentWindow: function(topContentWindow) {
- if(topContentWindow instanceof Components.interfaces.nsIDOMChromeWindow) {
- if(topContentWindow.browserDOMWindow) {
- var browser = topContentWindow.getBrowser().selectedTab.linkedBrowser;
- this.logger.log(3, "Chrome browser at "
- +browser.contentWindow.location+" found for: "
- +topContentWindow.location);
- return browser;
- }
- // Allow strange chrome to go through..
- this.logger.log(3, "Odd chome window"+topContentWindow.location);
- return topContentWindow;
- }
-
- var cached = this.checkCache(topContentWindow);
- if(cached != null) {
- return cached;
- }
-
- try {
- this.logger.log(3, "Cache failed for: "+topContentWindow.location);
- } catch(e) {
- this.logger.log(3, "Cache failed for unknown location?");
- }
-
- var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
- .getService(Components.interfaces.nsIWindowMediator);
- var enumerator = wm.getEnumerator("navigator:browser");
- while(enumerator.hasMoreElements()) {
- var win = enumerator.getNext();
- var browser = win.getBrowser();
- for (var i = 0; i < browser.browsers.length; ++i) {
- var b = browser.browsers[i];
- if (b && b.contentWindow == topContentWindow) {
- this.addCache(topContentWindow, b);
- return b;
- }
- }
- }
-
- // SpeedDial, google notebook and other extensions can create their
- // own "<browser>" tag elements. AFAICT, there is no way to enumerate
- // these... Just punt and return the most recently used browser
- try {
- if(topContentWindow.name != "speedDialLoaderBrowser") {
- if(topContentWindow && topContentWindow.location)
- this.logger.safe_log(4, "No browser found: ", topContentWindow.location);
- else
- this.logger.safe_log(4, "No browser found: ", topContentWindow.name);
- } else {
- this.logger.log(3, "SpeedDial browser found: "+topContentWindow.name);
- }
- } catch(e) {
- this.logger.log(4, "No browser found.");
- }
-
- // Punt..
- var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
- getService(Components.interfaces.nsIWindowMediator);
- var recentWindow = wm.getMostRecentWindow("navigator:browser");
- return recentWindow ? recentWindow.getBrowser().selectedTab.linkedBrowser : null;
- }
-}
-
-/**
-* XPCOMUtils.generateNSGetFactory was introduced in Mozilla 2 (Firefox 4).
-* XPCOMUtils.generateNSGetModule is for Mozilla 1.9.2 (Firefox 3.6).
-*/
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-if (XPCOMUtils.generateNSGetFactory)
- var NSGetFactory = XPCOMUtils.generateNSGetFactory([ContentWindowMapper]);
-else
- var NSGetModule = XPCOMUtils.generateNSGetModule([ContentWindowMapper]);
1
0

[torbutton/master] Write changelog and bump version for 1.6.10.1.
by mikeperry@torproject.org 26 Jun '14
by mikeperry@torproject.org 26 Jun '14
26 Jun '14
commit 7d3a231de1584b8143ab050652bc178c93ce794e
Author: Mike Perry <mikeperry-git(a)torproject.org>
Date: Thu Jun 26 08:29:48 2014 -0700
Write changelog and bump version for 1.6.10.1.
---
src/CHANGELOG | 4 ++++
src/install.rdf | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/CHANGELOG b/src/CHANGELOG
index dbcf7b3..9d4336b 100644
--- a/src/CHANGELOG
+++ b/src/CHANGELOG
@@ -1,3 +1,7 @@
+1.6.10.1
+ 5 Jun 2014
+ * Bug #12221: Remove obsolete Javascript components from the toggle era
+
1.6.10.0
5 Jun 2014
* Bug 11510: about:tor should not report success if tor proxy is unreachable
diff --git a/src/install.rdf b/src/install.rdf
index d4483a3..9da99e3 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -6,7 +6,7 @@
<em:name>Torbutton</em:name>
<em:creator>Mike Perry</em:creator>
<em:id>torbutton(a)torproject.org</em:id>
- <em:version>1.6.10.0</em:version>
+ <em:version>1.6.10.1</em:version>
<em:homepageURL>https://www.torproject.org/projects/torbrowser.html.en</em:homepageURL>
<em:optionsURL>chrome://torbutton/content/preferences.xul</em:optionsURL>
<em:iconURL>chrome://torbutton/skin/tor.png</em:iconURL>
1
0

[metrics-web/master] Rename page with bubble graphs to Diversity.
by karsten@torproject.org 26 Jun '14
by karsten@torproject.org 26 Jun '14
26 Jun '14
commit c6e04a4ea63301383f339579d85084ebc29276fc
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jun 26 14:42:09 2014 +0200
Rename page with bubble graphs to Diversity.
---
website/web/WEB-INF/banner.jsp | 3 ++-
website/web/WEB-INF/bubbles.jsp | 7 ++++++-
website/web/WEB-INF/error.jsp | 2 +-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/website/web/WEB-INF/banner.jsp b/website/web/WEB-INF/banner.jsp
index 0756f7d..33f9f8f 100644
--- a/website/web/WEB-INF/banner.jsp
+++ b/website/web/WEB-INF/banner.jsp
@@ -11,7 +11,8 @@
<a <% if (currentPage.endsWith("network.jsp")) {
%>class="current"<%} else {%>href="/network.html"<%}%>>Network</a>
<a <% if (currentPage.endsWith("bubbles.jsp")) {
- %>class="current"<%} else {%>href="/bubbles.html"<%}%>>Bubbles</a>
+ %>class="current"<%} else {%>href="/bubbles.html"<%}
+ %>>Diversity</a>
<a <% if (currentPage.endsWith("users.jsp")) {
%>class="current"<%} else {%>href="/users.html"<%}%>>Users</a>
<a <% if (currentPage.endsWith("performance.jsp")) {
diff --git a/website/web/WEB-INF/bubbles.jsp b/website/web/WEB-INF/bubbles.jsp
index 5e65d16..6afa1fe 100644
--- a/website/web/WEB-INF/bubbles.jsp
+++ b/website/web/WEB-INF/bubbles.jsp
@@ -2,7 +2,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics: Network bubble graphs</title>
+ <title>Tor Metrics: Diversity</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -13,6 +13,11 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
+<h2>Tor Metrics: Diversity</h2>
+<br>
+<a name="bubbles"></a>
+<h3><a href="#bubbles" class="anchor">Network bubble graphs</a></h3>
+<br>
<p>
All relays:
<a href="#no-group" onclick="make_bubble_graph('no-group');">No group</a> |
diff --git a/website/web/WEB-INF/error.jsp b/website/web/WEB-INF/error.jsp
index 79ac86e..37ef605 100644
--- a/website/web/WEB-INF/error.jsp
+++ b/website/web/WEB-INF/error.jsp
@@ -42,7 +42,7 @@ Maybe you find what you're looking for on our sitemap:
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="network.html">Network</a></li>
-<li><a href="bubbles.html">Bubbles</a></li>
+<li><a href="bubbles.html">Diversity</a></li>
<li><a href="users.html">Users</a></li>
<li><a href="performance.html">Performance</a></li>
<li><a href="stats.html">Statistics</a></li>
1
0
commit c854b4c3e49e4dcc9051b1dc7c8397618d6c586a
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jun 26 14:22:23 2014 +0200
Simplify navigation.
It's not necessary anymore to group pages into graphs, research, and
formerly status, because it's all about graphs now. The navigation bar
and site map on the error page should reflect that.
Old links still work.
---
website/web/WEB-INF/banner.jsp | 57 +++++++++-------------------------------
website/web/WEB-INF/error.jsp | 9 -------
2 files changed, 12 insertions(+), 54 deletions(-)
diff --git a/website/web/WEB-INF/banner.jsp b/website/web/WEB-INF/banner.jsp
index 3acea7f..0756f7d 100644
--- a/website/web/WEB-INF/banner.jsp
+++ b/website/web/WEB-INF/banner.jsp
@@ -8,51 +8,18 @@
<% String currentPage = request.getRequestURI(); %>
<a <% if (currentPage.endsWith("index.jsp")) {
%>class="current"<%} else {%>href="/index.html"<%}%>>Home</a>
- <a <% if (currentPage.endsWith("graphs.jsp")) {
- %>class="current"<%} else {%>href="/graphs.html"<%}%>>Graphs</a>
- <a <% if (currentPage.endsWith("research.jsp")) {
- %>class="current"<%} else {%>href="/research.html"<%}%>>Research</a>
- <%if (currentPage.endsWith("graphs.jsp") ||
- currentPage.endsWith("network.jsp") ||
- currentPage.endsWith("bubbles.jsp") ||
- currentPage.endsWith("users.jsp") ||
- currentPage.endsWith("performance.jsp")) {
- %><br>
- <font size="2">
- <a <%if (currentPage.endsWith("network.jsp")){
- %>class="current"<%} else {%>href="/network.html"<%}
- %>>Network</a>
- <a <%if (currentPage.endsWith("bubbles.jsp")){
- %>class="current"<%} else {%>href="/bubbles.html"<%}
- %>>Bubbles</a>
- <a <%if (currentPage.endsWith("users.jsp")) {
- %>class="current"<%} else {%>href="/users.html"<%}
- %>>Users</a>
- <a <%if (currentPage.endsWith("performance.jsp")) {
- %>class="current"<%} else {%>href="/performance.html"<%}
- %>>Performance</a>
- </font>
- <%} else if (currentPage.endsWith("research.jsp") ||
- currentPage.endsWith("data.jsp") ||
- currentPage.endsWith("formats.jsp") ||
- currentPage.endsWith("tools.jsp") ||
- currentPage.endsWith("stats.jsp")) {
- %><br>
- <font size="2">
- <a <%if (currentPage.endsWith("data.jsp")) {
- %>class="current"<%} else {%> href="/data.html"<%}
- %>>Data</a>
- <a <%if (currentPage.endsWith("formats.jsp")) {
- %>class="current"<%} else {%> href="/formats.html"<%}
- %>>Formats</a>
- <a <%if (currentPage.endsWith("tools.jsp")) {
- %>class="current"<%} else {%> href="/tools.html"<%}
- %>>Tools</a>
- <a <%if (currentPage.endsWith("stats.jsp")) {
- %>class="current"<%} else {%> href="/stats.html"<%}
- %>>Statistics</a>
- </font>
- <%}%>
+ <a <% if (currentPage.endsWith("network.jsp")) {
+ %>class="current"<%} else {%>href="/network.html"<%}%>>Network</a>
+ <a <% if (currentPage.endsWith("bubbles.jsp")) {
+ %>class="current"<%} else {%>href="/bubbles.html"<%}%>>Bubbles</a>
+ <a <% if (currentPage.endsWith("users.jsp")) {
+ %>class="current"<%} else {%>href="/users.html"<%}%>>Users</a>
+ <a <% if (currentPage.endsWith("performance.jsp")) {
+ %>class="current"<%} else {%>href="/performance.html"<%}
+ %>>Performance</a>
+ <a <% if (currentPage.endsWith("stats.jsp")) {
+ %>class="current"<%} else {%>href="/stats.html"<%}
+ %>>Statistics</a>
</td>
<td class="banner-right"></td>
</tr>
diff --git a/website/web/WEB-INF/error.jsp b/website/web/WEB-INF/error.jsp
index 17ddee3..80ef077 100644
--- a/website/web/WEB-INF/error.jsp
+++ b/website/web/WEB-INF/error.jsp
@@ -41,20 +41,11 @@ when processing your request!</p>
Maybe you find what you're looking for on our sitemap:
<ul>
<li><a href="index.html">Home</a></li>
-<li><a href="graphs.html">Graphs</a>
-<ul>
<li><a href="network.html">Network</a></li>
<li><a href="bubbles.html">Bubbles</a></li>
<li><a href="users.html">Users</a></li>
<li><a href="performance.html">Performance</a></li>
-</ul></li>
-<li><a href="research.html">Research</a>
-<ul>
-<li><a href="data.html">Data</a></li>
-<li><a href="formats.html">Formats</a></li>
-<li><a href="tools.html">Tools</a></li>
<li><a href="stats.html">Statistics</a></li>
-</ul></li>
</ul>
</p>
1
0

[metrics-web/master] Split Network page into Servers and Bandwidth.
by karsten@torproject.org 26 Jun '14
by karsten@torproject.org 26 Jun '14
26 Jun '14
commit 8bda126ab01dbfd4ed7a00b8a1ed50e74596e9a6
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jun 26 15:45:58 2014 +0200
Split Network page into Servers and Bandwidth.
---
website/etc/web.xml | 4 +
.../metrics/web/graphs/GraphsSubpagesServlet.java | 2 +
website/web/WEB-INF/bandwidth.jsp | 252 ++++++++++++++++++++
website/web/WEB-INF/banner.jsp | 4 +-
website/web/WEB-INF/error.jsp | 3 +-
website/web/WEB-INF/network.jsp | 232 +-----------------
6 files changed, 265 insertions(+), 232 deletions(-)
diff --git a/website/etc/web.xml b/website/etc/web.xml
index a3149ff..c187315 100644
--- a/website/etc/web.xml
+++ b/website/etc/web.xml
@@ -40,6 +40,10 @@
</servlet-mapping>
<servlet-mapping>
<servlet-name>GraphsSubpages</servlet-name>
+ <url-pattern>/bandwidth.html</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>GraphsSubpages</servlet-name>
<url-pattern>/users.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
diff --git a/website/src/org/torproject/metrics/web/graphs/GraphsSubpagesServlet.java b/website/src/org/torproject/metrics/web/graphs/GraphsSubpagesServlet.java
index 5ae17ff..6bbc5ca 100644
--- a/website/src/org/torproject/metrics/web/graphs/GraphsSubpagesServlet.java
+++ b/website/src/org/torproject/metrics/web/graphs/GraphsSubpagesServlet.java
@@ -39,6 +39,8 @@ public class GraphsSubpagesServlet extends HttpServlet {
this.availableGraphsSubpages = new HashMap<String, String>();
this.availableGraphsSubpages.put("network.html",
"WEB-INF/network.jsp");
+ this.availableGraphsSubpages.put("bandwidth.html",
+ "WEB-INF/bandwidth.jsp");
this.availableGraphsSubpages.put("users.html", "WEB-INF/users.jsp");
this.availableGraphsSubpages.put("performance.html",
"WEB-INF/performance.jsp");
diff --git a/website/web/WEB-INF/bandwidth.jsp b/website/web/WEB-INF/bandwidth.jsp
new file mode 100644
index 0000000..95d1201
--- /dev/null
+++ b/website/web/WEB-INF/bandwidth.jsp
@@ -0,0 +1,252 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <title>Tor Metrics: Bandwidth</title>
+ <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+ <link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
+ <link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
+</head>
+<body>
+ <div class="center">
+ <%@ include file="banner.jsp"%>
+ <div class="main-column">
+<h2>Tor Metrics: Bandwidth</h2>
+<br>
+
+<a name="bandwidth"></a>
+<h3><a href="#bandwidth" class="anchor">Total relay bandwidth in the
+network</a></h3>
+<br>
+<p>Relays report how much bandwidth they are willing to contribute and how
+many bytes they have read and written in the past 24 hours. The following
+graph shows total advertised bandwidth and bandwidth history of all relays
+in the network.</p>
+<img src="bandwidth.png${bandwidth_url}"
+ width="576" height="360" alt="Relay bandwidth graph">
+<form action="network.html#bandwidth">
+ <div class="formrow">
+ <input type="hidden" name="graph" value="bandwidth">
+ <p>
+ <label>Start date (yyyy-mm-dd):</label>
+ <input type="text" name="start" size="10"
+ value="<c:choose><c:when test="${fn:length(bandwidth_start) == 0}">${default_start_date}</c:when><c:otherwise>${bandwidth_start[0]}</c:otherwise></c:choose>">
+ <label>End date (yyyy-mm-dd):</label>
+ <input type="text" name="end" size="10"
+ value="<c:choose><c:when test="${fn:length(bandwidth_end) == 0}">${default_end_date}</c:when><c:otherwise>${bandwidth_end[0]}</c:otherwise></c:choose>">
+ </p><p>
+ <input class="submit" type="submit" value="Update graph">
+ </p>
+ </div>
+</form>
+<p>Download graph as
+<a href="bandwidth.pdf${bandwidth_url}">PDF</a> or
+<a href="bandwidth.svg${bandwidth_url}">SVG</a>.</p>
+<p><a href="stats/bandwidth.csv">CSV</a> file containing all data.</p>
+<br>
+
+<a name="bwhist-flags"></a>
+<h3><a href="#bwhist-flags" class="anchor">Relay bandwidth by Exit and/or
+Guard flags</a></h3>
+<br>
+<p>The following graph shows the relay bandwidth of all relays with the
+Exit and/or Guard flags assigned by the directory authorities.</p>
+<img src="bwhist-flags.png${bwhist_flags_url}"
+ width="576" height="360" alt="Relay bandwidth by flags graph">
+<form action="network.html#bwhist-flags">
+ <div class="formrow">
+ <input type="hidden" name="graph" value="bwhist-flags">
+ <p>
+ <label>Start date (yyyy-mm-dd):</label>
+ <input type="text" name="start" size="10"
+ value="<c:choose><c:when test="${fn:length(bwhist_flags_start) == 0}">${default_start_date}</c:when><c:otherwise>${bwhist_flags_start[0]}</c:otherwise></c:choose>">
+ <label>End date (yyyy-mm-dd):</label>
+ <input type="text" name="end" size="10"
+ value="<c:choose><c:when test="${fn:length(bwhist_flags_end) == 0}">${default_end_date}</c:when><c:otherwise>${bwhist_flags_end[0]}</c:otherwise></c:choose>">
+ </p><p>
+ <input class="submit" type="submit" value="Update graph">
+ </p>
+ </div>
+</form>
+<p>Download graph as
+<a href="bwhist-flags.pdf${bwhist_flags_url}">PDF</a> or
+<a href="bwhist-flags.svg${bwhist_flags_url}">SVG</a>.</p>
+<p><a href="stats/bandwidth.csv">CSV</a> file containing all data.</p>
+<br>
+
+<a name="bandwidth-flags"></a>
+<h3><a href="#bandwidth-flags" class="anchor">Advertised bandwidth and
+bandwidth history by relay flags</a></h3>
+<br>
+<p>The following graph shows the advertised bandwidth and bandwidth
+history of all relays with the Exit and/or Guard flags assigned by the
+directory authorities.
+Note that these sets possibly overlap with relays having both Exit and
+Guard flag.</p>
+<img src="bandwidth-flags.png${bandwidth_flags_url}"
+ width="576" height="360" alt="Advertised bandwidth and bandwidth history by relay flags graph">
+<form action="network.html#bandwidth-flags">
+ <div class="formrow">
+ <input type="hidden" name="graph" value="bandwidth-flags">
+ <p>
+ <label>Start date (yyyy-mm-dd):</label>
+ <input type="text" name="start" size="10"
+ value="<c:choose><c:when test="${fn:length(bandwidth_flags_start) == 0}">${default_start_date}</c:when><c:otherwise>${bandwidth_flags_start[0]}</c:otherwise></c:choose>">
+ <label>End date (yyyy-mm-dd):</label>
+ <input type="text" name="end" size="10"
+ value="<c:choose><c:when test="${fn:length(bandwidth_flags_end) == 0}">${default_end_date}</c:when><c:otherwise>${bandwidth_flags_end[0]}</c:otherwise></c:choose>">
+ </p><p>
+ <input class="submit" type="submit" value="Update graph">
+ </p>
+ </div>
+</form>
+<p>Download graph as
+<a href="bandwidth-flags.pdf${bandwidth_flags_url}">PDF</a> or
+<a href="bandwidth-flags.svg${bandwidth_flags_url}">SVG</a>.</p>
+<p><a href="stats/bandwidth.csv">CSV</a> file containing all data.</p>
+<br>
+
+<a name="dirbytes"></a>
+<h3><a href="#dirbytes" class="anchor">Number of bytes spent on answering
+directory requests</a></h3>
+<br>
+<p>Relays running on 0.2.2.15-alpha or higher report the number of bytes
+they spend on answering directory requests. The following graph shows
+total written and read bytes as well as written and read dir bytes. The
+dir bytes are extrapolated from those relays who report them to reflect
+the number of written and read dir bytes by all relays.</p>
+<img src="dirbytes.png${dirbytes_url}"
+ width="576" height="360" alt="Dir bytes graph">
+<form action="network.html#dirbytes">
+ <div class="formrow">
+ <input type="hidden" name="graph" value="dirbytes">
+ <p>
+ <label>Start date (yyyy-mm-dd):</label>
+ <input type="text" name="start" size="10"
+ value="<c:choose><c:when test="${fn:length(dirbytes_start) == 0}">${default_start_date}</c:when><c:otherwise>${dirbytes_start[0]}</c:otherwise></c:choose>">
+ <label>End date (yyyy-mm-dd):</label>
+ <input type="text" name="end" size="10"
+ value="<c:choose><c:when test="${fn:length(dirbytes_end) == 0}">${default_end_date}</c:when><c:otherwise>${dirbytes_end[0]}</c:otherwise></c:choose>">
+ </p><p>
+ <input class="submit" type="submit" value="Update graph">
+ </p>
+ </div>
+</form>
+<p>Download graph as
+<a href="dirbytes.pdf${dirbytes_url}">PDF</a> or
+<a href="dirbytes.svg${dirbytes_url}">SVG</a>.</p>
+<p><a href="stats/bandwidth.csv">CSV</a> file containing all data.</p>
+<br>
+
+<a name="advbwdist-perc"></a>
+<h3><a href="#advbwdist-perc" class="anchor">Advertised bandwidth
+distribution</a></h3>
+<br>
+<p>The following graph shows the distribution of advertised bandwidth in
+the network. In contrast to the graphs above, the following graph contains
+no sums of advertised bandwidths, but bandwidths of single relays.</p>
+<img src="advbwdist-perc.png${advbwdist_perc_url}"
+ width="576" height="360"
+ alt="Advertised bandwidth distribution graph">
+<form action="network.html#advbwdist-perc">
+ <div class="formrow">
+ <input type="hidden" name="graph" value="advbwdist-perc">
+ <p>
+ <label>Start date (yyyy-mm-dd):</label>
+ <input type="text" name="start" size="10"
+ value="<c:choose><c:when test="${fn:length(advbwdist_perc_start) == 0}">${default_start_date}</c:when><c:otherwise>${advbwdist_perc_start[0]}</c:otherwise></c:choose>">
+ <label>End date (yyyy-mm-dd):</label>
+ <input type="text" name="end" size="10"
+ value="<c:choose><c:when test="${fn:length(advbwdist_perc_end) == 0}">${default_end_date}</c:when><c:otherwise>${advbwdist_perc_end[0]}</c:otherwise></c:choose>">
+ </p><p>
+ <label>Percentiles: </label>
+ <input type="checkbox" name="p" value="100"<c:if test="${fn:length(advbwdist_perc_p) == 0 or fn:contains(fn:join(advbwdist_perc_p, ','), '100')}"> checked</c:if>> 100 (maximum)
+ <input type="checkbox" name="p" value="99"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '99')}"> checked</c:if>> 99
+ <input type="checkbox" name="p" value="98"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '98')}"> checked</c:if>> 98
+ <input type="checkbox" name="p" value="97"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '97')}"> checked</c:if>> 97
+ <input type="checkbox" name="p" value="95"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '95')}"> checked</c:if>> 95
+ <input type="checkbox" name="p" value="91"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '91')}"> checked</c:if>> 91
+ <input type="checkbox" name="p" value="90"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '90')}"> checked</c:if>> 90
+ <input type="checkbox" name="p" value="80"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '80')}"> checked</c:if>> 80
+ <input type="checkbox" name="p" value="75"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '75')}"> checked</c:if>> 75 (3rd quartile)
+ <input type="checkbox" name="p" value="70"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '70')}"> checked</c:if>> 70
+ <input type="checkbox" name="p" value="60"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '60')}"> checked</c:if>> 60
+ <input type="checkbox" name="p" value="50"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '50')}"> checked</c:if>> 50 (median)
+ <input type="checkbox" name="p" value="40"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '40')}"> checked</c:if>> 40
+ <input type="checkbox" name="p" value="30"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '30')}"> checked</c:if>> 30
+ <input type="checkbox" name="p" value="25"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '25')}"> checked</c:if>> 25 (first quartile)
+ <input type="checkbox" name="p" value="20"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '20')}"> checked</c:if>> 20
+ <input type="checkbox" name="p" value="10"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '10,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',10,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',10') or (advbwdist_perc_p[0] == '10' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 10
+ <input type="checkbox" name="p" value="9"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '9,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',9,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',9') or (advbwdist_perc_p[0] == '9' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 9
+ <input type="checkbox" name="p" value="5"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '5,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',5,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',5') or (advbwdist_perc_p[0] == '5' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 5
+ <input type="checkbox" name="p" value="3"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '3,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',3,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',3') or (advbwdist_perc_p[0] == '3' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 3
+ <input type="checkbox" name="p" value="2"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '2,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',2,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',2') or (advbwdist_perc_p[0] == '2' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 2
+ <input type="checkbox" name="p" value="1"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '1,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',1,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',1') or (advbwdist_perc_p[0] == '1' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 1
+ <input type="checkbox" name="p" value="0"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '0,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',0,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',0') or (advbwdist_perc_p[0] == '0' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 0 (minimum)
+ </p><p>
+ <input class="submit" type="submit" value="Update graph">
+ </p>
+ </div>
+</form>
+<p>Download graph as
+<a href="advbwdist-perc.pdf${advbwdist_perc_url}">PDF</a> or
+<a href="advbwdist-perc.svg${advbwdist_perc_url}">SVG</a>.</p>
+<p><a href="stats/advbwdist.csv">CSV</a> file containing all data.</p>
+<br>
+
+<a name="advbwdist-relay"></a>
+<h3><a href="#advbwdist-relay" class="anchor">Advertised bandwidth of
+n-th fastest relays</a></h3>
+<br>
+<p>The following graph shows the advertised bandwidth of the n-th fastest
+relays in the network.</p>
+<img src="advbwdist-relay.png${advbwdist_relay_url}"
+ width="576" height="360"
+ alt="Advertised bandwidth of n-th fastest relays graph">
+<form action="network.html#advbwdist-relay">
+ <div class="formrow">
+ <input type="hidden" name="graph" value="advbwdist-relay">
+ <p>
+ <label>Start date (yyyy-mm-dd):</label>
+ <input type="text" name="start" size="10"
+ value="<c:choose><c:when test="${fn:length(advbwdist_relay_start) == 0}">${default_start_date}</c:when><c:otherwise>${advbwdist_relay_start[0]}</c:otherwise></c:choose>">
+ <label>End date (yyyy-mm-dd):</label>
+ <input type="text" name="end" size="10"
+ value="<c:choose><c:when test="${fn:length(advbwdist_relay_end) == 0}">${default_end_date}</c:when><c:otherwise>${advbwdist_relay_end[0]}</c:otherwise></c:choose>">
+ </p><p>
+ <label>n-th fastest relays: </label>
+ <input type="checkbox" name="n" value="1"<c:if test="${fn:length(advbwdist_relay_n) == 0 or fn:contains(fn:join(advbwdist_relay_n, ','), '1,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '1')}"> checked</c:if>> 1
+ <input type="checkbox" name="n" value="2"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '2,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '2'))}"> checked</c:if>> 2
+ <input type="checkbox" name="n" value="3"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '3,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '3'))}"> checked</c:if>> 3
+ <input type="checkbox" name="n" value="5"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '5,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '5'))}"> checked</c:if>> 5
+ <input type="checkbox" name="n" value="10"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '10,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '10'))}"> checked</c:if>> 10
+ <input type="checkbox" name="n" value="20"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '20,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '20'))}"> checked</c:if>> 20
+ <input type="checkbox" name="n" value="30"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '30,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '30'))}"> checked</c:if>> 30
+ <input type="checkbox" name="n" value="50"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '50,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '50'))}"> checked</c:if>> 50
+ <input type="checkbox" name="n" value="100"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '100,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '100'))}"> checked</c:if>> 100
+ <input type="checkbox" name="n" value="200"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '200,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '200'))}"> checked</c:if>> 200
+ <input type="checkbox" name="n" value="300"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '300,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '300'))}"> checked</c:if>> 300
+ <input type="checkbox" name="n" value="500"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '500,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '500'))}"> checked</c:if>> 500
+ <input type="checkbox" name="n" value="1000"<c:if test="${fn:length(advbwdist_relay_n) > 0 and fn:contains(fn:join(advbwdist_relay_n, ','), '1000')}"> checked</c:if>> 1000
+ <input type="checkbox" name="n" value="2000"<c:if test="${fn:length(advbwdist_relay_n) > 0 and fn:contains(fn:join(advbwdist_relay_n, ','), '2000')}"> checked</c:if>> 2000
+ <input type="checkbox" name="n" value="3000"<c:if test="${fn:length(advbwdist_relay_n) > 0 and fn:contains(fn:join(advbwdist_relay_n, ','), '3000')}"> checked</c:if>> 3000
+ <input type="checkbox" name="n" value="5000"<c:if test="${fn:length(advbwdist_relay_n) > 0 and fn:contains(fn:join(advbwdist_relay_n, ','), '5000')}"> checked</c:if>> 5000
+ </p><p>
+ <input class="submit" type="submit" value="Update graph">
+ </p>
+ </div>
+</form>
+<p>Download graph as
+<a href="advbwdist-relay.pdf${advbwdist_relay_url}">PDF</a> or
+<a href="advbwdist-relay.svg${advbwdist_relay_url}">SVG</a>.</p>
+<p><a href="stats/advbwdist.csv">CSV</a> file containing all data.</p>
+<br>
+ </div>
+ </div>
+ <div class="bottom" id="bottom">
+ <%@ include file="footer.jsp"%>
+ </div>
+</body>
+</html>
diff --git a/website/web/WEB-INF/banner.jsp b/website/web/WEB-INF/banner.jsp
index 33f9f8f..2b27632 100644
--- a/website/web/WEB-INF/banner.jsp
+++ b/website/web/WEB-INF/banner.jsp
@@ -9,7 +9,9 @@
<a <% if (currentPage.endsWith("index.jsp")) {
%>class="current"<%} else {%>href="/index.html"<%}%>>Home</a>
<a <% if (currentPage.endsWith("network.jsp")) {
- %>class="current"<%} else {%>href="/network.html"<%}%>>Network</a>
+ %>class="current"<%} else {%>href="/network.html"<%}%>>Servers</a>
+ <a <% if (currentPage.endsWith("bandwidth.jsp")) {
+ %>class="current"<%} else {%>href="/bandwidth.html"<%}%>>Bandwidth</a>
<a <% if (currentPage.endsWith("bubbles.jsp")) {
%>class="current"<%} else {%>href="/bubbles.html"<%}
%>>Diversity</a>
diff --git a/website/web/WEB-INF/error.jsp b/website/web/WEB-INF/error.jsp
index 37ef605..e6f1e71 100644
--- a/website/web/WEB-INF/error.jsp
+++ b/website/web/WEB-INF/error.jsp
@@ -41,7 +41,8 @@ when processing your request!</p>
Maybe you find what you're looking for on our sitemap:
<ul>
<li><a href="index.html">Home</a></li>
-<li><a href="network.html">Network</a></li>
+<li><a href="network.html">Servers</a></li>
+<li><a href="bandwidth.html">Bandwidth</a></li>
<li><a href="bubbles.html">Diversity</a></li>
<li><a href="users.html">Users</a></li>
<li><a href="performance.html">Performance</a></li>
diff --git a/website/web/WEB-INF/network.jsp b/website/web/WEB-INF/network.jsp
index c291bb3..830f3cc 100644
--- a/website/web/WEB-INF/network.jsp
+++ b/website/web/WEB-INF/network.jsp
@@ -4,7 +4,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics: Network</title>
+ <title>Tor Metrics: Servers</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -13,7 +13,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
-<h2>Tor Metrics: Network</h2>
+<h2>Tor Metrics: Servers</h2>
<br>
<a name="networksize"></a>
<h3><a href="#networksize" class="anchor">Relays and bridges in the
@@ -172,234 +172,6 @@ network.</p>
<a href="cloudbridges.svg${cloudbridges_url}">SVG</a>.</p>
<p><a href="stats/servers.csv">CSV</a> file containing all data.</p>
<br>
-
-<a name="bandwidth"></a>
-<h3><a href="#bandwidth" class="anchor">Total relay bandwidth in the
-network</a></h3>
-<br>
-<p>Relays report how much bandwidth they are willing to contribute and how
-many bytes they have read and written in the past 24 hours. The following
-graph shows total advertised bandwidth and bandwidth history of all relays
-in the network.</p>
-<img src="bandwidth.png${bandwidth_url}"
- width="576" height="360" alt="Relay bandwidth graph">
-<form action="network.html#bandwidth">
- <div class="formrow">
- <input type="hidden" name="graph" value="bandwidth">
- <p>
- <label>Start date (yyyy-mm-dd):</label>
- <input type="text" name="start" size="10"
- value="<c:choose><c:when test="${fn:length(bandwidth_start) == 0}">${default_start_date}</c:when><c:otherwise>${bandwidth_start[0]}</c:otherwise></c:choose>">
- <label>End date (yyyy-mm-dd):</label>
- <input type="text" name="end" size="10"
- value="<c:choose><c:when test="${fn:length(bandwidth_end) == 0}">${default_end_date}</c:when><c:otherwise>${bandwidth_end[0]}</c:otherwise></c:choose>">
- </p><p>
- <input class="submit" type="submit" value="Update graph">
- </p>
- </div>
-</form>
-<p>Download graph as
-<a href="bandwidth.pdf${bandwidth_url}">PDF</a> or
-<a href="bandwidth.svg${bandwidth_url}">SVG</a>.</p>
-<p><a href="stats/bandwidth.csv">CSV</a> file containing all data.</p>
-<br>
-
-<a name="bwhist-flags"></a>
-<h3><a href="#bwhist-flags" class="anchor">Relay bandwidth by Exit and/or
-Guard flags</a></h3>
-<br>
-<p>The following graph shows the relay bandwidth of all relays with the
-Exit and/or Guard flags assigned by the directory authorities.</p>
-<img src="bwhist-flags.png${bwhist_flags_url}"
- width="576" height="360" alt="Relay bandwidth by flags graph">
-<form action="network.html#bwhist-flags">
- <div class="formrow">
- <input type="hidden" name="graph" value="bwhist-flags">
- <p>
- <label>Start date (yyyy-mm-dd):</label>
- <input type="text" name="start" size="10"
- value="<c:choose><c:when test="${fn:length(bwhist_flags_start) == 0}">${default_start_date}</c:when><c:otherwise>${bwhist_flags_start[0]}</c:otherwise></c:choose>">
- <label>End date (yyyy-mm-dd):</label>
- <input type="text" name="end" size="10"
- value="<c:choose><c:when test="${fn:length(bwhist_flags_end) == 0}">${default_end_date}</c:when><c:otherwise>${bwhist_flags_end[0]}</c:otherwise></c:choose>">
- </p><p>
- <input class="submit" type="submit" value="Update graph">
- </p>
- </div>
-</form>
-<p>Download graph as
-<a href="bwhist-flags.pdf${bwhist_flags_url}">PDF</a> or
-<a href="bwhist-flags.svg${bwhist_flags_url}">SVG</a>.</p>
-<p><a href="stats/bandwidth.csv">CSV</a> file containing all data.</p>
-<br>
-
-<a name="bandwidth-flags"></a>
-<h3><a href="#bandwidth-flags" class="anchor">Advertised bandwidth and
-bandwidth history by relay flags</a></h3>
-<br>
-<p>The following graph shows the advertised bandwidth and bandwidth
-history of all relays with the Exit and/or Guard flags assigned by the
-directory authorities.
-Note that these sets possibly overlap with relays having both Exit and
-Guard flag.</p>
-<img src="bandwidth-flags.png${bandwidth_flags_url}"
- width="576" height="360" alt="Advertised bandwidth and bandwidth history by relay flags graph">
-<form action="network.html#bandwidth-flags">
- <div class="formrow">
- <input type="hidden" name="graph" value="bandwidth-flags">
- <p>
- <label>Start date (yyyy-mm-dd):</label>
- <input type="text" name="start" size="10"
- value="<c:choose><c:when test="${fn:length(bandwidth_flags_start) == 0}">${default_start_date}</c:when><c:otherwise>${bandwidth_flags_start[0]}</c:otherwise></c:choose>">
- <label>End date (yyyy-mm-dd):</label>
- <input type="text" name="end" size="10"
- value="<c:choose><c:when test="${fn:length(bandwidth_flags_end) == 0}">${default_end_date}</c:when><c:otherwise>${bandwidth_flags_end[0]}</c:otherwise></c:choose>">
- </p><p>
- <input class="submit" type="submit" value="Update graph">
- </p>
- </div>
-</form>
-<p>Download graph as
-<a href="bandwidth-flags.pdf${bandwidth_flags_url}">PDF</a> or
-<a href="bandwidth-flags.svg${bandwidth_flags_url}">SVG</a>.</p>
-<p><a href="stats/bandwidth.csv">CSV</a> file containing all data.</p>
-<br>
-
-<a name="dirbytes"></a>
-<h3><a href="#dirbytes" class="anchor">Number of bytes spent on answering
-directory requests</a></h3>
-<br>
-<p>Relays running on 0.2.2.15-alpha or higher report the number of bytes
-they spend on answering directory requests. The following graph shows
-total written and read bytes as well as written and read dir bytes. The
-dir bytes are extrapolated from those relays who report them to reflect
-the number of written and read dir bytes by all relays.</p>
-<img src="dirbytes.png${dirbytes_url}"
- width="576" height="360" alt="Dir bytes graph">
-<form action="network.html#dirbytes">
- <div class="formrow">
- <input type="hidden" name="graph" value="dirbytes">
- <p>
- <label>Start date (yyyy-mm-dd):</label>
- <input type="text" name="start" size="10"
- value="<c:choose><c:when test="${fn:length(dirbytes_start) == 0}">${default_start_date}</c:when><c:otherwise>${dirbytes_start[0]}</c:otherwise></c:choose>">
- <label>End date (yyyy-mm-dd):</label>
- <input type="text" name="end" size="10"
- value="<c:choose><c:when test="${fn:length(dirbytes_end) == 0}">${default_end_date}</c:when><c:otherwise>${dirbytes_end[0]}</c:otherwise></c:choose>">
- </p><p>
- <input class="submit" type="submit" value="Update graph">
- </p>
- </div>
-</form>
-<p>Download graph as
-<a href="dirbytes.pdf${dirbytes_url}">PDF</a> or
-<a href="dirbytes.svg${dirbytes_url}">SVG</a>.</p>
-<p><a href="stats/bandwidth.csv">CSV</a> file containing all data.</p>
-<br>
-
-<a name="advbwdist-perc"></a>
-<h3><a href="#advbwdist-perc" class="anchor">Advertised bandwidth
-distribution</a></h3>
-<br>
-<p>The following graph shows the distribution of advertised bandwidth in
-the network. In contrast to the graphs above, the following graph contains
-no sums of advertised bandwidths, but bandwidths of single relays.</p>
-<img src="advbwdist-perc.png${advbwdist_perc_url}"
- width="576" height="360"
- alt="Advertised bandwidth distribution graph">
-<form action="network.html#advbwdist-perc">
- <div class="formrow">
- <input type="hidden" name="graph" value="advbwdist-perc">
- <p>
- <label>Start date (yyyy-mm-dd):</label>
- <input type="text" name="start" size="10"
- value="<c:choose><c:when test="${fn:length(advbwdist_perc_start) == 0}">${default_start_date}</c:when><c:otherwise>${advbwdist_perc_start[0]}</c:otherwise></c:choose>">
- <label>End date (yyyy-mm-dd):</label>
- <input type="text" name="end" size="10"
- value="<c:choose><c:when test="${fn:length(advbwdist_perc_end) == 0}">${default_end_date}</c:when><c:otherwise>${advbwdist_perc_end[0]}</c:otherwise></c:choose>">
- </p><p>
- <label>Percentiles: </label>
- <input type="checkbox" name="p" value="100"<c:if test="${fn:length(advbwdist_perc_p) == 0 or fn:contains(fn:join(advbwdist_perc_p, ','), '100')}"> checked</c:if>> 100 (maximum)
- <input type="checkbox" name="p" value="99"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '99')}"> checked</c:if>> 99
- <input type="checkbox" name="p" value="98"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '98')}"> checked</c:if>> 98
- <input type="checkbox" name="p" value="97"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '97')}"> checked</c:if>> 97
- <input type="checkbox" name="p" value="95"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '95')}"> checked</c:if>> 95
- <input type="checkbox" name="p" value="91"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '91')}"> checked</c:if>> 91
- <input type="checkbox" name="p" value="90"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '90')}"> checked</c:if>> 90
- <input type="checkbox" name="p" value="80"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '80')}"> checked</c:if>> 80
- <input type="checkbox" name="p" value="75"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '75')}"> checked</c:if>> 75 (3rd quartile)
- <input type="checkbox" name="p" value="70"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '70')}"> checked</c:if>> 70
- <input type="checkbox" name="p" value="60"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '60')}"> checked</c:if>> 60
- <input type="checkbox" name="p" value="50"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '50')}"> checked</c:if>> 50 (median)
- <input type="checkbox" name="p" value="40"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '40')}"> checked</c:if>> 40
- <input type="checkbox" name="p" value="30"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '30')}"> checked</c:if>> 30
- <input type="checkbox" name="p" value="25"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '25')}"> checked</c:if>> 25 (first quartile)
- <input type="checkbox" name="p" value="20"<c:if test="${fn:length(advbwdist_perc_p) > 0 and fn:contains(fn:join(advbwdist_perc_p, ','), '20')}"> checked</c:if>> 20
- <input type="checkbox" name="p" value="10"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '10,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',10,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',10') or (advbwdist_perc_p[0] == '10' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 10
- <input type="checkbox" name="p" value="9"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '9,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',9,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',9') or (advbwdist_perc_p[0] == '9' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 9
- <input type="checkbox" name="p" value="5"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '5,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',5,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',5') or (advbwdist_perc_p[0] == '5' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 5
- <input type="checkbox" name="p" value="3"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '3,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',3,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',3') or (advbwdist_perc_p[0] == '3' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 3
- <input type="checkbox" name="p" value="2"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '2,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',2,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',2') or (advbwdist_perc_p[0] == '2' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 2
- <input type="checkbox" name="p" value="1"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '1,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',1,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',1') or (advbwdist_perc_p[0] == '1' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 1
- <input type="checkbox" name="p" value="0"<c:if test="${fn:length(advbwdist_perc_p) > 0 and (fn:startsWith(fn:join(advbwdist_perc_p, ','), '0,') or fn:contains(fn:join(advbwdist_perc_p, ','), ',0,') or fn:endsWith(fn:join(advbwdist_perc_p, ','), ',0') or (advbwdist_perc_p[0] == '0' and fn:length(advbwdist_perc_p) == 1))}"> checked</c:if>> 0 (minimum)
- </p><p>
- <input class="submit" type="submit" value="Update graph">
- </p>
- </div>
-</form>
-<p>Download graph as
-<a href="advbwdist-perc.pdf${advbwdist_perc_url}">PDF</a> or
-<a href="advbwdist-perc.svg${advbwdist_perc_url}">SVG</a>.</p>
-<p><a href="stats/advbwdist.csv">CSV</a> file containing all data.</p>
-<br>
-
-<a name="advbwdist-relay"></a>
-<h3><a href="#advbwdist-relay" class="anchor">Advertised bandwidth of
-n-th fastest relays</a></h3>
-<br>
-<p>The following graph shows the advertised bandwidth of the n-th fastest
-relays in the network.</p>
-<img src="advbwdist-relay.png${advbwdist_relay_url}"
- width="576" height="360"
- alt="Advertised bandwidth of n-th fastest relays graph">
-<form action="network.html#advbwdist-relay">
- <div class="formrow">
- <input type="hidden" name="graph" value="advbwdist-relay">
- <p>
- <label>Start date (yyyy-mm-dd):</label>
- <input type="text" name="start" size="10"
- value="<c:choose><c:when test="${fn:length(advbwdist_relay_start) == 0}">${default_start_date}</c:when><c:otherwise>${advbwdist_relay_start[0]}</c:otherwise></c:choose>">
- <label>End date (yyyy-mm-dd):</label>
- <input type="text" name="end" size="10"
- value="<c:choose><c:when test="${fn:length(advbwdist_relay_end) == 0}">${default_end_date}</c:when><c:otherwise>${advbwdist_relay_end[0]}</c:otherwise></c:choose>">
- </p><p>
- <label>n-th fastest relays: </label>
- <input type="checkbox" name="n" value="1"<c:if test="${fn:length(advbwdist_relay_n) == 0 or fn:contains(fn:join(advbwdist_relay_n, ','), '1,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '1')}"> checked</c:if>> 1
- <input type="checkbox" name="n" value="2"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '2,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '2'))}"> checked</c:if>> 2
- <input type="checkbox" name="n" value="3"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '3,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '3'))}"> checked</c:if>> 3
- <input type="checkbox" name="n" value="5"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '5,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '5'))}"> checked</c:if>> 5
- <input type="checkbox" name="n" value="10"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '10,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '10'))}"> checked</c:if>> 10
- <input type="checkbox" name="n" value="20"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '20,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '20'))}"> checked</c:if>> 20
- <input type="checkbox" name="n" value="30"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '30,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '30'))}"> checked</c:if>> 30
- <input type="checkbox" name="n" value="50"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '50,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '50'))}"> checked</c:if>> 50
- <input type="checkbox" name="n" value="100"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '100,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '100'))}"> checked</c:if>> 100
- <input type="checkbox" name="n" value="200"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '200,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '200'))}"> checked</c:if>> 200
- <input type="checkbox" name="n" value="300"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '300,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '300'))}"> checked</c:if>> 300
- <input type="checkbox" name="n" value="500"<c:if test="${fn:length(advbwdist_relay_n) > 0 and (fn:contains(fn:join(advbwdist_relay_n, ','), '500,') or fn:endsWith(fn:join(advbwdist_relay_n, ','), '500'))}"> checked</c:if>> 500
- <input type="checkbox" name="n" value="1000"<c:if test="${fn:length(advbwdist_relay_n) > 0 and fn:contains(fn:join(advbwdist_relay_n, ','), '1000')}"> checked</c:if>> 1000
- <input type="checkbox" name="n" value="2000"<c:if test="${fn:length(advbwdist_relay_n) > 0 and fn:contains(fn:join(advbwdist_relay_n, ','), '2000')}"> checked</c:if>> 2000
- <input type="checkbox" name="n" value="3000"<c:if test="${fn:length(advbwdist_relay_n) > 0 and fn:contains(fn:join(advbwdist_relay_n, ','), '3000')}"> checked</c:if>> 3000
- <input type="checkbox" name="n" value="5000"<c:if test="${fn:length(advbwdist_relay_n) > 0 and fn:contains(fn:join(advbwdist_relay_n, ','), '5000')}"> checked</c:if>> 5000
- </p><p>
- <input class="submit" type="submit" value="Update graph">
- </p>
- </div>
-</form>
-<p>Download graph as
-<a href="advbwdist-relay.pdf${advbwdist_relay_url}">PDF</a> or
-<a href="advbwdist-relay.svg${advbwdist_relay_url}">SVG</a>.</p>
-<p><a href="stats/advbwdist.csv">CSV</a> file containing all data.</p>
-<br>
</div>
</div>
<div class="bottom" id="bottom">
1
0

[metrics-web/master] Rewrite homepage text by focusing on graphs.
by karsten@torproject.org 26 Jun '14
by karsten@torproject.org 26 Jun '14
26 Jun '14
commit 9ead86bf0d8c929f4777cb6edacf2a64beab2929
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jun 26 15:57:40 2014 +0200
Rewrite homepage text by focusing on graphs.
---
website/web/WEB-INF/index.jsp | 45 ++++++++++++++++++++++++-----------------
1 file changed, 26 insertions(+), 19 deletions(-)
diff --git a/website/web/WEB-INF/index.jsp b/website/web/WEB-INF/index.jsp
index a563cf5..95b10ac 100644
--- a/website/web/WEB-INF/index.jsp
+++ b/website/web/WEB-INF/index.jsp
@@ -12,25 +12,32 @@
<div class="main-column">
<h2>Tor Metrics</h2>
<br>
- <p>Tor Metrics aggregates all kinds of interesting
- data about the Tor network and visualizes them in graphs and
- reports. This also provides easy access to the underlying
- data and documentation for performing own analyses based on these
- data. Find out more here:</p>
- <ul>
- <li>View daily updated <a href="graphs.html">graphs</a> on
- estimated client numbers, on network performance, and other
- statistics on the Tor network</li>
- <li>Read <a href="http://freehaven.net/anonbib/">papers</a> and
- <a href="https://research.torproject.org/techreports.html">technical
- reports</a>
- on the measurement techniques and results of statistical
- analysis of metrics data</li>
- <li>Download the <a href="data.html">data</a> that is behind the
- graphs and reports to make your own evaluations</li>
- <li>Try out the <a href="tools.html">tools</a> to parse and
- evaluate the metrics data</li>
- </ul>
+ <p>Welcome to Tor Metrics, the primary place to learn interesting
+ facts about the Tor network, the largest deployed anonymity
+ network to date.
+ If something can be measured safely, you'll find it here.*</p>
+ <p><small>*And if you come across something that is missing here,
+ please let us know.</small></p>
+
+ <a href="network.html"><h3>Servers</h3></a>
+ <p>How many relays and bridges are in the network?
+ How many of them permit exiting?</p>
+
+ <a href="bandwidth.html"><h3>Bandwidth</h3></a>
+ <p>How much bandwidth do relays advertise?
+ And how much of that is actually consumed?</p>
+
+ <a href="bubbles.html"><h3>Diversity</h3></a>
+ <p>How diverse is the network?
+ In which countries are relays located?</p>
+
+ <a href="users.html"><h3>Users</h3></a>
+ <p>Where do users come from?
+ What transports and IP versions are they using?</p>
+
+ <a href="performance.html"><h3>Performance</h3></a>
+ <p>How long does it take to download a megabyte of data over Tor?
+ How about five?</p>
</div>
</div>
<div class="bottom" id="bottom">
1
0

[metrics-web/master] Rename Tor Metrics Portal to just Tor Metrics.
by karsten@torproject.org 26 Jun '14
by karsten@torproject.org 26 Jun '14
26 Jun '14
commit 245bc7da3d0cb4b53f10d9fcf8589d54bd4348c0
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jun 26 14:28:16 2014 +0200
Rename Tor Metrics Portal to just Tor Metrics.
---
website/web/WEB-INF/bubbles.jsp | 2 +-
website/web/WEB-INF/data.jsp | 4 ++--
website/web/WEB-INF/dir.jsp | 4 ++--
website/web/WEB-INF/error.jsp | 4 ++--
website/web/WEB-INF/formats.jsp | 4 ++--
website/web/WEB-INF/graphs.jsp | 4 ++--
website/web/WEB-INF/index.jsp | 8 ++++----
website/web/WEB-INF/network.jsp | 4 ++--
website/web/WEB-INF/papers.jsp | 4 ++--
website/web/WEB-INF/performance.jsp | 4 ++--
website/web/WEB-INF/relay-search.jsp | 4 ++--
website/web/WEB-INF/research.jsp | 4 ++--
website/web/WEB-INF/stats.jsp | 6 +++---
website/web/WEB-INF/status.jsp | 4 ++--
website/web/WEB-INF/tools.jsp | 4 ++--
website/web/WEB-INF/users.jsp | 4 ++--
16 files changed, 34 insertions(+), 34 deletions(-)
diff --git a/website/web/WEB-INF/bubbles.jsp b/website/web/WEB-INF/bubbles.jsp
index 59b3025..5e65d16 100644
--- a/website/web/WEB-INF/bubbles.jsp
+++ b/website/web/WEB-INF/bubbles.jsp
@@ -2,7 +2,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Network bubble graphs</title>
+ <title>Tor Metrics: Network bubble graphs</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
diff --git a/website/web/WEB-INF/data.jsp b/website/web/WEB-INF/data.jsp
index 0981201..1828c03 100644
--- a/website/web/WEB-INF/data.jsp
+++ b/website/web/WEB-INF/data.jsp
@@ -4,7 +4,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Data</title>
+ <title>Tor Metrics: Data</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -13,7 +13,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal: Data</h2>
+ <h2>Tor Metrics: Data</h2>
<br>
<p><font color="red"><b>Notice:</b> The files linked on this site
are now available on:
diff --git a/website/web/WEB-INF/dir.jsp b/website/web/WEB-INF/dir.jsp
index 1ac1819..ac4aca3 100644
--- a/website/web/WEB-INF/dir.jsp
+++ b/website/web/WEB-INF/dir.jsp
@@ -2,7 +2,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Index of ${directory}</title>
+ <title>Tor Metrics: Index of ${directory}</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -11,7 +11,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal: Index of ${directory}</h2>
+ <h2>Tor Metrics: Index of ${directory}</h2>
<br>
<c:forEach var="file" items="${files}" >
<a href="${directory}/${file}${extension}">${file}${extension}</a><br>
diff --git a/website/web/WEB-INF/error.jsp b/website/web/WEB-INF/error.jsp
index 80ef077..79ac86e 100644
--- a/website/web/WEB-INF/error.jsp
+++ b/website/web/WEB-INF/error.jsp
@@ -3,7 +3,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Error</title>
+ <title>Tor Metrics: Error</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -12,7 +12,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
-<h2>Tor Metrics Portal: Error</h2>
+<h2>Tor Metrics: Error</h2>
<br>
<p>
Oops! Something went wrong here! We encountered a
diff --git a/website/web/WEB-INF/formats.jsp b/website/web/WEB-INF/formats.jsp
index ea0c3a2..92fd699 100644
--- a/website/web/WEB-INF/formats.jsp
+++ b/website/web/WEB-INF/formats.jsp
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Data Formats</title>
+ <title>Tor Metrics: Data Formats</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -10,7 +10,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
-<h2>Tor Metrics Portal: Data Formats</h2>
+<h2>Tor Metrics: Data Formats</h2>
<br>
<p><font color="red"><b>Notice:</b> The file formats explained on this
diff --git a/website/web/WEB-INF/graphs.jsp b/website/web/WEB-INF/graphs.jsp
index 58c122c..084d085 100644
--- a/website/web/WEB-INF/graphs.jsp
+++ b/website/web/WEB-INF/graphs.jsp
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Graphs</title>
+ <title>Tor Metrics: Graphs</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -10,7 +10,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal: Graphs</h2>
+ <h2>Tor Metrics: Graphs</h2>
<br>
<p>The graphs on this page visualize a small portion of the data
gathered in the Tor Metrics Project. The following graphs are
diff --git a/website/web/WEB-INF/index.jsp b/website/web/WEB-INF/index.jsp
index 9accc2b..a563cf5 100644
--- a/website/web/WEB-INF/index.jsp
+++ b/website/web/WEB-INF/index.jsp
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal</title>
+ <title>Tor Metrics</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -10,11 +10,11 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal</h2>
+ <h2>Tor Metrics</h2>
<br>
- <p>The Tor Metrics Portal aggregates all kinds of interesting
+ <p>Tor Metrics aggregates all kinds of interesting
data about the Tor network and visualizes them in graphs and
- reports. This portal also provides easy access to the underlying
+ reports. This also provides easy access to the underlying
data and documentation for performing own analyses based on these
data. Find out more here:</p>
<ul>
diff --git a/website/web/WEB-INF/network.jsp b/website/web/WEB-INF/network.jsp
index 66b878f..c291bb3 100644
--- a/website/web/WEB-INF/network.jsp
+++ b/website/web/WEB-INF/network.jsp
@@ -4,7 +4,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Network</title>
+ <title>Tor Metrics: Network</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -13,7 +13,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
-<h2>Tor Metrics Portal: Network</h2>
+<h2>Tor Metrics: Network</h2>
<br>
<a name="networksize"></a>
<h3><a href="#networksize" class="anchor">Relays and bridges in the
diff --git a/website/web/WEB-INF/papers.jsp b/website/web/WEB-INF/papers.jsp
index 1a48491..a9a8d04 100644
--- a/website/web/WEB-INF/papers.jsp
+++ b/website/web/WEB-INF/papers.jsp
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Papers</title>
+ <title>Tor Metrics: Papers</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -10,7 +10,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal: Papers</h2>
+ <h2>Tor Metrics: Papers</h2>
<br>
<p>The <a href="#papers">papers</a>,
<a href="#techreports">technical reports</a>, and
diff --git a/website/web/WEB-INF/performance.jsp b/website/web/WEB-INF/performance.jsp
index e220b59..4a87a55 100644
--- a/website/web/WEB-INF/performance.jsp
+++ b/website/web/WEB-INF/performance.jsp
@@ -3,7 +3,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Performance</title>
+ <title>Tor Metrics: Performance</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -12,7 +12,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
-<h2>Tor Metrics Portal: Performance</h2>
+<h2>Tor Metrics: Performance</h2>
<br>
<a name="torperf"></a>
<h3><a href="#torperf" class="anchor">Time to download files over
diff --git a/website/web/WEB-INF/relay-search.jsp b/website/web/WEB-INF/relay-search.jsp
index 90b7512..7f15a3c 100644
--- a/website/web/WEB-INF/relay-search.jsp
+++ b/website/web/WEB-INF/relay-search.jsp
@@ -3,7 +3,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Relay Search</title>
+ <title>Tor Metrics: Relay Search</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -12,7 +12,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal: Relay Search</h2>
+ <h2>Tor Metrics: Relay Search</h2>
<p><font color="red">Sorry, this service has been shut down
on June 10, 2014. Possible alternatives are
<a href="https://atlas.torproject.org">Atlas</a> and
diff --git a/website/web/WEB-INF/research.jsp b/website/web/WEB-INF/research.jsp
index b0a7277..c203619 100644
--- a/website/web/WEB-INF/research.jsp
+++ b/website/web/WEB-INF/research.jsp
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Research</title>
+ <title>Tor Metrics: Research</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -10,7 +10,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal: Research</h2>
+ <h2>Tor Metrics: Research</h2>
<br>
<p>The Tor Metrics Project aims at supporting privacy enhancing
technologies research by making gathered network
diff --git a/website/web/WEB-INF/stats.jsp b/website/web/WEB-INF/stats.jsp
index 4e6c9fb..d708910 100644
--- a/website/web/WEB-INF/stats.jsp
+++ b/website/web/WEB-INF/stats.jsp
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Statistics</title>
+ <title>Tor Metrics: Statistics</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -10,10 +10,10 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
-<h2>Tor Metrics Portal: Statistics</h2>
+<h2>Tor Metrics: Statistics</h2>
<br>
-<p>The metrics portal aggregates large amounts of Tor network
+<p>Tor Metrics aggregates large amounts of Tor network
<a href="data.html">data</a> and visualizes results in customizable
<a href="graphs.html">graphs</a> and tables.
All aggregated data are also available for download, so that people can
diff --git a/website/web/WEB-INF/status.jsp b/website/web/WEB-INF/status.jsp
index 0187c82..5142b7f 100644
--- a/website/web/WEB-INF/status.jsp
+++ b/website/web/WEB-INF/status.jsp
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Status</title>
+ <title>Tor Metrics: Status</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -10,7 +10,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal: Status</h2>
+ <h2>Tor Metrics: Status</h2>
<br>
<p>The network data collected by the Tor Metrics Project can be
used to analyze the Tor network status from a few years ago until
diff --git a/website/web/WEB-INF/tools.jsp b/website/web/WEB-INF/tools.jsp
index b6754d5..0e1a5fc 100644
--- a/website/web/WEB-INF/tools.jsp
+++ b/website/web/WEB-INF/tools.jsp
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Tools</title>
+ <title>Tor Metrics: Tools</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -10,7 +10,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
- <h2>Tor Metrics Portal: Tools</h2>
+ <h2>Tor Metrics: Tools</h2>
<br>
<p><font color="red"><b>Notice:</b> The tools listed on this site
are now available on:
diff --git a/website/web/WEB-INF/users.jsp b/website/web/WEB-INF/users.jsp
index 91f8ca2..84cab43 100644
--- a/website/web/WEB-INF/users.jsp
+++ b/website/web/WEB-INF/users.jsp
@@ -4,7 +4,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
- <title>Tor Metrics Portal: Users</title>
+ <title>Tor Metrics: Users</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link href="/css/stylesheet-ltr.css" type="text/css" rel="stylesheet">
<link href="/images/favicon.ico" type="image/x-icon" rel="shortcut icon">
@@ -13,7 +13,7 @@
<div class="center">
<%@ include file="banner.jsp"%>
<div class="main-column">
-<h2>Tor Metrics Portal: Users</h2>
+<h2>Tor Metrics: Users</h2>
<br>
<a name="userstats-relay-country"></a>
1
0

[metrics-web/master] Move contents from Statistics page to text file.
by karsten@torproject.org 26 Jun '14
by karsten@torproject.org 26 Jun '14
26 Jun '14
commit 84336ccac18d3a6347d5768e067ca5d9719d917e
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jun 26 16:06:18 2014 +0200
Move contents from Statistics page to text file.
The Statistics page is more like a spec, and it's likely only interesting
for 5% of visitors. Let's not overwhelm the remaining 95% with something
they don't care about.
---
doc/stats-spec.txt | 264 ++++++++++++++++++++++++++++++++++++++++
website/web/WEB-INF/banner.jsp | 3 -
website/web/WEB-INF/error.jsp | 1 -
website/web/WEB-INF/stats.jsp | 6 +
4 files changed, 270 insertions(+), 4 deletions(-)
diff --git a/doc/stats-spec.txt b/doc/stats-spec.txt
new file mode 100644
index 0000000..a0c45c3
--- /dev/null
+++ b/doc/stats-spec.txt
@@ -0,0 +1,264 @@
+Statistics produced by Tor Metrics
+==================================
+
+Tor Metrics aggregates large amounts of Tor network data and visualizes
+results in customizable graphs and tables. All aggregated data are also
+available for download, so that people can easily plot their own graphs or
+even develop a prettier metrics website without writing their own data
+aggregation code. Data formats of aggregate statistics are specified
+below.
+
+Statistics files are available for download at:
+
+ https://metrics.torproject.org/stats/
+
+
+Number of relays and bridges
+----------------------------
+
+Statistics file servers.csv contains the average number of relays and
+bridges in the Tor network. All averages are calculated per day by
+evaluating the relay and bridge lists published by the directory
+authorities. Statistics include subsets of relays or bridges by relay
+flag (only relays), country code (only relays, only until February 2013),
+Tor software version (only relays), operating system (only relays), and
+EC2 cloud (only bridges). The statistics file contains the following
+columns:
+
+ - date: UTC date (YYYY-MM-DD) when relays or bridges have been listed as
+ running.
+
+ - flag: Relay flag assigned by the directory authorities. Examples are
+ "Exit", "Guard", "Fast", "Stable", and "HSDir". Relays can have none,
+ some, or all these relay flags assigned. Relays that don't have the
+ "Running" flag are not included in these statistics regardless of their
+ other flags. If this column contains the empty string, all running
+ relays are included, regardless of assigned flags. There are no
+ statistics on the number of bridges by relay flag.
+
+ - country: Two-letter lower-case country code as found in a GeoIP
+ database by resolving the relay's first onion-routing IP address, or
+ "??" if an IP addresses could not be resolved. If this column contains
+ the empty string, all running relays are included, regardless of their
+ resolved country code. Statistics on relays by country code are only
+ available until January 31, 2013. There are no statistics on the
+ number of bridges by country code.
+
+ - version: First three dotted numbers of the Tor software version as
+ reported by the relay. An example is "0.2.5". If this column contains
+ the empty string, all running relays are included, regardless of the
+ Tor software version they run. There are no statistics on the number
+ of bridges by Tor software version.
+
+ - platform: Operating system as reported by the relay. Examples are
+ "Linux", "Darwin" (Mac OS X), "FreeBSD", "Windows", and "Other". If
+ this column contains the empty string, all running relays are included,
+ regardless of the operating system they run on. There are no
+ statistics on the number of bridges by operating system.
+
+ - ec2bridge: Whether bridges are running in the EC2 cloud or not. More
+ precisely, bridges in the EC2 cloud running an image provided by Tor by
+ default set their nickname to "ec2bridger" plus 8 random hex
+ characters. This column either contains "t" for bridges matching this
+ naming scheme, or the empty string for all bridges regardless of their
+ nickname. There are no statistics on the number of relays running in
+ the EC2 cloud.
+
+ - relays: The average number of relays matching the criteria in the
+ previous columns. If the values in previous columns are specific to
+ bridges only, this column contains the empty string.
+
+ - bridges: The average number of bridges matching the criteria in the
+ previous columns. If the values in previous columns are specific to
+ relays only, this column contains the empty string.
+
+
+Bandwidth provided and consumed by relays
+-----------------------------------------
+
+Statistics on bandwidth provided and consumed by relays are contained in
+file bandwidth.csv. This file contains three different bandwidth metrics:
+(1) bandwidth that relays are capable to provide and bandwidth that relays
+report to have consumed, either (2) for any traffic, or (3) only traffic
+from serving directory data. Relays providing bandwidth statistics are
+categorized by having the "Exit" and "Guard" relay flag, having both, or
+not having either. The statistics file contains the following columns:
+
+ - date: UTC date (YYYY-MM-DD) that relays reported bandwidth data for.
+
+ - isexit: Whether relays included in this line have the "Exit" relay flag
+ or not, which can be "t" or "f". If this column contains the empty
+ string, bandwidth data from all running relays are included, regardless
+ of assigned relay flags.
+
+ - isguard: Whether relays included in this line have the "Guard" relay
+ flag or not, which can be "t" or "f". If this column contains the
+ empty string, bandwidth data from all running relays are included,
+ regardless of assigned relay flags.
+
+ - advbw: Total advertised bandwidth in bytes per second that relays are
+ capable to provide.
+
+ - bwread: Total bandwidth in bytes per second that relays have read.
+ This metric includes any kind of traffic.
+
+ - bwwrite: Similar to bwread, but for traffic written by relays.
+
+ - dirread: Bandwidth in bytes per second that relays have read when
+ serving directory data. Not all relays report how many bytes they read
+ when serving directory data which is why this value is an estimate from
+ the available data. This metric is not available for subsets of relays
+ with certain relay flags, so that this column will contain the empty
+ string if either isexit or isguard is non-empty.
+
+ - dirwrite: Similar to dirread, but for traffic written by relays when
+ serving directory data.
+
+
+Advertised bandwidth distribution and n-th fastest relays
+---------------------------------------------------------
+
+Statistics file advbwdist.csv contains statistics on the advertised
+bandwidth of relays in the network. These statistics include advertised
+bandwidth percentiles and advertised bandwidth values of the n-th fastest
+relays. The statistics file contains the following columns:
+
+ - date: UTC date (YYYY-MM-DD) when relays have been listed as running.
+
+ - isexit: Whether relays included in this line have the "Exit" relay
+ flag, which would be indicated as "t". If this column contains the
+ empty string, advertised bandwidths from all running relays are
+ included, regardless of assigned relay flags.
+
+ - relay: Position of the relay in an ordered list of all advertised
+ bandwidths, starting at 1 for the fastest relay in the network. May be
+ the empty string if this line contains advertised bandwidth by
+ percentile.
+
+ - percentile: Advertised bandwidth percentile given in this line. May be
+ the empty string if this line contains advertised bandwidth by fastest
+ relays.
+
+ - advbw: Advertised bandwidth in B/s.
+
+
+Estimated number of clients in the Tor network
+----------------------------------------------
+
+Statistics file clients.csv contains estimates on the number of clients in
+the Tor network. These estimates are based on the number of directory
+requests counted on directory mirrors and bridges. Statistics are
+available for clients connecting directly to the Tor network and clients
+connecting via bridges. For relays, there exist statistics on the number
+of clients by country, and for bridges, statistics are available by
+country, by transport, and by IP version. Statistics further include
+expected client numbers from past observations which can be used to detect
+censorship or release of censorship. The statistics file contains the
+following columns:
+
+ - date: UTC date (YYYY-MM-DD) for which client numbers are estimated.
+
+ - node: The node type to which clients connect first, which can be either
+ "relay" or "bridge".
+
+ - country: Two-letter lower-case country code as found in a GeoIP
+ database by resolving clients' IP addresses, or "??" if client IP
+ addresses could not be resolved. If this column contains the empty
+ string, all clients are included, regardless of their country code.
+
+ - transport: Transport name used by clients to connect to the Tor network
+ using bridges. Examples are "obfs2", "obfs3", "websocket", or "<OR>"
+ (original onion routing protocol). If this column contains the empty
+ string, all clients are included, regardless of their transport. There
+ are no statistics on the number of clients by transport that connect to
+ the Tor network via relays.
+
+ - version: IP version used by clients to connect to the Tor network using
+ bridges. Examples are "v4" and "v6". If this column contains the
+ empty string, all clients are included, regardless of their IP version.
+ There are no statistics on the number of clients by IP version that
+ connect directly to the Tor network using relays.
+
+ - lower: Lower number of expected clients under the assumption that there
+ has been no censorship event. If this column contains the empty
+ string, there are no expectations on the number of clients.
+
+ - upper: Upper number of expected clients under the assumption that there
+ has been no release of censorship. If this column contains the empty
+ string, there are no expectations on the number of clients.
+
+ - clients: Estimated number of clients.
+
+ - frac: Fraction of relays or bridges in percent that the estimate is
+ based on. The higher this value, the more reliable is the estimate.
+ Values above 50 can be considered reliable enough for most purposes,
+ lower values should be handled with more care.
+
+
+Performance of downloading static files over Tor
+------------------------------------------------
+
+Statistics file torperf.csv contains aggregate statistics on download
+performance over time. These statistics come from the Torperf service
+that periodically downloads static files over Tor. The statistics file
+contains the following columns:
+
+ - date: UTC date (YYYY-MM-DD) when download performance was measured.
+
+ - size: Size of the downloaded file in bytes.
+
+ - source: Name of the Torperf service performing measurements. If this
+ column contains the empty string, all measurements are included,
+ regardless of which Torperf service performed them. Examples are
+ "moria", "siv", and "torperf".
+
+ - q1: First quartile of time until receiving the last byte in
+ milliseconds.
+
+ - md: Median of time until receiving the last byte in milliseconds.
+
+ - q3: Third quartile of time until receiving the last byte in
+ milliseconds.
+
+ - timeouts: Number of timeouts that occurred when attempting to download
+ the static file over Tor.
+
+ - failures: Number of failures that occurred when attempting to download
+ the static file over Tor.
+
+ - requests: Total number of requests made to download the static file
+ over Tor.
+
+
+Fraction of connections used uni-/bidirectionally
+-------------------------------------------------
+
+Statistics file connbidirect.csv contains statistics on the fraction of
+connections that is used uni- or bidirectionally. Every 10 seconds,
+relays determine for every connection whether they read and wrote less
+than a threshold of 20 KiB. For the remaining connections, relays report
+whether they read/wrote at least 10 times as many bytes as they
+wrote/read. If so, they classify a connection as "mostly reading" or
+"mostly writing," respectively. All other connections are classified as
+"both reading and writing." After classifying connections, read and write
+counters are reset for the next 10-second interval. Statistics are
+aggregated over 24 hours. The statistics file contains the following
+columns:
+
+ - date: UTC date (YYYY-MM-DD) for which statistics on uni-/bidirectional
+ connection usage were reported.
+
+ - source: Fingerprint of the relay reporting statistics.
+
+ - below: Number of 10-second intervals of connections with less than
+ 20 KiB read and written data.
+
+ - read: Number of 10-second intervals of connections with 10 times as
+ many read bytes as written bytes.
+
+ - write: Number of 10-second intervals of connections with 10 times as
+ many written bytes as read bytes.
+
+ - both: Number of 10-second intervals of connections with less than
+ 10 times as many written or read bytes as in the other direction.
+
diff --git a/website/web/WEB-INF/banner.jsp b/website/web/WEB-INF/banner.jsp
index 2b27632..3a3cf5d 100644
--- a/website/web/WEB-INF/banner.jsp
+++ b/website/web/WEB-INF/banner.jsp
@@ -20,9 +20,6 @@
<a <% if (currentPage.endsWith("performance.jsp")) {
%>class="current"<%} else {%>href="/performance.html"<%}
%>>Performance</a>
- <a <% if (currentPage.endsWith("stats.jsp")) {
- %>class="current"<%} else {%>href="/stats.html"<%}
- %>>Statistics</a>
</td>
<td class="banner-right"></td>
</tr>
diff --git a/website/web/WEB-INF/error.jsp b/website/web/WEB-INF/error.jsp
index e6f1e71..bd6d442 100644
--- a/website/web/WEB-INF/error.jsp
+++ b/website/web/WEB-INF/error.jsp
@@ -46,7 +46,6 @@ Maybe you find what you're looking for on our sitemap:
<li><a href="bubbles.html">Diversity</a></li>
<li><a href="users.html">Users</a></li>
<li><a href="performance.html">Performance</a></li>
-<li><a href="stats.html">Statistics</a></li>
</ul>
</p>
diff --git a/website/web/WEB-INF/stats.jsp b/website/web/WEB-INF/stats.jsp
index d708910..005235e 100644
--- a/website/web/WEB-INF/stats.jsp
+++ b/website/web/WEB-INF/stats.jsp
@@ -13,6 +13,12 @@
<h2>Tor Metrics: Statistics</h2>
<br>
+<p><font color="red"><b>Notice:</b> The specification on this page has
+moved
+<a href="https://gitweb.torproject.org/metrics-web.git/blob/HEAD:/doc/stats-spec.txt">here</a>.
+This page will be removed after July 26, 2014.</font>
+</p>
+
<p>Tor Metrics aggregates large amounts of Tor network
<a href="data.html">data</a> and visualizes results in customizable
<a href="graphs.html">graphs</a> and tables.
1
0