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
September 2018
- 17 participants
- 3230 discussions

26 Sep '18
commit 9f0cc38f82aacdfea3b7af16104082f7e09802e8
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Mon Aug 20 10:28:59 2018 +0200
Update ExoneraTor translations.
---
.../web/properties/ExoneraTor_de.properties | 18 ++++++++++--------
.../web/properties/ExoneraTor_fr.properties | 22 ++++++++++++----------
.../web/properties/ExoneraTor_ro.properties | 14 ++++++++------
.../web/properties/ExoneraTor_sv.properties | 18 ++++++++++--------
4 files changed, 40 insertions(+), 32 deletions(-)
diff --git a/src/main/resources/web/properties/ExoneraTor_de.properties b/src/main/resources/web/properties/ExoneraTor_de.properties
index d830e31..fbe8464 100644
--- a/src/main/resources/web/properties/ExoneraTor_de.properties
+++ b/src/main/resources/web/properties/ExoneraTor_de.properties
@@ -4,14 +4,14 @@ form.timestamp.label=Datum
form.search.label=Suchen
summary.heading=Zusammenfassung
summary.serverproblem.dbnoconnect.title=Server-Problem
-summary.serverproblem.dbnoconnect.body.text=Es kann keine Verbindung zur Datenbank hergestellt werden. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s.
+summary.serverproblem.dbnoconnect.body.text=Es kann keine Verbindung zur Datenbank hergestellt werden. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s!
summary.serverproblem.dbnoconnect.body.link=lassen Sie es uns bitte wissen
summary.serverproblem.dbempty.title=Server-Problem
-summary.serverproblem.dbempty.body.text=Die Datenbank scheint leer zu sein. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s.
+summary.serverproblem.dbempty.body.text=Die Datenbank scheint leer zu sein. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s!
summary.serverproblem.dbempty.body.link=lassen Sie es uns bitte wissen
summary.invalidparams.notimestamp.title=Kein Datum angegeben
summary.invalidparams.notimestamp.body=Sie m\u00fcssen ein Datum angeben.
-summary.invalidparams.noip.title=Keine IP-Adresse angegeben.
+summary.invalidparams.noip.title=Keine IP-Adresse angegeben
summary.invalidparams.noip.body=Sie m\u00fcssen eine IP-Adresse angeben.
summary.invalidparams.timestamprange.title=Datum au\u00dferhalb des zul\u00e4ssigen Bereichs
summary.invalidparams.timestamprange.body=Die Datenbank enth\u00e4lt keine Daten vom %s. Bitte w\u00e4hlen Sie ein Datum zwischen %s und %s aus.
@@ -19,8 +19,10 @@ summary.invalidparams.invalidip.title=Ung\u00fcltige IP-Adresse
summary.invalidparams.invalidip.body=%s ist keine g\u00fcltige IP-Adresse. Zul\u00e4ssige IP-Adress-Formate sind %s oder %s.
summary.invalidparams.invalidtimestamp.title=Ung\u00fcltiges Datum
summary.invalidparams.invalidtimestamp.body=%s ist kein g\u00fcltiges Datum. Das zul\u00e4ssige Datumsformat ist %s.
+summary.invalidparams.timestamptoorecent.title=Datumsparameter zu neu
+summary.invalidparams.timestamptoorecent.body=M\u00f6glicherweise enth\u00e4lt die Datenbank noch nicht gen\u00fcgend Daten, um diese Anfrage korrekt zu beantworten. Das letzte g\u00fcltige Datum ist vorgestern. Bitte wiederholen Sie Ihre Suche an einem anderen Tag.
summary.serverproblem.nodata.title=Server-Problem
-summary.serverproblem.nodata.body.text=Die Datenbank enth\u00e4lt keine Daten f\u00fcr das angegebene Datum. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s.
+summary.serverproblem.nodata.body.text=Die Datenbank enth\u00e4lt keine Daten f\u00fcr das angegebene Datum. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s!
summary.serverproblem.nodata.body.link=lassen Sie es uns bitte wissen
summary.negativesamenetwork.title=Keine \u00dcbereinstimmungen gefunden
summary.negativesamenetwork.body=Es wurde kein Tor-Server mit der IP-Adresse %s am %s bzw. am Tag vorher oder nachher gefunden. Es wurden jedoch benachbarte IP-Adressen im selben /%d-Netzwerk an diesen Tagen gefunden:
@@ -41,12 +43,12 @@ technicaldetails.exit.yes=Ja
technicaldetails.exit.no=Nein
permanentlink.heading=Dauerhafter Link
footer.abouttor.heading=\u00dcber Tor
-footer.abouttor.body.text=Tor ist ein internationales Softwareprojekt, um Internetverbindungen zu anonymisieren indem %s. Wenn Sie eine Internetverbindung sehen, die von einem Tor-Server kommt, stammt diese in der Regel von jemandem, der Tor benutzt, und nicht vom Betreiber des Tor-Servers selbst. Weder The Tor Project, Inc. noch die Tor-Server-Betreiber besitzen Aufzeichnungen \u00fcber die Internetverbindungen im Tor-Netzwerk und k\u00f6nnen daher keine Auskunft \u00fcber den Ursprung der Internetverbindung geben. Mehr Informationen \u00fcber Tor erhalten Sie %s. The Tor Project, Inc. steht Ihnen jederzeit f\u00fcr %s zur Verf\u00fcgung.
-footer.abouttor.body.link1=Datenpakete verschl\u00fcsselt und \u00fcber eine Reihe von Stationen geleitet werden, bevor diese ihr Ziel erreichen
+footer.abouttor.body.text=Tor ist ein internationales Softwareprojekt um Internetverbindungen zu anonymisieren indem %s. Wenn Sie eine Internetverbindung sehen, die von einem Tor-Server kommt, stammt diese in der Regel von jemandem, der Tor benutzt, und nicht vom Betreiber des Tor-Servers selbst. Weder The Tor Project, Inc. noch die Tor-Server-Betreiber besitzen Aufzeichnungen \u00fcber die Internetverbindungen im Tor-Netzwerk und k\u00f6nnen daher keine Auskunft \u00fcber den Ursprung der Internetverbindung geben. Mehr Informationen \u00fcber Tor erhalten Sie %s. The Tor Project, Inc. steht Ihnen jederzeit f\u00fcr %s zur Verf\u00fcgung.
+footer.abouttor.body.link1=Datenpakete verschl\u00fcsselt und \u00fcber eine Reihe von Stationen geleitet werden bevor diese ihr Ziel erreichen
footer.abouttor.body.link2=hier
footer.abouttor.body.link3=Fragen
footer.aboutexonerator.heading=\u00dcber ExoneraTor
-footer.aboutexonerator.body=Der ExoneraTor-Dienst basiert auf einer Datenbank von IP-Adressen, die Teil des Tor-Netzwerks sind oder waren. Dieser Dienst beantwortet die Frage, ob es an einem bestimmten Tag einen Tor-Server mit einer bestimmten IP-Adresse gegeben hat. ExoneraTor kann in einigen F\u00e4llen mehr als nur eine IP-Adresse pro Tor-Server ausgeben, falls ein Tor-Server verschiedene IP-Adressen f\u00fcr ausgehende Verbindungen und die Registrierung im Tor-Netzwerk verwendet hat. ExoneraTor speichert au\u00dferdem, ob ein Tor-Server Verbindungen ins offene Internet zugelassen hat oder nicht.
+footer.aboutexonerator.body=Der ExoneraTor-Dienst basiert auf einer Datenbank von IP-Adressen, die Teil des Tor-Netzwerks sind oder waren. Dieser Dienst beantwortet die Frage, ob es an einem bestimmten Tag einen Tor-Server mit einer bestimmten IP-Adresse gegeben hat. ExoneraTor kann in einigen F\u00e4llen mehr als nur eine IP-Adresse pro Tor-Server speichern, falls ein Tor-Server eine andere IP-Adresse f\u00fcr ausgehende Verbindungen verwendet hat als die IP-Adresse um sich im Tor-Netzwerk zu registrieren. ExoneraTor speichert au\u00dferdem ob ein Tor-Server Verbindungen ins offene Internet zugelassen hat oder nicht.
footer.language.name=Deutsch
-footer.language.text=Diese Seite gibt es auch in den folgenden Sprachen:
+footer.language.text=Diese Seite ist auch in den folgenden Sprachen verf\u00fcgbar:
diff --git a/src/main/resources/web/properties/ExoneraTor_fr.properties b/src/main/resources/web/properties/ExoneraTor_fr.properties
index 70d4d2f..93c33bb 100644
--- a/src/main/resources/web/properties/ExoneraTor_fr.properties
+++ b/src/main/resources/web/properties/ExoneraTor_fr.properties
@@ -1,13 +1,13 @@
-form.explanation=Saisir une adresse IP et une date afin de savoir si l'adresse a \u00e9t\u00e9 utilis\u00e9e comme relais Tor \:
+form.explanation=Saisir une adresse IP et une date afin de savoir si l'adresse a \u00e9t\u00e9 utilis\u00e9e comme relais Tor :
form.ip.label=Adresse IP
form.timestamp.label=Date
-form.search.label=Rechercher
+form.search.label=Chercher
summary.heading=R\u00e9sum\u00e9
summary.serverproblem.dbnoconnect.title=Probl\u00e8me de serveur
-summary.serverproblem.dbnoconnect.body.text=Impossible de se connecter \u00e0 la base de donn\u00e9es. Veuillez ressayer ult\u00e9rieurement. Si ce probl\u00e8me perdure, veuillez %s \!
+summary.serverproblem.dbnoconnect.body.text=Impossible de se connecter \u00e0 la base de donn\u00e9es. Veuillez ressayer ult\u00e9rieurement. Si ce probl\u00e8me perdure, veuillez %s !
summary.serverproblem.dbnoconnect.body.link=nous en informer
summary.serverproblem.dbempty.title=Probl\u00e8me de serveur
-summary.serverproblem.dbempty.body.text=La base de donn\u00e9es semble \u00eatre vide. Veuillez ressayer ult\u00e9rieurement. Si ce probl\u00e8me perdure, veuillez %s \!
+summary.serverproblem.dbempty.body.text=La base de donn\u00e9es semble \u00eatre vide. Veuillez ressayer ult\u00e9rieurement. Si ce probl\u00e8me perdure, veuillez %s !
summary.serverproblem.dbempty.body.link=nous en informer
summary.invalidparams.notimestamp.title=Aucune date n'a \u00e9t\u00e9 donn\u00e9e en param\u00e8tre
summary.invalidparams.notimestamp.body=D\u00e9sol\u00e9, vous devez aussi pr\u00e9ciser une date.
@@ -19,11 +19,13 @@ summary.invalidparams.invalidip.title=Adresse IP invalide
summary.invalidparams.invalidip.body=D\u00e9sol\u00e9, %s n'est pas une adresse IP valide. Les formats d'adresse IP attendus sont %s ou %s.
summary.invalidparams.invalidtimestamp.title=Date invalide
summary.invalidparams.invalidtimestamp.body=D\u00e9sol\u00e9, %s n'est pas une date valide. Le format de date attendu est %s.
+summary.invalidparams.timestamptoorecent.title=Le param\u00e8tre de date est trop r\u00e9cent
+summary.invalidparams.timestamptoorecent.body=La base de donn\u00e9es pourrait ne pas encore contenir suffisamment de donn\u00e9es pour r\u00e9pondre correctement \u00e0 cette requ\u00eate. Les derni\u00e8res donn\u00e9es accept\u00e9es datent d'avant-hier. Veuillez r\u00e9p\u00e9ter votre recherche dans un jour.
summary.serverproblem.nodata.title=Probl\u00e8me de serveur
-summary.serverproblem.nodata.body.text=La base de donn\u00e9es ne contient aucune donn\u00e9e pour la date demand\u00e9e. Veuillez ressayer ult\u00e9rieurement. Si le probl\u00e8me perdure, veuillez %s \!
+summary.serverproblem.nodata.body.text=La base de donn\u00e9es ne contient aucune donn\u00e9e pour la date demand\u00e9e. Veuillez ressayer ult\u00e9rieurement. Si le probl\u00e8me perdure, veuillez %s !
summary.serverproblem.nodata.body.link=nous en informer
summary.negativesamenetwork.title=R\u00e9sultat n\u00e9gatif
-summary.negativesamenetwork.body=Nous n'avons pas trouv\u00e9 l'adresse IP %s, le %s ou \u00e0 un jour pr\u00e8s. Mais nous avons trouv\u00e9 d'autres adresses IP de relais Tor dans le m\u00eame r\u00e9seau /%d aux alentours de cette date \:
+summary.negativesamenetwork.body=Nous n'avons pas trouv\u00e9 l'adresse IP %s, le %s ou \u00e0 un jour pr\u00e8s. Mais nous avons trouv\u00e9 d'autres adresses IP de relais Tor dans le m\u00eame r\u00e9seau /%d aux alentours de cette date :
summary.positive.title=R\u00e9sultat positif
summary.positive.body=Nous avons trouv\u00e9 un ou plusieurs relais Tor \u00e0 l'adresse IP %s probablement connus des clients Tor le %s ou \u00e0 un jour pr\u00e8s.
summary.negative.title=R\u00e9sultat n\u00e9gatif
@@ -31,7 +33,7 @@ summary.negative.body=Nous n'avons pas trouv\u00e9 l'adresse IP %s, le %s ou \u0
technicaldetails.heading=D\u00e9tails techniques
technicaldetails.pre=Recherche de l'adresse IP %s, le %s ou \u00e0 un jour pr\u00e8s. Des clients Tor pourraient avoir choisi ce ou ces relais Tor pour construire des circuits.
technicaldetails.colheader.timestamp=Date et heure (UTC)
-technicaldetails.colheader.ip=Adresse(s) IP
+technicaldetails.colheader.ip=Adresses IP
technicaldetails.colheader.fingerprint=Empreinte
technicaldetails.colheader.nickname=Pseudonyme
technicaldetails.colheader.exit=Relais de sortie
@@ -41,12 +43,12 @@ technicaldetails.exit.yes=Oui
technicaldetails.exit.no=Non
permanentlink.heading=Lien permanent
footer.abouttor.heading=\u00c0 propos de Tor
-footer.abouttor.body.text=Tor est un projet international d\u00e9veloppant des logiciels pour anonymiser le trafic Internet en %s. Par cons\u00e9quent, si vous voyez du trafic en provenance d'un relais Tor, ce trafic provient habituellement de quelqu'un qui utilise Tor, plut\u00f4t que de l'op\u00e9rateur du relais. Le projet Tor et les op\u00e9rateurs de relais Tor n'ont aucune trace du trafic relay\u00e9 par le r\u00e9seau et ne peuvent donc fournir aucune information sur son origine. N'h\u00e9sitez pas \u00e0 vous %s et n'h\u00e9sitez pas \u00e0 %s pour obtenir d'avantage d'informations.
+footer.abouttor.body.text=Tor est un projet international d\u00e9veloppant des logiciels pour anonymiser le trafic Internet en %s. Par cons\u00e9quent, si vous voyez du trafic en provenance d'un relais Tor, ce trafic provient habituellement de quelqu'un qui utilise Tor, plut\u00f4t que de l'op\u00e9rateur du relais. Le Projet Tor et les op\u00e9rateurs de relais Tor n'ont aucune trace du trafic relay\u00e9 par le r\u00e9seau et ne peuvent donc fournir aucune information sur son origine. N'h\u00e9sitez pas \u00e0 vous %s et n'h\u00e9sitez pas \u00e0 %s pour obtenir d'avantage d'informations.
footer.abouttor.body.link1=chiffrant les paquets et en les faisant transiter par une s\u00e9rie de relais avant qu'ils n'atteignent leur destination
footer.abouttor.body.link2=renseigner d'avantage au sujet de Tor
-footer.abouttor.body.link3=contacter \u00ab\u00a0The Tor Project, Inc.\u00a0\u00bb
+footer.abouttor.body.link3=contacter \u00ab The Tor Project, Inc. \u00bb
footer.aboutexonerator.heading=\u00c0 propos d'ExoneraTor
footer.aboutexonerator.body=Le service ExoneraTor g\u00e8re une base de donn\u00e9es d'adresses IP qui ont fait partie du r\u00e9seau Tor. Il permet de savoir si un relais Tor fonctionnait pour une adresse IP donn\u00e9e \u00e0 une date pr\u00e9cise. ExoneraTor peut enregistrer plus d'une adresse IP par relais si ces derniers utilisent une adresse IP diff\u00e9rente pour se connecter \u00e0 Internet de celle utilis\u00e9e pour s'enregistrer sur le r\u00e9seau Tor. ExoneraTor enregistre \u00e9galement les dates et heures auxquelles un relais a permis de faire transiter du trafic en provenance de Tor vers Internet.
footer.language.name=fran\u00e7ais
-footer.language.text=Cette page est aussi disponible dans les langues suivantes :
+footer.language.text=Cette page est \u00e9galement propos\u00e9e dans les langues suivantes :
diff --git a/src/main/resources/web/properties/ExoneraTor_ro.properties b/src/main/resources/web/properties/ExoneraTor_ro.properties
index 3663c06..3d58072 100644
--- a/src/main/resources/web/properties/ExoneraTor_ro.properties
+++ b/src/main/resources/web/properties/ExoneraTor_ro.properties
@@ -1,13 +1,13 @@
-form.explanation=Introduce\u021bi o adres\u0103 IP si o dat\u0103 pentru a afla dac\u0103 respectiva adresa a fost folosita de un nod Tor.
+form.explanation=Introduce\u021bi o adres\u0103 IP si o dat\u0103 pentru a afla dac\u0103 respectiva adresa a fost folosita de un nod Tor:
form.ip.label=Adres\u0103 IP
form.timestamp.label=Dat\u0103
form.search.label=Caut\u0103
summary.heading=Sumar
summary.serverproblem.dbnoconnect.title=Problem\u0103 de server
-summary.serverproblem.dbnoconnect.body.text=Imposibil de conectat la baza de date. V\u0103 rug\u0103m s\u0103 re\u00eencerca\u021bi mai t\u00eerziu. Dac\u0103 problema persist\u0103, v\u0103 rug\u0103m %s\!
+summary.serverproblem.dbnoconnect.body.text=Imposibil de conectat la baza de date. V\u0103 rug\u0103m s\u0103 re\u00eencerca\u021bi mai t\u00eerziu. Dac\u0103 problema persist\u0103, v\u0103 rug\u0103m %s!
summary.serverproblem.dbnoconnect.body.link=Informa\u021bi-ne
summary.serverproblem.dbempty.title=Problem\u0103 de server
-summary.serverproblem.dbempty.body.text=Baza de date pare a fi goal\u0103. V\u0103 rug\u0103m s\u0103 re\u00eencerca\u021bi mai t\u00eerziu. Dac\u0103 problema persist\u0103, v\u0103 rug\u0103m %s\!
+summary.serverproblem.dbempty.body.text=Baza de date pare a fi goal\u0103. V\u0103 rug\u0103m s\u0103 re\u00eencerca\u021bi mai t\u00eerziu. Dac\u0103 problema persist\u0103, v\u0103 rug\u0103m %s!
summary.serverproblem.dbempty.body.link=Informa\u021bi-ne
summary.invalidparams.notimestamp.title=Lips\u0103 parametru dat\u0103
summary.invalidparams.notimestamp.body=Ne pare r\u0103u, dar trebuie s\u0103 introduce\u021bi un parametru dat\u0103.
@@ -19,11 +19,13 @@ summary.invalidparams.invalidip.title=Parametrul adresei IP este incorect
summary.invalidparams.invalidip.body=Ne pare r\u0103u, %s nu este o adres\u0103 IP valid\u0103. Formatele corecte ale unei adresei IP sunt %s sau %s.
summary.invalidparams.invalidtimestamp.title=Parametru dat\u0103 incorect
summary.invalidparams.invalidtimestamp.body=Ne pare r\u0103u, %s nu este o dat\u0103 valid\u0103. Formatul corect al datei este %s.
+summary.invalidparams.timestamptoorecent.title=Parametrul dat\u0103 e prea recent
+summary.invalidparams.timestamptoorecent.body=Baza de date e posibil s\u0103 nu con\u021bin\u0103 suficiente date pentru a r\u0103spunde corect la aceast\u0103 cerere. Ultimele date acceptate sunt de acum dou\u0103 zile. Repet\u0103 c\u0103utarea alta dat\u0103.
summary.serverproblem.nodata.title=Problem\u0103 de server
-summary.serverproblem.nodata.body.text=Baza de date nu con\u021bine informatii pentru data solicitat\u0103. V\u0103 rug\u0103m \u00eencerca\u021bi mai t\u00e2rziu. Dac\u0103 problema persist\u0103, va rug\u0103m %s\!
+summary.serverproblem.nodata.body.text=Baza de date nu con\u021bine informatii pentru data solicitat\u0103. V\u0103 rug\u0103m \u00eencerca\u021bi mai t\u00e2rziu. Dac\u0103 problema persist\u0103, va rug\u0103m %s!
summary.serverproblem.nodata.body.link=Informa\u021bi-ne
summary.negativesamenetwork.title=Rezultatul este negativ
-summary.negativesamenetwork.body=Nu am g\u0103sit adresa IP %s la data de %s sau la o zi distan\u021b\u0103. Dar am g\u0103sit alte adrese IP folosite de noduri Tor \u00een aceea\u0219i /%d re\u021bea \u00een jurul orei\:
+summary.negativesamenetwork.body=Nu am g\u0103sit adresa IP %s la data de %s sau la o zi distan\u021b\u0103. Dar am g\u0103sit alte adrese IP folosite de noduri Tor \u00een aceea\u0219i /%d re\u021bea \u00een jurul orei:
summary.positive.title=Rezultatul este pozitiv
summary.positive.body=Am g\u0103sit unul sau mai multe noduri Tor care au folosit adresa IP %s la data de %s sau la o zi distan\u021b\u0103 care puteau fi cunoscute de clien\u021bii Tor.
summary.negative.title=Rezultatul este negativ
@@ -48,5 +50,5 @@ footer.abouttor.body.link3=contacta\u021bi The Tor Project, Inc.
footer.aboutexonerator.heading=Despre ExoneraTor
footer.aboutexonerator.body=Serviciul ExoneraTor opereaz\u0103 o baz\u0103 de date de adrese IP care au fost parte din re\u021belaua Tor la un anumit moment. Acest serviciu r\u0103spunde la \u00eentrebarea dac\u0103 a existat un nod Tor care a func\u021bionat pe o anumit\u0103 adres\u0103 IP la o anumit\u0103 dat\u0103. ExoneraTor poate stoca mai mult de o adresa IP per nod dac\u0103 nodurile folosesc o alt\u0103 adres\u0103 IP pentru a ie\u0219i pe internet dec\u00e2t cea folosit\u0103 pentru \u00eenregistrarea \u00een re\u021beaua Tor \u0219i stocheaz\u0103 dac\u0103 un nod a permis tranzitarea de trafic din re\u021beaua Tor catre internetul public la acea dat\u0103.
footer.language.name=rom\u00e2n\u0103
-footer.language.text=Aceast\u0103 pagin\u0103 mai este disponibil\u0103 \u00een urm\u0103toarele limbi:
+footer.language.text=Aceast\u0103 pagin\u0103 este de asemenea disponibil\u0103 \u00een urm\u0103toarele limbi:
diff --git a/src/main/resources/web/properties/ExoneraTor_sv.properties b/src/main/resources/web/properties/ExoneraTor_sv.properties
index 277a5b8..8e649bd 100644
--- a/src/main/resources/web/properties/ExoneraTor_sv.properties
+++ b/src/main/resources/web/properties/ExoneraTor_sv.properties
@@ -1,29 +1,31 @@
-form.explanation=Ange en IP-adress och ett datum f\u00f6r att f\u00e5 reda p\u00e5 om adressen anv\u00e4ndes av ett Tor-rel\u00e4\:
+form.explanation=Ange en IP-adress och ett datum f\u00f6r att f\u00e5 reda p\u00e5 om adressen anv\u00e4ndes av ett Tor-rel\u00e4:
form.ip.label=IP-adress
form.timestamp.label=Datum
form.search.label=S\u00f6k
summary.heading=Sammanfattning
summary.serverproblem.dbnoconnect.title=Serverproblem
-summary.serverproblem.dbnoconnect.body.text=Kunde inte ansluta till databasen. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s\!
+summary.serverproblem.dbnoconnect.body.text=Kunde inte ansluta till databasen. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s!
summary.serverproblem.dbnoconnect.body.link=l\u00e5t oss f\u00e5 veta
summary.serverproblem.dbempty.title=Serverproblem
-summary.serverproblem.dbempty.body.text=Databasen verkar vara tom. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s\!
+summary.serverproblem.dbempty.body.text=Databasen verkar vara tom. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s!
summary.serverproblem.dbempty.body.link=l\u00e5t oss f\u00e5 veta
summary.invalidparams.notimestamp.title=Inget datum angivet
-summary.invalidparams.notimestamp.body=Datum m\u00e5ste anges.
+summary.invalidparams.notimestamp.body=Tyv\u00e4rr ett datum m\u00e5ste anges
summary.invalidparams.noip.title=Ingen IP-adress angiven
summary.invalidparams.noip.body=IP-adress m\u00e5ste anges.
summary.invalidparams.timestamprange.title=Ogiltigt datum
summary.invalidparams.timestamprange.body=Databasen inneh\u00e5ller inte n\u00e5got data f\u00f6r %s. V\u00e4nligen v\u00e4lj ett datum mellan %s och %s.
summary.invalidparams.invalidip.title=Felaktig IP-adress
summary.invalidparams.invalidip.body=%s \u00e4r inte en giltig IP-adress. F\u00f6rv\u00e4ntat format p\u00e5 IP-adresser \u00e4r %s eller %s.
-summary.invalidparams.invalidtimestamp.title=Ogiltigt datum.
+summary.invalidparams.invalidtimestamp.title=Ogiltigt datum
summary.invalidparams.invalidtimestamp.body=%s \u00e4r inte ett giltigt datum. F\u00f6rv\u00e4ntat datumformat \u00e4r %s.
+summary.invalidparams.timestamptoorecent.title=Datum f\u00f6r nyligen
+summary.invalidparams.timestamptoorecent.body=Databasen kanske inte inneh\u00e5ller tillr\u00e4ckligt med data f\u00f6r att korrekt svara p\u00e5 denna f\u00f6rfr\u00e5gan. De senast accepterade data \u00e4r i f\u00f6rrg\u00e5r. Upprepa din s\u00f6kning p\u00e5 en annan dag.
summary.serverproblem.nodata.title=Serverproblem
-summary.serverproblem.nodata.body.text=Databasen inneh\u00e5ller inte n\u00e5got data f\u00f6r det efterfr\u00e5gade datumet. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s\!
+summary.serverproblem.nodata.body.text=Databasen inneh\u00e5ller inte n\u00e5got data f\u00f6r det efterfr\u00e5gade datumet. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s!
summary.serverproblem.nodata.body.link=l\u00e5t oss f\u00e5 veta
summary.negativesamenetwork.title=Resultatet \u00e4r negativt
-summary.negativesamenetwork.body=Vi kunde inte hitta IP-adress %s p\u00e5 eller inom en dag fr\u00e5n %s. Men vi hittade andra IP-adresser som anv\u00e4ndes av Tor-rel\u00e4n i samma /%d-n\u00e4tverk runt den tiden\:
+summary.negativesamenetwork.body=Vi kunde inte hitta IP-adress %s p\u00e5 eller inom en dag fr\u00e5n %s. Men vi hittade andra IP-adresser som anv\u00e4ndes av Tor-rel\u00e4n i samma /%d-n\u00e4tverk runt den tiden:
summary.positive.title=Resultatet \u00e4r positivt
summary.positive.body=Vi hittade ett eller flera Tor-rel\u00e4n p\u00e5 IP-adress %s p\u00e5 eller inom en dag fr\u00e5n %s som Tor-klienter f\u00f6rmodligen k\u00e4nde till.
summary.negative.title=Resultatet \u00e4r negativt
@@ -48,5 +50,5 @@ footer.abouttor.body.link3=kontakta Tor-projektet
footer.aboutexonerator.heading=Om ExoneraTor
footer.aboutexonerator.body=Tj\u00e4nsten ExoneraTor uppr\u00e4tth\u00e5ller en databas \u00f6ver IP-adresser som har varit en del av Tor-n\u00e4tverket. Den ger svar p\u00e5 fr\u00e5gan om det var ett Tor-rel\u00e4 som anv\u00e4nde en viss IP-adress vid ett givet datum. ExoneraTor kan komma att lagra fler \u00e4n en IP-adress per rel\u00e4 f\u00f6r rel\u00e4n som anv\u00e4nder en annan IP-adress f\u00f6r att ansluta till internet \u00e4n den som anv\u00e4ndes f\u00f6r att registrera sig i Tor-n\u00e4tverket. Huruvida ett rel\u00e4 har till\u00e5tit Tor-trafik ut mot internet vid tidpunkten eller ej lagras ocks\u00e5.
footer.language.name=svenska
-footer.language.text=Denna sida finns \u00e4ven p\u00e5 f\u00f6ljande spr\u00e5k:
+footer.language.text=Den h\u00e4r sidan finns ocks\u00e5 p\u00e5 f\u00f6ljande spr\u00e5k:
1
0

[metrics-web/release] Mention that a DNSSEC validating resolver is used
by karsten@torproject.org 26 Sep '18
by karsten@torproject.org 26 Sep '18
26 Sep '18
commit 67201b9dd4e74950f980eed9d0fa98d3710b011d
Author: Iain R. Learmonth <irl(a)fsfe.org>
Date: Wed Aug 8 14:19:13 2018 +0100
Mention that a DNSSEC validating resolver is used
Fixes: #26901
---
src/main/resources/web/jsps/onionoo.jsp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/main/resources/web/jsps/onionoo.jsp b/src/main/resources/web/jsps/onionoo.jsp
index 7c78c7c..b6c7313 100644
--- a/src/main/resources/web/jsps/onionoo.jsp
+++ b/src/main/resources/web/jsps/onionoo.jsp
@@ -1406,7 +1406,10 @@ address changes.
Omitted if the relay IP address was not looked up, if no lookup request
was successful yet, or if no A records were found matching the PTR records
(i.e. it was not possible to verify the value of any of the PTR records).
-<span class="blue">Added on July 16, 2018.</span>
+A DNSSEC validating resolver is used for these lookups. Failure to validate
+DNSSEC signatures will prevent those names from appearing in this field.
+<span class="blue">Added on July 16, 2018. Updated to clarify that
+a DNSSEC validating resolver is used on August 17, 2018.</span>
</p>
</li>
@@ -1424,7 +1427,10 @@ address changes.
Omitted if the relay IP address was not looked up, if no lookup request
was successful yet, or if A records were found matching all PTR records
(i.e. it was possible to verify the value of each of the PTR records).
-<span class="blue">Added on July 16, 2018.</span>
+A DNSSEC validating resolver is used for these lookups. Failure to validate
+DNSSEC signatures will prevent those names from appearing in this field.
+<span class="blue">Added on July 16, 2018. Updated to clarify that
+a DNSSEC validating resolver is used on August 17, 2018.</span>
</p>
</li>
1
0

26 Sep '18
commit 391cbf5aefb323445108ab71db3862f58c23b45e
Author: Iain R. Learmonth <irl(a)fsfe.org>
Date: Wed Aug 8 14:14:19 2018 +0100
Pass metadata through for top relays
Fixes: #27077
---
src/main/resources/web/js/rs/router.js | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/main/resources/web/js/rs/router.js b/src/main/resources/web/js/rs/router.js
index c67c4a1..213b01a 100644
--- a/src/main/resources/web/js/rs/router.js
+++ b/src/main/resources/web/js/rs/router.js
@@ -225,7 +225,12 @@ define([
doSearchView.collection.url = "https://onionoo.torproject.org/details?type=relay&order=-consensus_weight&l…";
doSearchView.collection.lookup({
- success: function(err){
+ success: function(err, onionooVersion, buildRevision,
+ relaysPublished, bridgesPublished){
+ doSearchView.onionooVersion = onionooVersion;
+ doSearchView.buildRevision = buildRevision;
+ doSearchView.relaysPublished = relaysPublished;
+ doSearchView.bridgesPublished = bridgesPublished;
doSearchView.relays = doSearchView.collection.models;
doSearchView.error = err;
doSearchView.render("");
1
0

[metrics-web/release] Assume relays have recommended versions if unknown
by karsten@torproject.org 26 Sep '18
by karsten@torproject.org 26 Sep '18
26 Sep '18
commit e60d669690c85677321fdd41398864294679a860
Author: Iain R. Learmonth <irl(a)fsfe.org>
Date: Tue Aug 7 13:54:29 2018 +0100
Assume relays have recommended versions if unknown
Fixes: #27042
---
src/main/resources/web/js/rs/models/relay.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/resources/web/js/rs/models/relay.js b/src/main/resources/web/js/rs/models/relay.js
index ad23b15..a3b0d42 100644
--- a/src/main/resources/web/js/rs/models/relay.js
+++ b/src/main/resources/web/js/rs/models/relay.js
@@ -239,7 +239,7 @@ define([
/* Synthetic Additional Flags */
var additional_flags = []
- if (!((typeof relay.recommended_version !== 'undefined') ? relay.recommended_version : false) && relay.version_consistent) additional_flags.push("Not Recommended");
+ if (!((typeof relay.recommended_version !== 'undefined') ? relay.recommended_version : true) && relay.version_consistent) additional_flags.push("Not Recommended");
if (!((typeof relay.measured !== 'undefined') ? relay.measured : true)) additional_flags.push("Unmeasured");
if (((typeof relay.hibernating !== 'undefined') ? relay.hibernating : false)) additional_flags.push("Hibernating");
if (IsFallbackDir(relay.fingerprint)) additional_flags.push("FallbackDir");
1
0

[metrics-web/release] Update news.json to version 285 of doc/MetricsTimeline.
by karsten@torproject.org 26 Sep '18
by karsten@torproject.org 26 Sep '18
26 Sep '18
commit 16e2fe06c0bb79676d4a268b3df1d22586752e46
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Mon Aug 13 09:15:46 2018 +0200
Update news.json to version 285 of doc/MetricsTimeline.
---
src/main/resources/web/json/news.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/resources/web/json/news.json b/src/main/resources/web/json/news.json
index 03d7f6a..8e5b86a 100644
--- a/src/main/resources/web/json/news.json
+++ b/src/main/resources/web/json/news.json
@@ -3292,7 +3292,7 @@
} ]
}, {
"start" : "2018-07-29",
- "ongoing" : true,
+ "end" : "2018-08-08",
"places" : [ "bd" ],
"short_description" : "Protests over road safety in Dhaka, Bangladesh",
"description" : "Protests over road safety in Dhaka, Bangladesh. Reports of mobile network throttling and blocking of Facebook.",
1
0

[metrics-web/release] Make suggested changes to per-graph CSV files.
by karsten@torproject.org 26 Sep '18
by karsten@torproject.org 26 Sep '18
26 Sep '18
commit 0e6936003d0b9b4cc8d9388ea8a56eadcfdce1f9
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Aug 9 16:08:17 2018 +0200
Make suggested changes to per-graph CSV files.
Implements #26998.
---
src/main/R/clients/split-clients.R | 6 +-
src/main/R/rserver/graphs.R | 70 ++++++----------
src/main/resources/web/jsps/stats.jsp | 153 ++++++++--------------------------
3 files changed, 64 insertions(+), 165 deletions(-)
diff --git a/src/main/R/clients/split-clients.R b/src/main/R/clients/split-clients.R
index 50b03d4..9f80902 100644
--- a/src/main/R/clients/split-clients.R
+++ b/src/main/R/clients/split-clients.R
@@ -1,12 +1,12 @@
dir.create("RData", showWarnings = FALSE)
c <- read.csv("clients.csv", stringsAsFactors = FALSE)
-data <- c[c$node == 'relay', !(names(c) %in% c("node", "frac"))]
+data <- c[c$node == 'relay', !(names(c) %in% c("node"))]
save(data, file = "RData/clients-relay.RData")
-data <- c[c$node == 'bridge', !(names(c) %in% c("node", "frac"))]
+data <- c[c$node == 'bridge', !(names(c) %in% c("node"))]
save(data, file = "RData/clients-bridge.RData")
u <- read.csv("userstats-combined.csv", stringsAsFactors = FALSE)
-data <- u[, !(names(u) %in% c("node", "version", "frac"))]
+data <- u[, !(names(u) %in% c("node", "version"))]
save(data, file = "RData/userstats-bridge-combined.RData")
diff --git a/src/main/R/rserver/graphs.R b/src/main/R/rserver/graphs.R
index 12a80e9..ab37a32 100644
--- a/src/main/R/rserver/graphs.R
+++ b/src/main/R/rserver/graphs.R
@@ -423,7 +423,6 @@ plot_versions <- function(start_p, end_p, path_p) {
write_versions <- function(start_p = NULL, end_p = NULL, path_p) {
prepare_versions(start_p, end_p) %>%
- spread(key = "version", value = "relays", fill = 0) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -459,6 +458,7 @@ plot_platforms <- function(start_p, end_p, path_p) {
write_platforms <- function(start_p = NULL, end_p = NULL, path_p) {
prepare_platforms(start_p, end_p) %>%
+ mutate(platform = tolower(platform)) %>%
spread(platform, relays) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -607,8 +607,6 @@ plot_relayflags <- function(start_p, end_p, flag_p, path_p) {
write_relayflags <- function(start_p = NULL, end_p = NULL, flag_p = NULL,
path_p) {
prepare_relayflags(start_p, end_p, flag_p) %>%
- mutate(flag = tolower(flag)) %>%
- spread(flag, relays) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -832,9 +830,6 @@ plot_connbidirect <- function(start_p, end_p, path_p) {
write_connbidirect <- function(start_p = NULL, end_p = NULL, path_p) {
prepare_connbidirect(start_p, end_p) %>%
rename(q1 = X0.25, md = X0.5, q3 = X0.75) %>%
- gather(variable, value, -(date:direction)) %>%
- unite(temp, direction, variable) %>%
- spread(temp, value) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -900,7 +895,8 @@ plot_userstats <- function(start_p, end_p, node_p, variable_p, value_p,
events_p, path_p) {
load(paste(rdata_dir, "clients-", node_p, ".RData", sep = ""))
c <- data
- u <- c[c$date >= start_p & c$date <= end_p, ]
+ u <- c[c$date >= start_p & c$date <= end_p, c("date", "country", "transport",
+ "version", "lower", "upper", "clients")]
u <- rbind(u, data.frame(date = start_p,
country = ifelse(variable_p == "country" & value_p != "all", value_p, ""),
transport = ifelse(variable_p == "transport", value_p, ""),
@@ -1053,8 +1049,7 @@ write_userstats_relay_country <- function(start_p = NULL, end_p = NULL,
country == ifelse(country_p == "all", "", country_p) else TRUE) %>%
filter(transport == "") %>%
filter(version == "") %>%
- mutate(downturns = clients < lower, upturns = clients > upper) %>%
- select(date, country, clients, downturns, upturns, lower, upper) %>%
+ select(date, country, clients, lower, upper, frac) %>%
rename(users = clients) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -1069,7 +1064,7 @@ write_userstats_bridge_country <- function(start_p = NULL, end_p = NULL,
country == ifelse(country_p == "all", "", country_p) else TRUE) %>%
filter(transport == "") %>%
filter(version == "") %>%
- select(date, country, clients) %>%
+ select(date, country, clients, frac) %>%
rename(users = clients) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -1083,24 +1078,21 @@ write_userstats_bridge_transport <- function(start_p = NULL, end_p = NULL,
filter(country == "") %>%
filter(version == "") %>%
filter(transport != "") %>%
- select(date, transport, clients)
+ select(date, transport, clients, frac)
if (is.null(transport_p) || "!<OR>" %in% transport_p) {
n <- u %>%
filter(transport != "<OR>") %>%
- group_by(date) %>%
+ group_by(date, frac) %>%
summarize(clients = sum(clients))
u <- rbind(u, data.frame(date = n$date, transport = "!<OR>",
- clients = n$clients))
+ clients = n$clients, frac = n$frac))
}
u %>%
filter(if (!is.null(transport_p)) transport %in% transport_p else TRUE) %>%
- mutate(transport = ifelse(transport == "<OR>", "default_or_protocol",
- ifelse(transport == "!<OR>", "any_pt",
- ifelse(transport == "<??>", "unknown_pluggable_transports",
- transport)))) %>%
group_by(date, transport) %>%
- select(date, transport, clients) %>%
- spread(transport, clients) %>%
+ select(date, transport, clients, frac) %>%
+ rename(users = clients) %>%
+ arrange(date, transport) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -1113,7 +1105,7 @@ write_userstats_bridge_version <- function(start_p = NULL, end_p = NULL,
filter(country == "") %>%
filter(transport == "") %>%
filter(if (!is.null(version_p)) version == version_p else TRUE) %>%
- select(date, version, clients) %>%
+ select(date, version, clients, frac) %>%
rename(users = clients) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -1159,12 +1151,8 @@ write_userstats_bridge_combined <- function(start_p = NULL, end_p = NULL,
write_userstats_bridge_country(start_p, end_p, country_p, path_p)
} else {
prepare_userstats_bridge_combined(start_p, end_p, country_p) %>%
- select(date, country, transport, low, high) %>%
- mutate(transport = ifelse(transport == "<OR>", "default_or_protocol",
- ifelse(transport == "<??>", "unknown_transport", transport))) %>%
- gather(variable, value, -(date:transport)) %>%
- unite(temp, transport, variable) %>%
- spread(temp, value) %>%
+ select(date, country, transport, low, high, frac) %>%
+ arrange(date, country, transport) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
}
@@ -1201,8 +1189,8 @@ plot_advbwdist_perc <- function(start_p, end_p, p_p, path_p) {
write_advbwdist_perc <- function(start_p = NULL, end_p = NULL, p_p = NULL,
path_p) {
prepare_advbwdist_perc(start_p, end_p, p_p) %>%
- unite(temp, variable, percentile) %>%
- spread(temp, advbw) %>%
+ spread(variable, advbw) %>%
+ rename(p = percentile) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -1238,8 +1226,8 @@ plot_advbwdist_relay <- function(start_p, end_p, n_p, path_p) {
write_advbwdist_relay <- function(start_p = NULL, end_p = NULL, n_p = NULL,
path_p) {
prepare_advbwdist_relay(start_p, end_p, n_p) %>%
- unite(temp, variable, relay) %>%
- spread(temp, advbw) %>%
+ spread(variable, advbw) %>%
+ rename(n = relay) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
@@ -1249,7 +1237,7 @@ prepare_hidserv_dir_onions_seen <- function(start_p, end_p) {
filter(if (!is.null(start_p)) date >= as.Date(start_p) else TRUE) %>%
filter(if (!is.null(end_p)) date <= as.Date(end_p) else TRUE) %>%
filter(type == "dir-onions-seen") %>%
- transmute(date = date, onions = ifelse(frac >= 0.01, wiqm, NA))
+ transmute(date, onions = ifelse(frac >= 0.01, wiqm, NA), frac)
}
plot_hidserv_dir_onions_seen <- function(start_p, end_p, path_p) {
@@ -1277,7 +1265,7 @@ prepare_hidserv_rend_relayed_cells <- function(start_p, end_p) {
filter(if (!is.null(end_p)) date <= as.Date(end_p) else TRUE) %>%
filter(type == "rend-relayed-cells") %>%
transmute(date,
- relayed = ifelse(frac >= 0.01, wiqm * 8 * 512 / (86400 * 1e9), NA))
+ relayed = ifelse(frac >= 0.01, wiqm * 8 * 512 / (86400 * 1e9), NA), frac)
}
plot_hidserv_rend_relayed_cells <- function(start_p, end_p, path_p) {
@@ -1440,22 +1428,14 @@ plot_webstats_tb_locale <- function(start_p, end_p, path_p) {
# plot_webstats_tb_locale needs the preliminary data frame e for its
# breaks and labels. Left as future work.
write_webstats_tb_locale <- function(start_p = NULL, end_p = NULL, path_p) {
- d <- read.csv(paste(stats_dir, "webstats.csv", sep = ""),
- colClasses = c("log_date" = "Date", "locale" = "character"))
- d <- d %>%
+ read.csv(paste(stats_dir, "webstats.csv", sep = ""),
+ colClasses = c("log_date" = "Date", "locale" = "character")) %>%
filter(if (!is.null(start_p)) log_date >= as.Date(start_p) else TRUE) %>%
filter(if (!is.null(end_p)) log_date <= as.Date(end_p) else TRUE) %>%
- filter(request_type == "tbid")
- e <- d
- e <- aggregate(list(count = e$count), by = list(locale = e$locale), FUN = sum)
- e <- e[order(e$count, decreasing = TRUE), ]
- e <- e[1:5, ]
- d <- aggregate(list(count = d$count), by = list(log_date = d$log_date,
- locale = ifelse(d$locale %in% e$locale, d$locale, "other")), FUN = sum)
- d %>%
- mutate(locale = tolower(locale)) %>%
+ filter(request_type == "tbid") %>%
+ group_by(log_date, locale) %>%
+ summarize(initial_downloads = sum(count)) %>%
rename(date = log_date) %>%
- spread(locale, count) %>%
write.csv(path_p, quote = FALSE, row.names = FALSE, na = "")
}
diff --git a/src/main/resources/web/jsps/stats.jsp b/src/main/resources/web/jsps/stats.jsp
index 1c18921..719176c 100644
--- a/src/main/resources/web/jsps/stats.jsp
+++ b/src/main/resources/web/jsps/stats.jsp
@@ -45,7 +45,7 @@ https://metrics.torproject.org/identifier.csv
<li><b>February 28, 2018:</b> Added per-graph CSV files to eventually replace pre-aggregated CSV files.</li>
<li><b>May 29, 2018:</b> Made all parameters of per-graph CSV files optional to support providing both pre-filtered and complete data sets.</li>
<li><b>July 31, 2018:</b> Announced pending changes to per-graph CSV files to become effective on August 15 and pre-aggregated CSV files to be removed by September 15.</li>
-<li><b>August 15, 2018 (scheduled):</b> Make the first batch of changes to per-graph CSV files (marked as "Suggested change" below).</li>
+<li><b>August 15, 2018:</b> Made the first batch of changes to per-graph CSV files.</li>
<li><b>September 15, 2018 (scheduled):</b> Remove all pre-aggregated CSV files.</li>
</ul>
@@ -75,22 +75,11 @@ Users <a href="#users" name="users" class="anchor">#</a></h2>
<li><b>date:</b> UTC date (YYYY-MM-DD) for which user numbers are estimated.</li>
<li><b>country:</b> Two-letter lower-case country code as found in a GeoIP database by resolving clients' IP addresses, or <b>"??"</b> if client IP addresses could not be resolved. If this column contains the empty string, all clients are included, regardless of their country code.</li>
<li><b>users:</b> Estimated number of clients.</li>
-<li><b>downturns:</b> Whether the estimated number of clients is below the lower number of expected clients, indicating a possible censorship-related event. If this column contains the empty string, there are no expectations on the number of clients.</li>
-<li><b>upturns:</b> Whether the estimated number of clients is above the upper number of expected clients, indicating a possible censorship-related event. If this column contains the empty string, there are no expectations on the number of clients.</li>
-<li><b>lower:</b> 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.</li>
-<li><b>upper:</b> 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.</li>
+<li><b>lower:</b> Lower number of expected clients under the assumption that there has been no censorship event. If <b>users < lower</b>, a censorship-related event might have happened in this country on the given day. If this column contains the empty string, there are no expectations on the number of clients.</li>
+<li><b>upper:</b> Upper number of expected clients under the assumption that there has been no release of censorship. If <b>users > upper</b>, a censorship-related event might have happened in this country on the given day. If this column contains the empty string, there are no expectations on the number of clients.</li>
+<li><b>frac:</b> Fraction of relays in percent that the estimate is based on.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Remove the <b>downturns</b> and <b>upturns</b> columns which are trivial to compute as <b>users < lower</b> and <b>users > upper</b>, and which don't necessarily make the CSV file easier to handle. There could even be a gentle hint on computing the dots in the graph from two columns.</p>
-</div>
-
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Add <b>frac</b> column ("Fraction of relays (as value between 0 and 1) that the estimate is based on.") which might be relevant for pro users. Related to the discussion on <a href="https://bugs.torproject.org/26950">#26950</a>.</p>
-</div>
-
<h3>Bridge users by country
<a href="/userstats-bridge-country.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/userstats-bridge-country.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -110,13 +99,9 @@ Users <a href="#users" name="users" class="anchor">#</a></h2>
<li><b>date:</b> UTC date (YYYY-MM-DD) for which user numbers are estimated.</li>
<li><b>country:</b> Two-letter lower-case country code as found in a GeoIP database by resolving clients' IP addresses, or <b>"??"</b> if client IP addresses could not be resolved. If this column contains the empty string, all clients are included, regardless of their country code.</li>
<li><b>users:</b> Estimated number of clients.</li>
+<li><b>frac:</b> Fraction of bridges in percent that the estimate is based on.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Add <b>frac</b> column ("Fraction of bridges (as value between 0 and 1) that the estimate is based on.") which might be relevant for pro users. Related to the discussion on <a href="https://bugs.torproject.org/26950">#26950</a>.</p>
-</div>
-
<h3>Bridge users by transport
<a href="/userstats-bridge-transport.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/userstats-bridge-transport.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -134,19 +119,11 @@ Users <a href="#users" name="users" class="anchor">#</a></h2>
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) for which user numbers are estimated.</li>
-<li><b>$transport:</b> One or more columns with the estimated number of clients using transport with lower-case name <b>$transport</b> to connect to the Tor network using bridges. Examples for transport names are <b>"obfs4"</b>, <b>"websocket"</b> for Flash proxy/websocket, <b>"fte"</b> for FTE, <b>"any_pt"</b> for any pluggable transport, <b>"unknown_pluggable_transports"</b> for unknown pluggable transport(s), or <b>"default_or_protocol"</b> for the default OR protocol.</li>
+<li><b>transport:</b> Transport name used by clients to connect to the Tor network using bridges. Examples are <b>"obfs4"</b>, <b>"websocket"</b> for Flash proxy/websocket, <b>"fte"</b> for FTE, <b>"!<OR>"</b> for any pluggable transport, <b>"<??>"</b> for unknown pluggable transport(s), or <b>"<OR>"</b> for the default OR protocol.</li>
+<li><b>users:</b> Estimated number of clients.</li>
+<li><b>frac:</b> Fraction of bridges in percent that the estimate is based on.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Replace <b>$transport</b> by a <b>transport</b> column for the transport name (written as non-percent-encoded !<OR>, <??>, and <OR> for consistency with the <b>transport</b> parameter) and a <b>users</b> column for the estimated number of clients, similar to the bridge users by country graph.</p>
-</div>
-
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Add <b>frac</b> column ("Fraction of bridges (as value between 0 and 1) that the estimate is based on.") which might be relevant for pro users. Related to the discussion on <a href="https://bugs.torproject.org/26950">#26950</a>.</p>
-</div>
-
<h3>Bridge users by country and transport
<a href="/userstats-bridge-combined.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/userstats-bridge-combined.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -165,20 +142,12 @@ Users <a href="#users" name="users" class="anchor">#</a></h2>
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) for which user numbers are estimated.</li>
<li><b>country:</b> Two-letter lower-case country code as found in a GeoIP database by resolving clients' IP addresses, or <b>"??"</b> if client IP addresses could not be resolved.</li>
-<li><b>$transport_high:</b> Upper bound of estimated users from the given country and transport. Transport names are written in lower case, and the default OR protocol is written as <b>default_or_protocol</b>.</li>
-<li><b>$transport_low:</b> Lower bound of estimated users from the given country and transport. Transport names are written in lower case, and the default OR protocol is written as <b>default_or_protocol</b>.</li>
+<li><b>transport:</b> Transport name used by clients to connect to the Tor network using bridges. Examples are <b>"obfs4"</b>, <b>"websocket"</b> for Flash proxy/websocket, <b>"fte"</b> for FTE, <b>"<??>"</b> for unknown pluggable transport(s), or <b>"<OR>"</b> for the default OR protocol.</li>
+<li><b>high:</b> Upper bound of estimated users from the given country and transport.</li>
+<li><b>low:</b> Lower bound of estimated users from the given country and transport.</li>
+<li><b>frac:</b> Fraction of bridges in percent that the estimate is based on.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Replace <b>$transport_high</b> and <b>$transport_low</b> by a <b>transport</b> column for the transport name (written as non-percent-encoded <OR> for consistency with the previous graph) and a <b>high</b> and a <b>low</b> column for the upper and lower bound.</p>
-</div>
-
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Add <b>frac</b> column ("Fraction of bridges (as value between 0 and 1) that the estimate is based on.") which might be relevant for pro users. Related to the discussion on <a href="https://bugs.torproject.org/26950">#26950</a>.</p>
-</div>
-
<h3>Bridge users by IP version
<a href="/userstats-bridge-version.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/userstats-bridge-version.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -199,15 +168,9 @@ using bridges, which can be either <b>"v4"</b> or <b>"v6"</b>.</li>
<li><b>date:</b> UTC date (YYYY-MM-DD) for which user numbers are estimated.</li>
<li><b>version:</b> IP version used by clients to connect to the Tor network using bridges, which can be either <b>"v4"</b> or <b>"v6"</b>. If this column contains the empty string, all clients are included, regardless of their IP version.</li>
<li><b>users:</b> Estimated number of clients.</li>
+<li><b>frac:</b> Fraction of bridges in percent that the estimate is based on.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Add <b>frac</b> column ("Fraction of bridges (as value between 0 and 1) that the estimate is based on.") which might be relevant for pro users. Related to the discussion on <a href="https://bugs.torproject.org/26950">#26950</a>.</p>
-</div>
-
-</div>
-
<div class="container">
<h2><i class="fa fa-server fa-fw" aria-hidden="true"></i>
Servers <a href="#servers" name="servers" class="anchor">#</a></h2>
@@ -249,14 +212,10 @@ Servers <a href="#servers" name="servers" class="anchor">#</a></h2>
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) when relays have been listed as running.</li>
-<li><b>$flag:</b> Average number of relays with the given relay flag in lower case, which can be <b>"exit"</b>, <b>"fast"</b>, <b>"guard"</b>, <b>"hsdir"</b>, <b>"fast"</b>, <b>"running"</b>, and <b>"stable"</b>.</li>
+<li><b>flag:</b> Relay flag, which can be <b>"Exit"</b>, <b>"Fast"</b>, <b>"Guard"</b>, <b>"HSDir"</b>, <b>"Fast"</b>, <b>"Running"</b>, or <b>"Stable"</b>.</li>
+<li><b>relays:</b> Average number of relays.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Replace <b>$flag</b> columns by a <b>flag</b> and a <b>relays</b> column, and include the relay flag name in their original capitalization, rather than lower-cased.</p>
-</div>
-
<h3>Relays by tor version
<a href="/versions.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/versions.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -273,14 +232,10 @@ Servers <a href="#servers" name="servers" class="anchor">#</a></h2>
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) when relays have been listed as running.</li>
-<li><b>$version:</b> Average number of relays with the given first three dotted numbers of the Tor software version as reported by the relay. An example is <b>"0.3.4"</b>.
+<li><b>version:</b> First three dotted numbers of the Tor software version as reported by the relay. An example is <b>"0.3.4"</b>.</li>
+<li><b>relays:</b> Average number of relays.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Replace <b>$version</b> columns by a <b>version</b> and a <b>relays</b> column.</p>
-</div>
-
<h3>Relays by platform
<a href="/platforms.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/platforms.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -297,18 +252,13 @@ Servers <a href="#servers" name="servers" class="anchor">#</a></h2>
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) when relays have been listed as running.</li>
-<li><b>BSD:</b> Average number of relays on *BSD.</li>
-<li><b>Linux:</b> Average number of relays on Linux.</li>
-<li><b>Other:</b> Average number of relays on another platform than Linux, *BSD, Windows, or macOS.</li>
-<li><b>Windows:</b> Average number of relays on Windows.</li>
-<li><b>macOS:</b> Average number of relays on macOS.</li>
+<li><b>bsd:</b> Average number of relays on *BSD.</li>
+<li><b>linux:</b> Average number of relays on Linux.</li>
+<li><b>macos:</b> Average number of relays on macOS.</li>
+<li><b>other:</b> Average number of relays on another platform than Linux, *BSD, Windows, or macOS.</li>
+<li><b>windows:</b> Average number of relays on Windows.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Change platform-specific columns to be all lower-case as a good practice to only use lower-cased column names everywhere.</p>
-</div>
-
<h3>Relays by IP version
<a href="/relays-ipv6.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/relays-ipv6.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -440,14 +390,9 @@ Traffic <a href="#traffic" name="traffic" class="anchor">#</a></h2>
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) that relays reported bandwidth data for.</li>
-<li><b>all_$p:</b> Advertised bandwidth in Gbit/s of the p-th percentile of all relays.</li>
-<li><b>exits_$p:</b> Advertised bandwidth in Gbit/s of the p-th percentile of relays with the <b>"Exit"</b> relay flag.</li>
-</ul>
-
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Replace <b>all_p$</b> and <b>exits_$p</b> columns by three columns <b>p</b>, <b>all</b>, and <b>exit</b>.</p>
-</div>
+<li><b>p:</b> Percentile as value between 0 and 100.</li>
+<li><b>all:</b> Advertised bandwidth in Gbit/s of the p-th percentile of all relays.</li>
+<li><b>exits:</b> Advertised bandwidth in Gbit/s of the p-th percentile of relays with the <b>"Exit"</b> relay flag.</li>
<h3>Advertised bandwidth of n-th fastest relays
<a href="/advbwdist-relay.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
@@ -466,15 +411,11 @@ Traffic <a href="#traffic" name="traffic" class="anchor">#</a></h2>
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) that relays reported bandwidth data for.</li>
-<li><b>all_$n:</b> Advertised bandwidth in Gbit/s of n-th fastest relay.</li>
-<li><b>exits_$n:</b> Advertised bandwidth in Gbit/s of n-th fastest relay with the <b>"Exit"</b> relay flag.</li>
+<li><b>n:</b> Position of the relay in an ordered list of all advertised bandwidths, starting at 1 for the fastest relay in the network.</li>
+<li><b>all:</b> Advertised bandwidth in Gbit/s of n-th fastest relay.</li>
+<li><b>exits:</b> Advertised bandwidth in Gbit/s of n-th fastest relay with the <b>"Exit"</b> relay flag.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Replace <b>all_n$</b> and <b>exits_$n</b> columns by three columns <b>n</b>, <b>all</b>, and <b>exit</b>.</p>
-</div>
-
<h3>Consumed bandwidth by Exit/Guard flag combination
<a href="/bwhist-flags.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/bwhist-flags.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -533,22 +474,12 @@ Traffic <a href="#traffic" name="traffic" class="anchor">#</a></h2>
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) for which statistics on uni-/bidirectional connection usage were reported.</li>
-<li><b>both_md:</b> Median of fraction of connections classified as both reading and writing.</li>
-<li><b>both_q1:</b> First quartile of fraction of connections classified as both reading and writing.</li>
-<li><b>both_q3:</b> Third quartile of fraction of connections classified as both reading and writing.</li>
-<li><b>read_md:</b> Median of fraction of connections classified as mostly reading.</li>
-<li><b>read_q1:</b> First quartile of fraction of connections classified as mostly reading.</li>
-<li><b>read_q3:</b> Third quartile of fraction of connections classified as mostly reading.</li>
-<li><b>write_md:</b> Median of fraction of connections classified as mostly writing.</li>
-<li><b>write_q1:</b> First quartile of fraction of connections classified as mostly writing.</li>
-<li><b>write_q3:</b> Third quartile of fraction of connections classified as mostly writing.</li>
+<li><b>direction:</b> Direction of reported fraction, which can be <b>"read"</b>, <b>"write"</b>, or <b>"both"</b> for connections classified as "mostly reading", "mostly writing", or "both reading and writing". Connections below the threshold have been removed from this statistics file entirely.</li>
+<li><b>q1:</b> First quartile of fraction of connections.</li>
+<li><b>md:</b> Median of fraction of connections.</li>
+<li><b>q3:</b> Third quartile of fraction of connections.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Replace columns except <b>date</b> by four columns <b>direction</b>, <b>q1</b>, <b>md</b>, and <b>q3</b>.</p>
-</div>
-
</div>
<div class="container">
@@ -679,13 +610,9 @@ Onion Services <a href="#onion-services" name="servers" class="anchor">#</a></h2
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) when relays have been listed as running.</li>
<li><b>onions:</b> Estimated number of unique .onion addresses observed by onion-service directories.</li>
+<li><b>frac:</b> Total network fraction of statistics reported by onion-service directories.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Add <b>frac</b> column as suggested on <a href="https://bugs.torproject.org/26950">#26950</a>.</p>
-</div>
-
<h3>Onion-service traffic (versions 2 and 3)
<a href="/hidserv-rend-relayed-cells.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/hidserv-rend-relayed-cells.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -703,13 +630,9 @@ Onion Services <a href="#onion-services" name="servers" class="anchor">#</a></h2
<ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) when relays have been listed as running.</li>
<li><b>relayed:</b> Estimated bandwidth in Gbit/s relayed on rendezvous circuits as observed by rendezvous points.</li>
+<li><b>frac:</b> Total network fraction of statistics reported by rendezvous points.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Add <b>frac</b> column as suggested on <a href="https://bugs.torproject.org/26950">#26950</a>.</p>
-</div>
-
<h3>Fraction of relays reporting onion-service statistics
<a href="/hidserv-frac-reporting.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/hidserv-frac-reporting.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
@@ -800,14 +723,10 @@ Applications <a href="#applications" name="applications" class="anchor">#</a></h
</ul>
<li><b>date:</b> UTC date (YYYY-MM-DD) when requests to <code>torproject.org</code> web servers have been logged.</li>
-<li><b>$locale:</b> Number of Tor Browser initial downloads for the given locale; limited to the top-5 locales in the requested time period.</li>
+<li><b>locale:</b> Locale, like "en-US" for English (United States), "de" for German, etc., and "??" for unrecognized locales.</li>
+<li><b>initial_downloads:</b> Number of Tor Browser initial downloads.</li>
</ul>
-<div class="bs-callout bs-callout-warning">
-<h3>Suggested change</h3>
-<p>Replace all locale-specific columns by two columns <b>locale</b> and <b>count</b> to avoid dynamically changing columns. Maybe also take out the limitation to top-5 locales in the file (not the graph), similar to how the "Bridge users by country and transport" file contains all transports, not just the top-3 ones.</p>
-</div>
-
<h3>Tor Messenger downloads and updates
<a href="/webstats-tm.html" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> graph</a>
<a href="/webstats-tm.csv" class="btn btn-primary btn-xs"><i class="fa fa-chevron-right" aria-hidden="true"></i> data</a>
1
0

[metrics-web/release] Integrate ExoneraTor as its own web page.
by karsten@torproject.org 26 Sep '18
by karsten@torproject.org 26 Sep '18
26 Sep '18
commit b60cf28654a880bd0bc68288d0af36d4a460e857
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Fri Aug 10 09:35:50 2018 +0200
Integrate ExoneraTor as its own web page.
Implements #23549.
---
build.xml | 5 ++
.../metrics/web/ExoneraTorWrapperServlet.java | 35 ++++++++++++++
src/main/resources/web.xml | 11 +++++
src/main/resources/web/jsps/exonerator.jsp | 23 +++++++++
src/main/resources/web/jsps/services.jsp | 2 +-
.../resources/web/properties/ExoneraTor.properties | 54 ++++++++++++++++++++++
.../web/properties/ExoneraTor_de.properties | 52 +++++++++++++++++++++
.../web/properties/ExoneraTor_fr.properties | 52 +++++++++++++++++++++
.../web/properties/ExoneraTor_ro.properties | 52 +++++++++++++++++++++
.../web/properties/ExoneraTor_sv.properties | 52 +++++++++++++++++++++
10 files changed, 337 insertions(+), 1 deletion(-)
diff --git a/build.xml b/build.xml
index 2f06209..423bfe3 100644
--- a/build.xml
+++ b/build.xml
@@ -10,6 +10,7 @@
<property name="implementation-title" value="metrics-web" />
<property name="release.version" value="1.1.0-dev" />
<property name="metricslibversion" value="2.4.0" />
+ <property name="exoneratorversion" value="3.0.0" />
<property name="jetty.version" value="-9.2.21.v20170120" />
<property name="warfile"
value="metrics-web-${release.version}.war"/>
@@ -64,6 +65,7 @@
</patternset>
<patternset id="web" >
+ <include name="exonerator-${exoneratorversion}-thin.jar" />
<include name="jetty9-annotations${jetty.version}.jar"/>
<include name="jetty9-server${jetty.version}.jar"/>
<include name="jetty9-servlet${jetty.version}.jar"/>
@@ -194,6 +196,9 @@
prefix="WEB-INF/json"
includes="metrics.json categories.json news.json"/>
+ <zipfileset dir="${resources}/web/properties"
+ includes="*.properties"/>
+
<zipfileset dir="${basedir}/src/submods/metrics-lib/generated/javadoc"
prefix="metrics-lib" />
<zipfileset dir="${libs}" prefix="WEB-INF/lib" >
diff --git a/src/main/java/org/torproject/metrics/web/ExoneraTorWrapperServlet.java b/src/main/java/org/torproject/metrics/web/ExoneraTorWrapperServlet.java
new file mode 100644
index 0000000..fc817e2
--- /dev/null
+++ b/src/main/java/org/torproject/metrics/web/ExoneraTorWrapperServlet.java
@@ -0,0 +1,35 @@
+/* Copyright 2018 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.metrics.web;
+
+import org.torproject.metrics.exonerator.ExoneraTorServlet;
+
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ExoneraTorWrapperServlet extends AnyServlet {
+
+ private ExoneraTorServlet exoneraTorServlet;
+
+ public ExoneraTorWrapperServlet() {
+ this.exoneraTorServlet = new ExoneraTorServlet();
+ }
+
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ super.init(config);
+ this.exoneraTorServlet.init(config);
+ }
+
+ @Override
+ public void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws IOException, ServletException {
+ request.setAttribute("categories", this.categories);
+ this.exoneraTorServlet.doGet(request, response);
+ }
+}
diff --git a/src/main/resources/web.xml b/src/main/resources/web.xml
index 154a64e..ae252da 100644
--- a/src/main/resources/web.xml
+++ b/src/main/resources/web.xml
@@ -384,6 +384,17 @@
<url-pattern>/rs.html</url-pattern>
</servlet-mapping>
+ <servlet>
+ <servlet-name>ExoneraTor</servlet-name>
+ <servlet-class>
+ org.torproject.metrics.web.ExoneraTorWrapperServlet
+ </servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>ExoneraTor</servlet-name>
+ <url-pattern>/exonerator.html</url-pattern>
+ </servlet-mapping>
+
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
diff --git a/src/main/resources/web/jsps/exonerator.jsp b/src/main/resources/web/jsps/exonerator.jsp
new file mode 100644
index 0000000..f8b9341
--- /dev/null
+++ b/src/main/resources/web/jsps/exonerator.jsp
@@ -0,0 +1,23 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<jsp:include page="top.jsp">
+ <jsp:param name="pageTitle" value="ExoneraTor – Tor Metrics"/>
+ <jsp:param name="navActive" value="Services"/>
+</jsp:include>
+
+<div class="container">
+ <ul class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><a href="/services.html">Services</a></li>
+ <li class="active">ExoneraTor</li>
+ </ul>
+</div>
+
+<div class="container">
+ <h1>ExoneraTor</h1>
+</div>
+
+${body}
+
+<jsp:include page="bottom.jsp"/>
+
diff --git a/src/main/resources/web/jsps/services.jsp b/src/main/resources/web/jsps/services.jsp
index 2283dbe..ead3b03 100644
--- a/src/main/resources/web/jsps/services.jsp
+++ b/src/main/resources/web/jsps/services.jsp
@@ -21,7 +21,7 @@
<h2>Network archive <a href="#archive" name="archive" class="anchor">#</a></h2>
<p>The following tool lets you browse the network archive for relays running in the past.</p>
<ul>
- <li><a href="https://exonerator.torproject.org/" target="_blank">ExoneraTor</a> tells you if an IP was used by a Tor relay on a given date.</li>
+ <li><a href="/exonerator.html">ExoneraTor</a> tells you if an IP was used by a Tor relay on a given date.</li>
</ul>
</div>
diff --git a/src/main/resources/web/properties/ExoneraTor.properties b/src/main/resources/web/properties/ExoneraTor.properties
new file mode 100644
index 0000000..936754a
--- /dev/null
+++ b/src/main/resources/web/properties/ExoneraTor.properties
@@ -0,0 +1,54 @@
+form.explanation=Enter an IP address and date to find out whether that address was used as a Tor relay:
+form.ip.label=IP address
+form.timestamp.label=Date
+form.search.label=Search
+summary.heading=Summary
+summary.serverproblem.dbnoconnect.title=Server problem
+summary.serverproblem.dbnoconnect.body.text=Unable to connect to the database. Please try again later. If this problem persists, please %s!
+summary.serverproblem.dbnoconnect.body.link=let us know
+summary.serverproblem.dbempty.title=Server problem
+summary.serverproblem.dbempty.body.text=The database appears to be empty. Please try again later. If this problem persists, please %s!
+summary.serverproblem.dbempty.body.link=let us know
+summary.invalidparams.notimestamp.title=No date parameter given
+summary.invalidparams.notimestamp.body=Sorry, you also need to provide a date parameter.
+summary.invalidparams.noip.title=No IP address parameter given
+summary.invalidparams.noip.body=Sorry, you also need to provide an IP address parameter.
+summary.invalidparams.timestamprange.title=Date parameter out of range
+summary.invalidparams.timestamprange.body=Sorry, the database does not contain any data from %s. Please pick a date between %s and %s.
+summary.invalidparams.invalidip.title=Invalid IP address parameter
+summary.invalidparams.invalidip.body=Sorry, %s is not a valid IP address. The expected IP address formats are %s or %s.
+summary.invalidparams.invalidtimestamp.title=Invalid date parameter
+summary.invalidparams.invalidtimestamp.body=Sorry, %s is not a valid date. The expected date format is %s.
+summary.invalidparams.timestamptoorecent.title=Date parameter too recent
+summary.invalidparams.timestamptoorecent.body=The database may not yet contain enough data to correctly answer this request. The latest accepted data is the day before yesterday. Please repeat your search on another day.
+summary.serverproblem.nodata.title=Server problem
+summary.serverproblem.nodata.body.text=The database does not contain any data for the requested date. Please try again later. If this problem persists, please %s!
+summary.serverproblem.nodata.body.link=let us know
+summary.negativesamenetwork.title=Result is negative
+summary.negativesamenetwork.body=We did not find IP address %s on or within a day of %s. But we did find other IP addresses of Tor relays in the same /%d network around the time:
+summary.positive.title=Result is positive
+summary.positive.body=We found one or more Tor relays on IP address %s on or within a day of %s that Tor clients were likely to know.
+summary.negative.title=Result is negative
+summary.negative.body=We did not find IP address %s on or within a day of %s.
+technicaldetails.heading=Technical details
+technicaldetails.pre=Looking up IP address %s on or within one day of %s. Tor clients could have selected this or these Tor relays to build circuits.
+technicaldetails.colheader.timestamp=Timestamp (UTC)
+technicaldetails.colheader.ip=IP address(es)
+technicaldetails.colheader.fingerprint=Identity fingerprint
+technicaldetails.colheader.nickname=Nickname
+technicaldetails.colheader.exit=Exit relay
+technicaldetails.nickname.unknown=Unknown
+technicaldetails.exit.unknown=Unknown
+technicaldetails.exit.yes=Yes
+technicaldetails.exit.no=No
+permanentlink.heading=Permanent link
+footer.abouttor.heading=About Tor
+footer.abouttor.body.text=Tor is an international software project to anonymize Internet traffic by %s. Therefore, if you see traffic from a Tor relay, this traffic usually originates from someone using Tor, rather than from the relay operator. The Tor Project and Tor relay operators have no records of the traffic that passes over the network and therefore cannot provide any information about its origin. Be sure to %s, and don't hesitate to %s for more information.
+footer.abouttor.body.link1=encrypting packets and sending them through a series of hops before they reach their destination
+footer.abouttor.body.link2=learn more about Tor
+footer.abouttor.body.link3=contact The Tor Project, Inc.
+footer.aboutexonerator.heading=About ExoneraTor
+footer.aboutexonerator.body=The ExoneraTor service maintains a database of IP addresses that have been part of the Tor network. It answers the question whether there was a Tor relay running on a given IP address on a given date. ExoneraTor may store more than one IP address per relay if relays use a different IP address for exiting to the Internet than for registering in the Tor network, and it stores whether a relay permitted transit of Tor traffic to the open Internet at that time.
+footer.language.name=English
+footer.language.text=This page is also available in the following languages:
+
diff --git a/src/main/resources/web/properties/ExoneraTor_de.properties b/src/main/resources/web/properties/ExoneraTor_de.properties
new file mode 100644
index 0000000..d830e31
--- /dev/null
+++ b/src/main/resources/web/properties/ExoneraTor_de.properties
@@ -0,0 +1,52 @@
+form.explanation=Geben Sie eine IP-Adresse und ein Datum ein um herauszufinden, ob diese IP-Adresse von einem Tor-Server verwendet wurde:
+form.ip.label=IP-Adresse
+form.timestamp.label=Datum
+form.search.label=Suchen
+summary.heading=Zusammenfassung
+summary.serverproblem.dbnoconnect.title=Server-Problem
+summary.serverproblem.dbnoconnect.body.text=Es kann keine Verbindung zur Datenbank hergestellt werden. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s.
+summary.serverproblem.dbnoconnect.body.link=lassen Sie es uns bitte wissen
+summary.serverproblem.dbempty.title=Server-Problem
+summary.serverproblem.dbempty.body.text=Die Datenbank scheint leer zu sein. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s.
+summary.serverproblem.dbempty.body.link=lassen Sie es uns bitte wissen
+summary.invalidparams.notimestamp.title=Kein Datum angegeben
+summary.invalidparams.notimestamp.body=Sie m\u00fcssen ein Datum angeben.
+summary.invalidparams.noip.title=Keine IP-Adresse angegeben.
+summary.invalidparams.noip.body=Sie m\u00fcssen eine IP-Adresse angeben.
+summary.invalidparams.timestamprange.title=Datum au\u00dferhalb des zul\u00e4ssigen Bereichs
+summary.invalidparams.timestamprange.body=Die Datenbank enth\u00e4lt keine Daten vom %s. Bitte w\u00e4hlen Sie ein Datum zwischen %s und %s aus.
+summary.invalidparams.invalidip.title=Ung\u00fcltige IP-Adresse
+summary.invalidparams.invalidip.body=%s ist keine g\u00fcltige IP-Adresse. Zul\u00e4ssige IP-Adress-Formate sind %s oder %s.
+summary.invalidparams.invalidtimestamp.title=Ung\u00fcltiges Datum
+summary.invalidparams.invalidtimestamp.body=%s ist kein g\u00fcltiges Datum. Das zul\u00e4ssige Datumsformat ist %s.
+summary.serverproblem.nodata.title=Server-Problem
+summary.serverproblem.nodata.body.text=Die Datenbank enth\u00e4lt keine Daten f\u00fcr das angegebene Datum. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s.
+summary.serverproblem.nodata.body.link=lassen Sie es uns bitte wissen
+summary.negativesamenetwork.title=Keine \u00dcbereinstimmungen gefunden
+summary.negativesamenetwork.body=Es wurde kein Tor-Server mit der IP-Adresse %s am %s bzw. am Tag vorher oder nachher gefunden. Es wurden jedoch benachbarte IP-Adressen im selben /%d-Netzwerk an diesen Tagen gefunden:
+summary.positive.title=\u00dcbereinstimmungen gefunden
+summary.positive.body=Es wurde ein oder mehrere Tor-Server mit IP-Adresse %s am %s bzw. am Tag vorher oder nachher gefunden, die den Tor-Clients bekannt waren.
+summary.negative.title=Keine \u00dcbereinstimmungen gefunden
+summary.negative.body=Es wurde kein Tor-Server mit der IP-Adresse %s am %s bzw. am Tag vorher oder nachher gefunden.
+technicaldetails.heading=Technische Details
+technicaldetails.pre=Es wird nach Tor-Servern mit IP-Adresse %s am %s bzw. am Tag vorher oder nachher gesucht. Tor-Clients konnten diese Tor-Server verwenden, um Verbindungen aufzubauen.
+technicaldetails.colheader.timestamp=Datum/Uhrzeit (UTC)
+technicaldetails.colheader.ip=IP-Adresse(n)
+technicaldetails.colheader.fingerprint=Identit\u00e4tsschl\u00fcssel
+technicaldetails.colheader.nickname=Spitzname
+technicaldetails.colheader.exit=Exit-Server
+technicaldetails.nickname.unknown=Unbekannt
+technicaldetails.exit.unknown=Unbekannt
+technicaldetails.exit.yes=Ja
+technicaldetails.exit.no=Nein
+permanentlink.heading=Dauerhafter Link
+footer.abouttor.heading=\u00dcber Tor
+footer.abouttor.body.text=Tor ist ein internationales Softwareprojekt, um Internetverbindungen zu anonymisieren indem %s. Wenn Sie eine Internetverbindung sehen, die von einem Tor-Server kommt, stammt diese in der Regel von jemandem, der Tor benutzt, und nicht vom Betreiber des Tor-Servers selbst. Weder The Tor Project, Inc. noch die Tor-Server-Betreiber besitzen Aufzeichnungen \u00fcber die Internetverbindungen im Tor-Netzwerk und k\u00f6nnen daher keine Auskunft \u00fcber den Ursprung der Internetverbindung geben. Mehr Informationen \u00fcber Tor erhalten Sie %s. The Tor Project, Inc. steht Ihnen jederzeit f\u00fcr %s zur Verf\u00fcgung.
+footer.abouttor.body.link1=Datenpakete verschl\u00fcsselt und \u00fcber eine Reihe von Stationen geleitet werden, bevor diese ihr Ziel erreichen
+footer.abouttor.body.link2=hier
+footer.abouttor.body.link3=Fragen
+footer.aboutexonerator.heading=\u00dcber ExoneraTor
+footer.aboutexonerator.body=Der ExoneraTor-Dienst basiert auf einer Datenbank von IP-Adressen, die Teil des Tor-Netzwerks sind oder waren. Dieser Dienst beantwortet die Frage, ob es an einem bestimmten Tag einen Tor-Server mit einer bestimmten IP-Adresse gegeben hat. ExoneraTor kann in einigen F\u00e4llen mehr als nur eine IP-Adresse pro Tor-Server ausgeben, falls ein Tor-Server verschiedene IP-Adressen f\u00fcr ausgehende Verbindungen und die Registrierung im Tor-Netzwerk verwendet hat. ExoneraTor speichert au\u00dferdem, ob ein Tor-Server Verbindungen ins offene Internet zugelassen hat oder nicht.
+footer.language.name=Deutsch
+footer.language.text=Diese Seite gibt es auch in den folgenden Sprachen:
+
diff --git a/src/main/resources/web/properties/ExoneraTor_fr.properties b/src/main/resources/web/properties/ExoneraTor_fr.properties
new file mode 100644
index 0000000..70d4d2f
--- /dev/null
+++ b/src/main/resources/web/properties/ExoneraTor_fr.properties
@@ -0,0 +1,52 @@
+form.explanation=Saisir une adresse IP et une date afin de savoir si l'adresse a \u00e9t\u00e9 utilis\u00e9e comme relais Tor \:
+form.ip.label=Adresse IP
+form.timestamp.label=Date
+form.search.label=Rechercher
+summary.heading=R\u00e9sum\u00e9
+summary.serverproblem.dbnoconnect.title=Probl\u00e8me de serveur
+summary.serverproblem.dbnoconnect.body.text=Impossible de se connecter \u00e0 la base de donn\u00e9es. Veuillez ressayer ult\u00e9rieurement. Si ce probl\u00e8me perdure, veuillez %s \!
+summary.serverproblem.dbnoconnect.body.link=nous en informer
+summary.serverproblem.dbempty.title=Probl\u00e8me de serveur
+summary.serverproblem.dbempty.body.text=La base de donn\u00e9es semble \u00eatre vide. Veuillez ressayer ult\u00e9rieurement. Si ce probl\u00e8me perdure, veuillez %s \!
+summary.serverproblem.dbempty.body.link=nous en informer
+summary.invalidparams.notimestamp.title=Aucune date n'a \u00e9t\u00e9 donn\u00e9e en param\u00e8tre
+summary.invalidparams.notimestamp.body=D\u00e9sol\u00e9, vous devez aussi pr\u00e9ciser une date.
+summary.invalidparams.noip.title=Aucune adresse IP n'a \u00e9t\u00e9 donn\u00e9e en param\u00e8tre
+summary.invalidparams.noip.body=D\u00e9sol\u00e9, vous devez aussi fournir une adresse IP.
+summary.invalidparams.timestamprange.title=Date hors p\u00e9riode couverte
+summary.invalidparams.timestamprange.body=D\u00e9sol\u00e9, la base de donn\u00e9es ne contient aucune donn\u00e9e de %s. Veuillez choisir une date entre %s et %s.
+summary.invalidparams.invalidip.title=Adresse IP invalide
+summary.invalidparams.invalidip.body=D\u00e9sol\u00e9, %s n'est pas une adresse IP valide. Les formats d'adresse IP attendus sont %s ou %s.
+summary.invalidparams.invalidtimestamp.title=Date invalide
+summary.invalidparams.invalidtimestamp.body=D\u00e9sol\u00e9, %s n'est pas une date valide. Le format de date attendu est %s.
+summary.serverproblem.nodata.title=Probl\u00e8me de serveur
+summary.serverproblem.nodata.body.text=La base de donn\u00e9es ne contient aucune donn\u00e9e pour la date demand\u00e9e. Veuillez ressayer ult\u00e9rieurement. Si le probl\u00e8me perdure, veuillez %s \!
+summary.serverproblem.nodata.body.link=nous en informer
+summary.negativesamenetwork.title=R\u00e9sultat n\u00e9gatif
+summary.negativesamenetwork.body=Nous n'avons pas trouv\u00e9 l'adresse IP %s, le %s ou \u00e0 un jour pr\u00e8s. Mais nous avons trouv\u00e9 d'autres adresses IP de relais Tor dans le m\u00eame r\u00e9seau /%d aux alentours de cette date \:
+summary.positive.title=R\u00e9sultat positif
+summary.positive.body=Nous avons trouv\u00e9 un ou plusieurs relais Tor \u00e0 l'adresse IP %s probablement connus des clients Tor le %s ou \u00e0 un jour pr\u00e8s.
+summary.negative.title=R\u00e9sultat n\u00e9gatif
+summary.negative.body=Nous n'avons pas trouv\u00e9 l'adresse IP %s, le %s ou \u00e0 un jour pr\u00e8s.
+technicaldetails.heading=D\u00e9tails techniques
+technicaldetails.pre=Recherche de l'adresse IP %s, le %s ou \u00e0 un jour pr\u00e8s. Des clients Tor pourraient avoir choisi ce ou ces relais Tor pour construire des circuits.
+technicaldetails.colheader.timestamp=Date et heure (UTC)
+technicaldetails.colheader.ip=Adresse(s) IP
+technicaldetails.colheader.fingerprint=Empreinte
+technicaldetails.colheader.nickname=Pseudonyme
+technicaldetails.colheader.exit=Relais de sortie
+technicaldetails.nickname.unknown=Inconnu
+technicaldetails.exit.unknown=Inconnu
+technicaldetails.exit.yes=Oui
+technicaldetails.exit.no=Non
+permanentlink.heading=Lien permanent
+footer.abouttor.heading=\u00c0 propos de Tor
+footer.abouttor.body.text=Tor est un projet international d\u00e9veloppant des logiciels pour anonymiser le trafic Internet en %s. Par cons\u00e9quent, si vous voyez du trafic en provenance d'un relais Tor, ce trafic provient habituellement de quelqu'un qui utilise Tor, plut\u00f4t que de l'op\u00e9rateur du relais. Le projet Tor et les op\u00e9rateurs de relais Tor n'ont aucune trace du trafic relay\u00e9 par le r\u00e9seau et ne peuvent donc fournir aucune information sur son origine. N'h\u00e9sitez pas \u00e0 vous %s et n'h\u00e9sitez pas \u00e0 %s pour obtenir d'avantage d'informations.
+footer.abouttor.body.link1=chiffrant les paquets et en les faisant transiter par une s\u00e9rie de relais avant qu'ils n'atteignent leur destination
+footer.abouttor.body.link2=renseigner d'avantage au sujet de Tor
+footer.abouttor.body.link3=contacter \u00ab\u00a0The Tor Project, Inc.\u00a0\u00bb
+footer.aboutexonerator.heading=\u00c0 propos d'ExoneraTor
+footer.aboutexonerator.body=Le service ExoneraTor g\u00e8re une base de donn\u00e9es d'adresses IP qui ont fait partie du r\u00e9seau Tor. Il permet de savoir si un relais Tor fonctionnait pour une adresse IP donn\u00e9e \u00e0 une date pr\u00e9cise. ExoneraTor peut enregistrer plus d'une adresse IP par relais si ces derniers utilisent une adresse IP diff\u00e9rente pour se connecter \u00e0 Internet de celle utilis\u00e9e pour s'enregistrer sur le r\u00e9seau Tor. ExoneraTor enregistre \u00e9galement les dates et heures auxquelles un relais a permis de faire transiter du trafic en provenance de Tor vers Internet.
+footer.language.name=fran\u00e7ais
+footer.language.text=Cette page est aussi disponible dans les langues suivantes :
+
diff --git a/src/main/resources/web/properties/ExoneraTor_ro.properties b/src/main/resources/web/properties/ExoneraTor_ro.properties
new file mode 100644
index 0000000..3663c06
--- /dev/null
+++ b/src/main/resources/web/properties/ExoneraTor_ro.properties
@@ -0,0 +1,52 @@
+form.explanation=Introduce\u021bi o adres\u0103 IP si o dat\u0103 pentru a afla dac\u0103 respectiva adresa a fost folosita de un nod Tor.
+form.ip.label=Adres\u0103 IP
+form.timestamp.label=Dat\u0103
+form.search.label=Caut\u0103
+summary.heading=Sumar
+summary.serverproblem.dbnoconnect.title=Problem\u0103 de server
+summary.serverproblem.dbnoconnect.body.text=Imposibil de conectat la baza de date. V\u0103 rug\u0103m s\u0103 re\u00eencerca\u021bi mai t\u00eerziu. Dac\u0103 problema persist\u0103, v\u0103 rug\u0103m %s\!
+summary.serverproblem.dbnoconnect.body.link=Informa\u021bi-ne
+summary.serverproblem.dbempty.title=Problem\u0103 de server
+summary.serverproblem.dbempty.body.text=Baza de date pare a fi goal\u0103. V\u0103 rug\u0103m s\u0103 re\u00eencerca\u021bi mai t\u00eerziu. Dac\u0103 problema persist\u0103, v\u0103 rug\u0103m %s\!
+summary.serverproblem.dbempty.body.link=Informa\u021bi-ne
+summary.invalidparams.notimestamp.title=Lips\u0103 parametru dat\u0103
+summary.invalidparams.notimestamp.body=Ne pare r\u0103u, dar trebuie s\u0103 introduce\u021bi un parametru dat\u0103.
+summary.invalidparams.noip.title=Lips\u0103 parametru adres\u0103 IP
+summary.invalidparams.noip.body=Ne pare r\u0103u, trebuie de asemenea s\u0103 introduce\u021bi adresa IP.
+summary.invalidparams.timestamprange.title=Parametrul de dat\u0103 este in afara intervalului
+summary.invalidparams.timestamprange.body=Ne pare r\u0103u, baza de date nu con\u021bine informa\u021bii de la %s. V\u0103 rug\u0103m s\u0103 alege\u021bi o dat\u0103 \u00eentre %s \u0219i %s.
+summary.invalidparams.invalidip.title=Parametrul adresei IP este incorect
+summary.invalidparams.invalidip.body=Ne pare r\u0103u, %s nu este o adres\u0103 IP valid\u0103. Formatele corecte ale unei adresei IP sunt %s sau %s.
+summary.invalidparams.invalidtimestamp.title=Parametru dat\u0103 incorect
+summary.invalidparams.invalidtimestamp.body=Ne pare r\u0103u, %s nu este o dat\u0103 valid\u0103. Formatul corect al datei este %s.
+summary.serverproblem.nodata.title=Problem\u0103 de server
+summary.serverproblem.nodata.body.text=Baza de date nu con\u021bine informatii pentru data solicitat\u0103. V\u0103 rug\u0103m \u00eencerca\u021bi mai t\u00e2rziu. Dac\u0103 problema persist\u0103, va rug\u0103m %s\!
+summary.serverproblem.nodata.body.link=Informa\u021bi-ne
+summary.negativesamenetwork.title=Rezultatul este negativ
+summary.negativesamenetwork.body=Nu am g\u0103sit adresa IP %s la data de %s sau la o zi distan\u021b\u0103. Dar am g\u0103sit alte adrese IP folosite de noduri Tor \u00een aceea\u0219i /%d re\u021bea \u00een jurul orei\:
+summary.positive.title=Rezultatul este pozitiv
+summary.positive.body=Am g\u0103sit unul sau mai multe noduri Tor care au folosit adresa IP %s la data de %s sau la o zi distan\u021b\u0103 care puteau fi cunoscute de clien\u021bii Tor.
+summary.negative.title=Rezultatul este negativ
+summary.negative.body=Nu am g\u0103sit adresa IP %s la data de %s sau la o zi distan\u021b\u0103.
+technicaldetails.heading=Detalii tehnice
+technicaldetails.pre=C\u0103utare adresa IP %s la data de %s sau la o zi distan\u021b\u0103. Clien\u021bii Tor ar fi putut alege acest sau aceste noduri Tor pentru a construi circuite.
+technicaldetails.colheader.timestamp=Dat\u0103(fus UTC)
+technicaldetails.colheader.ip=Adres\u0103/Adrese IP
+technicaldetails.colheader.fingerprint=Amprenta digital\u0103 de identificare a nodului
+technicaldetails.colheader.nickname=Pseudonim
+technicaldetails.colheader.exit=Nod de ie\u0219ire
+technicaldetails.nickname.unknown=Necunoscut
+technicaldetails.exit.unknown=Necunoscut
+technicaldetails.exit.yes=Da
+technicaldetails.exit.no=Nu
+permanentlink.heading=Link permanent
+footer.abouttor.heading=Despre Tor
+footer.abouttor.body.text=Tor este un proiect software interna\u021bional pentru anonimizarea traficului de internet prin %s. De aceea, dac\u0103 vede\u021bi trafic de la un nod Tor, acest trafic provine mai degrab\u0103 de la un client care folose\u0219te Tor, nu de la operatorul releului. The Tor Project, Inc. (organiza\u021bia) \u0219i operatorii nodurilor Tor nu de\u021bin informa\u021bii referitoare la traficul care trece prin re\u021bea \u0219i, implicit, prin nodurile operate de ace\u0219tia, de aceea nu pot furniza informa\u021bii despre originea acestuia. Asigura\u021bi-v\u0103 c\u0103 %s \u0219i nu ezita\u021bi s\u0103 %s pentru mai multe informa\u021bii.
+footer.abouttor.body.link1=criptarea pachetelor de date \u0219i transmiterea acestora printr-o serie de hop-uri \u00eenainte ca ele s\u0103 ajung\u0103 la destina\u021bie
+footer.abouttor.body.link2=Afla\u021bi mai multe despre Tor
+footer.abouttor.body.link3=contacta\u021bi The Tor Project, Inc.
+footer.aboutexonerator.heading=Despre ExoneraTor
+footer.aboutexonerator.body=Serviciul ExoneraTor opereaz\u0103 o baz\u0103 de date de adrese IP care au fost parte din re\u021belaua Tor la un anumit moment. Acest serviciu r\u0103spunde la \u00eentrebarea dac\u0103 a existat un nod Tor care a func\u021bionat pe o anumit\u0103 adres\u0103 IP la o anumit\u0103 dat\u0103. ExoneraTor poate stoca mai mult de o adresa IP per nod dac\u0103 nodurile folosesc o alt\u0103 adres\u0103 IP pentru a ie\u0219i pe internet dec\u00e2t cea folosit\u0103 pentru \u00eenregistrarea \u00een re\u021beaua Tor \u0219i stocheaz\u0103 dac\u0103 un nod a permis tranzitarea de trafic din re\u021beaua Tor catre internetul public la acea dat\u0103.
+footer.language.name=rom\u00e2n\u0103
+footer.language.text=Aceast\u0103 pagin\u0103 mai este disponibil\u0103 \u00een urm\u0103toarele limbi:
+
diff --git a/src/main/resources/web/properties/ExoneraTor_sv.properties b/src/main/resources/web/properties/ExoneraTor_sv.properties
new file mode 100644
index 0000000..277a5b8
--- /dev/null
+++ b/src/main/resources/web/properties/ExoneraTor_sv.properties
@@ -0,0 +1,52 @@
+form.explanation=Ange en IP-adress och ett datum f\u00f6r att f\u00e5 reda p\u00e5 om adressen anv\u00e4ndes av ett Tor-rel\u00e4\:
+form.ip.label=IP-adress
+form.timestamp.label=Datum
+form.search.label=S\u00f6k
+summary.heading=Sammanfattning
+summary.serverproblem.dbnoconnect.title=Serverproblem
+summary.serverproblem.dbnoconnect.body.text=Kunde inte ansluta till databasen. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s\!
+summary.serverproblem.dbnoconnect.body.link=l\u00e5t oss f\u00e5 veta
+summary.serverproblem.dbempty.title=Serverproblem
+summary.serverproblem.dbempty.body.text=Databasen verkar vara tom. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s\!
+summary.serverproblem.dbempty.body.link=l\u00e5t oss f\u00e5 veta
+summary.invalidparams.notimestamp.title=Inget datum angivet
+summary.invalidparams.notimestamp.body=Datum m\u00e5ste anges.
+summary.invalidparams.noip.title=Ingen IP-adress angiven
+summary.invalidparams.noip.body=IP-adress m\u00e5ste anges.
+summary.invalidparams.timestamprange.title=Ogiltigt datum
+summary.invalidparams.timestamprange.body=Databasen inneh\u00e5ller inte n\u00e5got data f\u00f6r %s. V\u00e4nligen v\u00e4lj ett datum mellan %s och %s.
+summary.invalidparams.invalidip.title=Felaktig IP-adress
+summary.invalidparams.invalidip.body=%s \u00e4r inte en giltig IP-adress. F\u00f6rv\u00e4ntat format p\u00e5 IP-adresser \u00e4r %s eller %s.
+summary.invalidparams.invalidtimestamp.title=Ogiltigt datum.
+summary.invalidparams.invalidtimestamp.body=%s \u00e4r inte ett giltigt datum. F\u00f6rv\u00e4ntat datumformat \u00e4r %s.
+summary.serverproblem.nodata.title=Serverproblem
+summary.serverproblem.nodata.body.text=Databasen inneh\u00e5ller inte n\u00e5got data f\u00f6r det efterfr\u00e5gade datumet. V\u00e4nligen f\u00f6rs\u00f6k igen senare. Om problemet kvarst\u00e5r, v\u00e4nligen %s\!
+summary.serverproblem.nodata.body.link=l\u00e5t oss f\u00e5 veta
+summary.negativesamenetwork.title=Resultatet \u00e4r negativt
+summary.negativesamenetwork.body=Vi kunde inte hitta IP-adress %s p\u00e5 eller inom en dag fr\u00e5n %s. Men vi hittade andra IP-adresser som anv\u00e4ndes av Tor-rel\u00e4n i samma /%d-n\u00e4tverk runt den tiden\:
+summary.positive.title=Resultatet \u00e4r positivt
+summary.positive.body=Vi hittade ett eller flera Tor-rel\u00e4n p\u00e5 IP-adress %s p\u00e5 eller inom en dag fr\u00e5n %s som Tor-klienter f\u00f6rmodligen k\u00e4nde till.
+summary.negative.title=Resultatet \u00e4r negativt
+summary.negative.body=Vi kunde inte hitta IP-adress %s p\u00e5 eller inom en dag fr\u00e5n %s.
+technicaldetails.heading=Tekniska detaljer
+technicaldetails.pre=Letar upp IP-adress %s p\u00e5 eller inom en dag fr\u00e5n %s. Tor-klienter kan ha valt denna eller dessa Tor-rel\u00e4n vid anslutning via Tor.
+technicaldetails.colheader.timestamp=Tidsst\u00e4mpel (UTC)
+technicaldetails.colheader.ip=IP adress(er)
+technicaldetails.colheader.fingerprint=Identitet ("fingerprint")
+technicaldetails.colheader.nickname=Namn
+technicaldetails.colheader.exit=Exit-rel\u00e4
+technicaldetails.nickname.unknown=Ok\u00e4nd
+technicaldetails.exit.unknown=Ok\u00e4nd
+technicaldetails.exit.yes=Ja
+technicaldetails.exit.no=Nej
+permanentlink.heading=Permanent l\u00e4nk
+footer.abouttor.heading=Om Tor
+footer.abouttor.body.text=Tor \u00e4r ett internationellt mjukvaruprojekt f\u00f6r att anonymisera internettrafik genom att %s. Om du ser trafik fr\u00e5n ett Tor-rel\u00e4 s\u00e5 kommer den trafiken oftast fr\u00e5n n\u00e5gon som anv\u00e4nder sig av Tor snarare \u00e4n fr\u00e5n sj\u00e4lva rel\u00e4operat\u00f6ren. Vare sig Tor-projektet eller Tor-rel\u00e4operat\u00f6rer har n\u00e5gon historik \u00f6ver trafiken som passerar genom n\u00e4tverket och kan d\u00e4rf\u00f6r inte ge n\u00e5gon information om dess ursprung. Se till att %s och tveka inte att %s f\u00f6r ytterligare information.
+footer.abouttor.body.link1=kryptera datat och skicka det genom flera hopp innan det n\u00e5r sin destination
+footer.abouttor.body.link2=l\u00e4sa p\u00e5 om Tor
+footer.abouttor.body.link3=kontakta Tor-projektet
+footer.aboutexonerator.heading=Om ExoneraTor
+footer.aboutexonerator.body=Tj\u00e4nsten ExoneraTor uppr\u00e4tth\u00e5ller en databas \u00f6ver IP-adresser som har varit en del av Tor-n\u00e4tverket. Den ger svar p\u00e5 fr\u00e5gan om det var ett Tor-rel\u00e4 som anv\u00e4nde en viss IP-adress vid ett givet datum. ExoneraTor kan komma att lagra fler \u00e4n en IP-adress per rel\u00e4 f\u00f6r rel\u00e4n som anv\u00e4nder en annan IP-adress f\u00f6r att ansluta till internet \u00e4n den som anv\u00e4ndes f\u00f6r att registrera sig i Tor-n\u00e4tverket. Huruvida ett rel\u00e4 har till\u00e5tit Tor-trafik ut mot internet vid tidpunkten eller ej lagras ocks\u00e5.
+footer.language.name=svenska
+footer.language.text=Denna sida finns \u00e4ven p\u00e5 f\u00f6ljande spr\u00e5k:
+
1
0

26 Sep '18
commit c5f0530e1b2ffba49dc51155ca80d3d5104dfe15
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Mon Aug 20 15:20:36 2018 +0200
Use more powerful Map methods.
---
src/main/java/org/torproject/metrics/web/News.java | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/main/java/org/torproject/metrics/web/News.java b/src/main/java/org/torproject/metrics/web/News.java
index deeddf2..bd80ad4 100644
--- a/src/main/java/org/torproject/metrics/web/News.java
+++ b/src/main/java/org/torproject/metrics/web/News.java
@@ -87,11 +87,7 @@ public class News {
}
List<String> placeNames = new ArrayList<>();
for (String place : this.places) {
- if (countries.containsKey(place)) {
- placeNames.add(countries.get(place));
- } else {
- placeNames.add("Unknown Country");
- }
+ placeNames.add(countries.getOrDefault(place, "Unknown Country"));
}
return placeNames;
}
1
0
commit 429c9e01a5425ad6f39432adcea97f85d8d30813
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Mon Aug 20 15:06:18 2018 +0200
Use diamond operator.
---
src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java | 2 +-
.../torproject/metrics/stats/hidserv/ComputedNetworkFractions.java | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java b/src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java
index 5cafb1b..004bcf8 100644
--- a/src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java
+++ b/src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java
@@ -93,7 +93,7 @@ public class Aggregator {
}
if (extrapolated.getFractionDirOnionsSeen() > 0.0) {
if (!extrapolatedOnions.containsKey(date)) {
- extrapolatedOnions.put(date, new ArrayList<double[]>());
+ extrapolatedOnions.put(date, new ArrayList<>());
}
extrapolatedOnions.get(date).add(new double[] {
extrapolated.getExtrapolatedDirOnionsSeen(),
diff --git a/src/main/java/org/torproject/metrics/stats/hidserv/ComputedNetworkFractions.java b/src/main/java/org/torproject/metrics/stats/hidserv/ComputedNetworkFractions.java
index 48f3679..64547cc 100644
--- a/src/main/java/org/torproject/metrics/stats/hidserv/ComputedNetworkFractions.java
+++ b/src/main/java/org/torproject/metrics/stats/hidserv/ComputedNetworkFractions.java
@@ -84,7 +84,7 @@ public class ComputedNetworkFractions implements Document {
}
private static Map<Long, String> previouslyFormattedDates =
- Collections.synchronizedMap(new HashMap<Long, String>());
+ Collections.synchronizedMap(new HashMap<>());
/** Returns a string representation of this object, consisting of two
* strings: the first string contains fingerprint and valid-after date,
@@ -117,7 +117,7 @@ public class ComputedNetworkFractions implements Document {
}
private static Map<String, Long> previouslyParsedDates =
- Collections.synchronizedMap(new HashMap<String, Long>());
+ Collections.synchronizedMap(new HashMap<>());
/** Instantiates an empty fractions object that will be initialized more
* by the parse method.
1
0

26 Sep '18
commit bbb15696ebf2259ae15fc4d94af372559e1a2b09
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Mon Aug 20 15:26:34 2018 +0200
Replace Collections.sort with List.sort.
---
src/main/java/org/torproject/metrics/stats/advbwdist/Main.java | 6 ++----
src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java | 4 +---
src/main/java/org/torproject/metrics/stats/hidserv/Simulate.java | 5 ++---
src/main/java/org/torproject/metrics/web/MetricServlet.java | 4 +---
src/main/java/org/torproject/metrics/web/NewsServlet.java | 4 +---
5 files changed, 7 insertions(+), 16 deletions(-)
diff --git a/src/main/java/org/torproject/metrics/stats/advbwdist/Main.java b/src/main/java/org/torproject/metrics/stats/advbwdist/Main.java
index 6565961..a16e7b0 100644
--- a/src/main/java/org/torproject/metrics/stats/advbwdist/Main.java
+++ b/src/main/java/org/torproject/metrics/stats/advbwdist/Main.java
@@ -95,10 +95,8 @@ public class Main {
}
/* Write advertised bandwidths of n-th fastest relays/exits. */
- Collections.sort(advertisedBandwidthsAllRelays,
- Collections.reverseOrder());
- Collections.sort(advertisedBandwidthsExitsOnly,
- Collections.reverseOrder());
+ advertisedBandwidthsAllRelays.sort(Collections.reverseOrder());
+ advertisedBandwidthsExitsOnly.sort(Collections.reverseOrder());
int[] fastestRelays = new int[] { 1, 2, 3, 5, 10, 20, 30, 50, 100,
200, 300, 500, 1000, 2000, 3000, 5000 };
for (int fastestRelay : fastestRelays) {
diff --git a/src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java b/src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java
index 2420485..9ef3ee8 100644
--- a/src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java
+++ b/src/main/java/org/torproject/metrics/stats/hidserv/Aggregator.java
@@ -8,7 +8,6 @@ import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -124,8 +123,7 @@ public class Aggregator {
/* Sort extrapolated network totals contained in the first array
* element. (The second array element contains the computed
* network fraction as weight.) */
- Collections.sort(weightedValues,
- Comparator.comparingDouble(doubles -> doubles[0]));
+ weightedValues.sort(Comparator.comparingDouble(doubles -> doubles[0]));
/* For the weighted mean, sum up all previously extrapolated
* values weighted with their network fractions (which happens to
diff --git a/src/main/java/org/torproject/metrics/stats/hidserv/Simulate.java b/src/main/java/org/torproject/metrics/stats/hidserv/Simulate.java
index 2c525d7..7acf1e8 100644
--- a/src/main/java/org/torproject/metrics/stats/hidserv/Simulate.java
+++ b/src/main/java/org/torproject/metrics/stats/hidserv/Simulate.java
@@ -171,8 +171,7 @@ public class Simulate {
}
} while (totalReportingProbability < fraction - 0.001
|| totalReportingProbability > fraction + 0.001);
- Collections.sort(singleRelayExtrapolations,
- Comparator.comparingDouble(o -> o[0]));
+ singleRelayExtrapolations.sort(Comparator.comparingDouble(o -> o[0]));
double totalProbability = 0.0;
double totalValues = 0.0;
double totalInterquartileProbability = 0.0;
@@ -326,7 +325,7 @@ public class Simulate {
}
} while (totalReportingProbability < fraction - 0.001
|| totalReportingProbability > fraction + 0.001);
- Collections.sort(singleRelayExtrapolations,
+ singleRelayExtrapolations.sort(
Comparator.comparingDouble(doubles -> doubles[0]));
double totalProbability = 0.0;
double totalValues = 0.0;
diff --git a/src/main/java/org/torproject/metrics/web/MetricServlet.java b/src/main/java/org/torproject/metrics/web/MetricServlet.java
index b3de046..3b279a9 100644
--- a/src/main/java/org/torproject/metrics/web/MetricServlet.java
+++ b/src/main/java/org/torproject/metrics/web/MetricServlet.java
@@ -5,7 +5,6 @@ package org.torproject.metrics.web;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -71,8 +70,7 @@ public abstract class MetricServlet extends AnyServlet {
}
}
this.sortedEvents.addAll(ContentProvider.getInstance().getNewsList());
- Collections.sort(this.sortedEvents,
- (o1, o2) -> o2.getStart().compareTo(o1.getStart()));
+ this.sortedEvents.sort((o1, o2) -> o2.getStart().compareTo(o1.getStart()));
}
}
diff --git a/src/main/java/org/torproject/metrics/web/NewsServlet.java b/src/main/java/org/torproject/metrics/web/NewsServlet.java
index fc4d39f..f47f189 100644
--- a/src/main/java/org/torproject/metrics/web/NewsServlet.java
+++ b/src/main/java/org/torproject/metrics/web/NewsServlet.java
@@ -6,7 +6,6 @@ package org.torproject.metrics.web;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
@@ -36,8 +35,7 @@ public class NewsServlet extends AnyServlet {
sortedNews.add(news);
}
}
- Collections.sort(sortedNews,
- (o1, o2) -> o1.getStart().compareTo(o2.getStart()) * -1);
+ sortedNews.sort((o1, o2) -> o1.getStart().compareTo(o2.getStart()) * -1);
this.sortedNews = sortedNews;
SortedMap<String, String> countries = new TreeMap<>();
for (String[] country : Countries.getInstance().getCountryList()) {
1
0