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 2014
- 22 participants
- 980 discussions

05 Sep '14
commit a14efee5b879b8770184452beddff3b915354aca
Author: Translation commit bot <translation(a)torproject.org>
Date: Fri Sep 5 10:15:49 2014 +0000
Update translations for tails-iuk
---
id.po | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/id.po b/id.po
index ae0df92..75734e5 100644
--- a/id.po
+++ b/id.po
@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
"POT-Creation-Date: 2014-08-31 15:23+0200\n"
-"PO-Revision-Date: 2014-09-01 09:20+0000\n"
-"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
+"PO-Revision-Date: 2014-09-05 10:13+0000\n"
+"Last-Translator: km242saya <pencurimangga(a)gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/torproject/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,7 +26,7 @@ msgstr "Untuk informasi debugging, lihat /home/amnesia/.xsession-errors"
#: ../lib/Tails/IUK/Frontend.pm:216
msgid "Error while checking for upgrades"
-msgstr ""
+msgstr "Terjadi kesalahan dalam proses pengecekan pemutakhiran"
#: ../lib/Tails/IUK/Frontend.pm:219
msgid ""
@@ -35,19 +35,19 @@ msgid ""
"Check your network connection, and restart Tails to try upgrading again.\n"
"\n"
"If the problem persists, go to file:///usr/share/doc/tails/website/doc/upgrade/error/check.en.html"
-msgstr ""
+msgstr "<b>Tidak dapat menentukan pemutakhiran yang ada dari situs kami</b>\n\nPeriksa sambungan jaringan, dan restart Tails untuk mencoba pemutakhiran kembali\n\nJika masalah tetap terjadi, silahkan buka file:///usr/share/doc/tails/website/doc/upgrade/error/check.en.html"
#: ../lib/Tails/IUK/Frontend.pm:234
msgid "no automatic upgrade is available from our website for this version"
-msgstr ""
+msgstr "tidak ada pemutakhiran otomatis yang tersedia di situs kami untuk versi ini"
#: ../lib/Tails/IUK/Frontend.pm:240
msgid "your device was not created using Tails Installer"
-msgstr ""
+msgstr "perangkat anda tidak digunakan untuk memakai Tails Installer"
#: ../lib/Tails/IUK/Frontend.pm:245
msgid "Tails was started from a DVD or a read-only device"
-msgstr ""
+msgstr "Memulai Tails dari DVD atau perangkat read-only"
#: ../lib/Tails/IUK/Frontend.pm:250
msgid "there is not enough free space on the Tails system partition"
@@ -55,24 +55,24 @@ msgstr ""
#: ../lib/Tails/IUK/Frontend.pm:255
msgid "not enough memory is available on this system"
-msgstr ""
+msgstr "memori tidak mencukupi pada system ini"
#: ../lib/Tails/IUK/Frontend.pm:261
#, perl-brace-format
msgid "No explanation available for reason '%{reason}s'."
-msgstr ""
+msgstr "tidak ada penjelasan yang tersedia untuk sebab '%{reason}s'."
#: ../lib/Tails/IUK/Frontend.pm:279
msgid "XXX HEJ XXX"
-msgstr ""
+msgstr "XXX HEJ XXX"
#: ../lib/Tails/IUK/Frontend.pm:285
msgid "The system is up-to-date"
-msgstr ""
+msgstr "Sistem paling mutakhir"
#: ../lib/Tails/IUK/Frontend.pm:290
msgid "This version of Tails is outdated, and may have security issues."
-msgstr ""
+msgstr "Versi ini tidak mutakhir, dan mungkin dapat menyebabkan permasalahan keamanan."
#: ../lib/Tails/IUK/Frontend.pm:322
#, perl-brace-format
@@ -116,15 +116,15 @@ msgstr ""
#: ../lib/Tails/IUK/Frontend.pm:389
msgid "Upgrade available"
-msgstr ""
+msgstr "pemutakhiran tersedia"
#: ../lib/Tails/IUK/Frontend.pm:390
msgid "Upgrade now"
-msgstr ""
+msgstr "mutakhirkan sekarang"
#: ../lib/Tails/IUK/Frontend.pm:391
msgid "Upgrade later"
-msgstr ""
+msgstr "mutakhirkan nanti"
#: ../lib/Tails/IUK/Frontend.pm:399
#, perl-brace-format
1
0

[translation/tor-launcher-properties] Update translations for tor-launcher-properties
by translation@torproject.org 05 Sep '14
by translation@torproject.org 05 Sep '14
05 Sep '14
commit 6deb61b1884eb6103b39a7f1b3982a8e0c20f2df
Author: Translation commit bot <translation(a)torproject.org>
Date: Fri Sep 5 10:15:30 2014 +0000
Update translations for tor-launcher-properties
---
id/torlauncher.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/id/torlauncher.properties b/id/torlauncher.properties
index 43db58a..fc86fca 100644
--- a/id/torlauncher.properties
+++ b/id/torlauncher.properties
@@ -8,7 +8,7 @@ torlauncher.tor_exited2=Restarting Tor will not close your browser tabs.
torlauncher.tor_controlconn_failed=Tidak dapat tersambung pada port Tor
torlauncher.tor_failed_to_start=Tor gagal untuk memulai.
torlauncher.tor_control_failed=Failed to take control of Tor.
-torlauncher.tor_bootstrap_failed=Tor failed to establish a Tor network connection.
+torlauncher.tor_bootstrap_failed=Tor tidak dapat tersambung pada jaringan.
torlauncher.tor_bootstrap_failed_details=%1$S failed (%2$S).
torlauncher.unable_to_start_tor=Tidak dapat memulai Tor\n\n%S
1
0

[translation/tails-iuk_completed] Update translations for tails-iuk_completed
by translation@torproject.org 05 Sep '14
by translation@torproject.org 05 Sep '14
05 Sep '14
commit 9abccf183609fc1854333272cf308ca085d7e9b5
Author: Translation commit bot <translation(a)torproject.org>
Date: Fri Sep 5 05:15:50 2014 +0000
Update translations for tails-iuk_completed
---
de.po | 77 +++++++++++++++++++++++++++++++++++------------------------------
1 file changed, 41 insertions(+), 36 deletions(-)
diff --git a/de.po b/de.po
index aeda9c7..9243247 100644
--- a/de.po
+++ b/de.po
@@ -8,6 +8,7 @@
# rike, 2014
# sycamoreone <sycamoreone(a)riseup.net>, 2014
# Tobias Bannert, 2013-2014
+# Knight222 <tobias(a)tobiassachs.de>, 2014
# tom_fate <tomoffate(a)gmail.com>, 2014
# nufuk <tor(a)nufuk.com>, 2013
# rike, 2014
@@ -15,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
-"POT-Creation-Date: 2014-06-24 11:44+0200\n"
-"PO-Revision-Date: 2014-07-25 13:31+0000\n"
-"Last-Translator: Tobias Bannert\n"
+"POT-Creation-Date: 2014-08-31 15:23+0200\n"
+"PO-Revision-Date: 2014-09-05 04:50+0000\n"
+"Last-Translator: Knight222 <tobias(a)tobiassachs.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/torproject/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,8 +26,8 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../lib/Tails/IUK/Frontend.pm:146 ../lib/Tails/IUK/Frontend.pm:523
-#: ../lib/Tails/IUK/Frontend.pm:667
+#: ../lib/Tails/IUK/Frontend.pm:146 ../lib/Tails/IUK/Frontend.pm:527
+#: ../lib/Tails/IUK/Frontend.pm:671
msgid "For debugging information, see /home/amnesia/.xsession-errors"
msgstr "Für Informationen zur Fehlerdiagnose, bitte unter /home/amnesia/.xsession-errors nachsehen"
@@ -68,39 +69,43 @@ msgstr "Auf diesem Gerät steht nicht genug Speicher zur Verfügung."
msgid "No explanation available for reason '%{reason}s'."
msgstr "Für Ursache »%{reason}s« ist keine Erklärung verfügbar."
-#: ../lib/Tails/IUK/Frontend.pm:281
+#: ../lib/Tails/IUK/Frontend.pm:279
+msgid "XXX HEJ XXX"
+msgstr "XXX HEJ XXX"
+
+#: ../lib/Tails/IUK/Frontend.pm:285
msgid "The system is up-to-date"
msgstr "Das System ist aktuell"
-#: ../lib/Tails/IUK/Frontend.pm:286
+#: ../lib/Tails/IUK/Frontend.pm:290
msgid "This version of Tails is outdated, and may have security issues."
msgstr "Diese Version von Tails ist veraltet und hat Sicherheitsprobleme."
-#: ../lib/Tails/IUK/Frontend.pm:318
+#: ../lib/Tails/IUK/Frontend.pm:322
#, perl-brace-format
msgid ""
"The available incremental upgrade requires %{space_needed}s of free space on"
" Tails system partition, but only %{free_space}s is available."
msgstr "Die verfügbare inkrementelle Aktualisierung benötigt %{space_needed}s freien Speicherplatz auf der Tails-Systempartition, aber es sind nur %{free_space}s verfügbar. "
-#: ../lib/Tails/IUK/Frontend.pm:334
+#: ../lib/Tails/IUK/Frontend.pm:338
#, perl-brace-format
msgid ""
"The available incremental upgrade requires %{memory_needed}s of free memory,"
" but only %{free_memory}s is available."
msgstr "Die verfügbare inkrementelle Aktualisierung benötigt %{memory_needed}s freien Hauptspeicher, aber es sind nur %{free_memory}s verfügbar."
-#: ../lib/Tails/IUK/Frontend.pm:356
+#: ../lib/Tails/IUK/Frontend.pm:360
msgid ""
"An incremental upgrade is available, but no full upgrade is.\n"
"This should not happen. Please report a bug."
msgstr "Eine inkrementelle Aktualisierung ist verfügbar. Aber eine vollständige Aktualisierung wurde erwartet.\nDas sollte nicht passieren. Bitte melden Sie diesen Fehler."
-#: ../lib/Tails/IUK/Frontend.pm:360
+#: ../lib/Tails/IUK/Frontend.pm:364
msgid "Error while detecting available upgrades"
msgstr "Fehler beim Suchen nach Aktualisierungen"
-#: ../lib/Tails/IUK/Frontend.pm:370
+#: ../lib/Tails/IUK/Frontend.pm:374
#, perl-brace-format
msgid ""
"<b>You should upgrade to %{name}s %{version}s.</b>\n"
@@ -116,19 +121,19 @@ msgid ""
"Do you want to upgrade now?"
msgstr "<b>Sie sollten auf folgendes aktualisieren %{name}s %{version}s.</b>\n\nFür weitere Informationen über diese neue Version, siehe %{details_url}s\n\nEs wird empfohlen, alle offenen Anwendungen während der Aktualisierung zu schließen. Das Herunterladen der Aktualisierung kann möglicherweise sehr lange dauern, von einigen Minuten bis zu einigen Stunden.\nDas Netzwerk wird deaktiviert, nach dem Herunterladen und Aktualisieren.\n\nGröße zum herunterladen: %{size}s\n\nWollen Sie jetzt aktualisieren?"
-#: ../lib/Tails/IUK/Frontend.pm:385
+#: ../lib/Tails/IUK/Frontend.pm:389
msgid "Upgrade available"
msgstr "Aktualisierung verfügbar"
-#: ../lib/Tails/IUK/Frontend.pm:386
+#: ../lib/Tails/IUK/Frontend.pm:390
msgid "Upgrade now"
msgstr "Jetzt aktualisieren"
-#: ../lib/Tails/IUK/Frontend.pm:387
+#: ../lib/Tails/IUK/Frontend.pm:391
msgid "Upgrade later"
msgstr "Später aktualisieren"
-#: ../lib/Tails/IUK/Frontend.pm:395
+#: ../lib/Tails/IUK/Frontend.pm:399
#, perl-brace-format
msgid ""
"<b>You should do a manual upgrade to %{name}s %{version}s.</b>\n"
@@ -140,20 +145,20 @@ msgid ""
"To learn how to do a manual upgrade, go to https://tails.boum.org/doc/first_steps/upgrade/#manual"
msgstr "<b>Sie sollten eine manuelle Aktualisierung auf %{name}s %{version}s vornehmen.</b>\n\nFür weitere Informationen zur neuen Version, besuchen Sie bitte %{details_url}s.\n\nEs ist nicht möglich, Ihr Gerät automatisch auf diese neue Version zu aktualisieren: %{explanation}s.\n\nUm zu lernen, wie man eine manuelle Aktualisierung vornimmt, besuchen Sie bitte https://tails.boum.org/doc/first_steps/upgrade/index.de.html#manual"
-#: ../lib/Tails/IUK/Frontend.pm:411
+#: ../lib/Tails/IUK/Frontend.pm:415
msgid "New version available"
msgstr "Eine neue Version ist verfügbar"
-#: ../lib/Tails/IUK/Frontend.pm:468
+#: ../lib/Tails/IUK/Frontend.pm:472
msgid "Downloading upgrade"
msgstr "Aktualisierung wird heruntergeladen"
-#: ../lib/Tails/IUK/Frontend.pm:471
+#: ../lib/Tails/IUK/Frontend.pm:475
#, perl-brace-format
msgid "Downloading the upgrade to %{name}s %{version}s..."
msgstr "Aktualisierung wird auf %{name}s %{version}s heruntergeladen …"
-#: ../lib/Tails/IUK/Frontend.pm:512
+#: ../lib/Tails/IUK/Frontend.pm:516
msgid ""
"<b>The upgrade could not be downloaded.</b>\\n\\nCheck your network "
"connection, and restart Tails to try upgrading again.\\n\\nIf the problem "
@@ -161,26 +166,26 @@ msgid ""
"file:///usr/share/doc/tails/website/doc/upgrade/error/download.en.html"
msgstr "<b>Die Aktualisierung konnte nicht heruntergeladen werden.</b>\\n\\nBitte überprüfen Sie Ihre Netzwerkverbindung und starten Sie Tails für einen erneuten Versuch einer Aktualisierung.\\n\\nWenn das Problem weiterhin besteht, sehen Sie sich diese Datei an file:///usr/share/doc/tails/website/doc/upgrade/error/download.de.html"
-#: ../lib/Tails/IUK/Frontend.pm:528 ../lib/Tails/IUK/Frontend.pm:547
+#: ../lib/Tails/IUK/Frontend.pm:532 ../lib/Tails/IUK/Frontend.pm:551
msgid "Error while downloading the upgrade"
msgstr "Fehler beim Herunterladen einer Aktualisierung"
-#: ../lib/Tails/IUK/Frontend.pm:540
+#: ../lib/Tails/IUK/Frontend.pm:544
#, perl-brace-format
msgid ""
"Output file '%{output_file}s' does not exist, but tails-iuk-get-target-file "
"did not complain. Please report a bug."
msgstr "Die Ausgabedatei »%{output_file}s« existiert nicht, aber tails-iuk-get-target-file hat nichts beanstandet. Bitte melden Sie den Fehler."
-#: ../lib/Tails/IUK/Frontend.pm:559
+#: ../lib/Tails/IUK/Frontend.pm:563
msgid "Error while creating temporary downloading directory"
msgstr "Fehler während des Erstellens eines temporären Verzeichnisses zum Herunterladen"
-#: ../lib/Tails/IUK/Frontend.pm:562
+#: ../lib/Tails/IUK/Frontend.pm:566
msgid "Failed to create temporary download directory"
msgstr "Fehler beim Erstellen eines temporären Verzeichnisses zum Herunterladen"
-#: ../lib/Tails/IUK/Frontend.pm:574
+#: ../lib/Tails/IUK/Frontend.pm:578
msgid ""
"<b>Your Tails device was successfully upgraded.</b>\n"
"\n"
@@ -190,46 +195,46 @@ msgid ""
"Do you want to restart now?"
msgstr "<b>Ihr Tails-Gerät wurde erfolgreich aktualisiert</b>\n\nEinige Sicherheitsfunktionen wurden vorübergehend abgeschalten.\nSie sollten Tails mit der neuen Version so bald wie möglich neu starten.\n\nWollen Sie jetzt neu starten?"
-#: ../lib/Tails/IUK/Frontend.pm:579
+#: ../lib/Tails/IUK/Frontend.pm:583
msgid "Restart Tails"
msgstr "Neustart von Tails"
-#: ../lib/Tails/IUK/Frontend.pm:580
+#: ../lib/Tails/IUK/Frontend.pm:584
msgid "Restart now"
msgstr "Jetzt neu starten"
-#: ../lib/Tails/IUK/Frontend.pm:581
+#: ../lib/Tails/IUK/Frontend.pm:585
msgid "Restart later"
msgstr "Später neu starten"
-#: ../lib/Tails/IUK/Frontend.pm:592
+#: ../lib/Tails/IUK/Frontend.pm:596
msgid "Error while restarting the system"
msgstr "Beim Neustart des Systems ist ein Fehler aufgetreten"
-#: ../lib/Tails/IUK/Frontend.pm:595
+#: ../lib/Tails/IUK/Frontend.pm:599
msgid "Failed to restart the system"
msgstr "Neustart des Systems ist fehlgeschlagen"
-#: ../lib/Tails/IUK/Frontend.pm:610
+#: ../lib/Tails/IUK/Frontend.pm:614
msgid "Error while shutting down the network"
msgstr "Fehler beim Herunterfahren des Netzwerks"
-#: ../lib/Tails/IUK/Frontend.pm:613
+#: ../lib/Tails/IUK/Frontend.pm:617
msgid "Failed to shutdown network"
msgstr "Herunterfahren des Netzwerks ist fehlgeschlagen"
-#: ../lib/Tails/IUK/Frontend.pm:623
+#: ../lib/Tails/IUK/Frontend.pm:627
msgid "Upgrading the system"
msgstr "Das System aktualisieren"
-#: ../lib/Tails/IUK/Frontend.pm:625
+#: ../lib/Tails/IUK/Frontend.pm:629
msgid ""
"<b>Your Tails device is being upgraded...</b>\n"
"\n"
"For security reasons, the networking is now disabled."
msgstr "<b>Ihr Tails-Gerät wird aktualisiert …</b>\n\nAus Sicherheitsgründen wird das Netzwerk jetzt abgeschalten."
-#: ../lib/Tails/IUK/Frontend.pm:662
+#: ../lib/Tails/IUK/Frontend.pm:666
msgid ""
"<b>An error occured while installing the upgrade.</b>\\n\\nYour Tails device"
" needs to be repaired and might be unable to restart.\\n\\nPlease follow the"
@@ -237,6 +242,6 @@ msgid ""
"file:///usr/share/doc/tails/website/doc/upgrade/error/install.en.html"
msgstr "<b>Ein Fehler ist während der Aktualisierung ausgetreten.</b>\\n\\nIhr Tails-Gerät muß repariert werden und ein Neustart könnte fehlschlagen.\\n\\nBitte folgen Sie den Anweisungen in der Datei file:///usr/share/doc/tails/website/doc/upgrade/error/install.de.html"
-#: ../lib/Tails/IUK/Frontend.pm:672
+#: ../lib/Tails/IUK/Frontend.pm:676
msgid "Error while installing the upgrade"
msgstr "Fehler beim Installieren der Aktualisierungen"
1
0

05 Sep '14
commit 36ec658ae9fc32878d0522ec49dcc4f341ee8894
Author: Translation commit bot <translation(a)torproject.org>
Date: Fri Sep 5 05:15:46 2014 +0000
Update translations for tails-iuk
---
de.po | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/de.po b/de.po
index 527bfea..9243247 100644
--- a/de.po
+++ b/de.po
@@ -8,6 +8,7 @@
# rike, 2014
# sycamoreone <sycamoreone(a)riseup.net>, 2014
# Tobias Bannert, 2013-2014
+# Knight222 <tobias(a)tobiassachs.de>, 2014
# tom_fate <tomoffate(a)gmail.com>, 2014
# nufuk <tor(a)nufuk.com>, 2013
# rike, 2014
@@ -16,8 +17,8 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
"POT-Creation-Date: 2014-08-31 15:23+0200\n"
-"PO-Revision-Date: 2014-09-01 09:20+0000\n"
-"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
+"PO-Revision-Date: 2014-09-05 04:50+0000\n"
+"Last-Translator: Knight222 <tobias(a)tobiassachs.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/torproject/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -70,7 +71,7 @@ msgstr "Für Ursache »%{reason}s« ist keine Erklärung verfügbar."
#: ../lib/Tails/IUK/Frontend.pm:279
msgid "XXX HEJ XXX"
-msgstr ""
+msgstr "XXX HEJ XXX"
#: ../lib/Tails/IUK/Frontend.pm:285
msgid "The system is up-to-date"
1
0
Author: phobos
Date: 2014-09-04 16:05:15 +0000 (Thu, 04 Sep 2014)
New Revision: 26945
Modified:
website/trunk/include/mirrors-table.wmi
website/trunk/include/tor-mirrors.csv
Log:
update mirrors
Modified: website/trunk/include/mirrors-table.wmi
===================================================================
--- website/trunk/include/mirrors-table.wmi 2014-09-04 15:07:37 UTC (rev 26944)
+++ website/trunk/include/mirrors-table.wmi 2014-09-04 16:05:15 UTC (rev 26945)
@@ -1,19 +1,19 @@
<tr>
- <td>DE</td>
+ <td>IS</td>
- <td>Piratenpartei Bayern</td>
+ <td>Frenn vun der Enn A.S.B.L.</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tormirror.piratenpartei-bayern.de/dist/">http</a></td>
- <td><a href="http://tormirror.piratenpartei-bayern.de">http</a></td>
- <td><a href="http://tormirror.piratenpartei-bayern.de/dist/">https</a></td>
- <td><a href="https://tormirror.piratenpartei-bayern.de">https</a></td>
+ <td><a href="http://torproject.lu/dist/">http</a></td>
+ <td><a href="http://torproject.lu/">http</a></td>
<td> - </td>
<td> - </td>
+ <td> - </td>
+ <td> - </td>
</tr>
<tr>
@@ -103,23 +103,6 @@
<tr>
- <td>EE</td>
-
- <td>CyberSIDE</td>
-
- <td>Up to date</td>
-
- <td> - </td>
- <td><a href="http://cyberside.net.ee/tor/">http</a></td>
- <td><a href="http://cyberside.planet.ee/tor/">http</a></td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
-</tr>
-
-<tr>
-
<td>IS</td>
<td>torproject.is</td>
@@ -885,23 +868,6 @@
<tr>
- <td>IS</td>
-
- <td>Tor Supporter</td>
-
- <td>Up to date</td>
-
- <td> - </td>
- <td><a href="http://ayo.tl/tor/dist/">http</a></td>
- <td><a href="http://ayo.tl/tor/">http</a></td>
- <td><a href="https://ayo.tl/tor/dist/">https</a></td>
- <td><a href="https://ayo.tl/tor/">https</a></td>
- <td> - </td>
- <td> - </td>
-</tr>
-
-<tr>
-
<td>IT</td>
<td>Tor Supporter</td>
@@ -1049,21 +1015,21 @@
<td><a href="http://tor.pajonzeck.de/">http</a></td>
<td><a href="rsync://tor.pajonzeck.de/tor/dist">https</a></td>
<td><a href="https://tor.pajonzeck.de/">https</a></td>
- <td><a href="http://zgfgvob256pffy62.onion">rsync</a></td>
+ <td> - </td>
<td><a href="rsync://tor.pajonzeck.de/tor">rsync</a></td>
</tr>
<tr>
- <td>DK</td>
+ <td>AT</td>
- <td>Zentrum der Gesundheit</td>
+ <td>Tor Supporter</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.idnr.ws/dist/">http</a></td>
- <td><a href="http://tor.idnr.ws/">http</a></td>
+ <td><a href="http://tor.ludikovsky.name/dist">http</a></td>
+ <td><a href="http://tor.ludikovsky.name/">http</a></td>
<td> - </td>
<td> - </td>
<td> - </td>
@@ -1072,51 +1038,85 @@
<tr>
- <td>NL</td>
+ <td>US</td>
- <td>Amorphis</td>
+ <td>Setec Administrator</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.amorphis.eu/dist/">http</a></td>
- <td><a href="http://tor.amorphis.eu/">http</a></td>
<td> - </td>
+ <td><a href="http://tor.nuclear-weapons.net">http</a></td>
+ <td><a href="http://tor.nuclear-weapons.net/dist">https</a></td>
+ <td><a href="https://tor.nuclear-weapons.net">https</a></td>
+ <td><a href="https://tor.nuclear-weapons.net/dist">rsync</a></td>
<td> - </td>
+</tr>
+
+<tr>
+
+ <td>DE</td>
+
+ <td>Tor Supporter</td>
+
+ <td>Up to date</td>
+
<td> - </td>
+ <td><a href="http://torproject.hactar.bz/dist/">http</a></td>
+ <td><a href="http://torproject.hactar.bz">http</a></td>
<td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
</tr>
<tr>
<td>DE</td>
- <td>Netzkonstrukt Berlin</td>
+ <td>Piratenpartei Bayern</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://mirror.ntzk.de/torproject.org/dist/">http</a></td>
- <td><a href="http://mirror.ntzk.de/torproject.org/">http</a></td>
+ <td><a href="http://tormirror.piratenpartei-bayern.de/dist/">http</a></td>
+ <td><a href="http://tormirror.piratenpartei-bayern.de">http</a></td>
+ <td><a href="http://tormirror.piratenpartei-bayern.de/dist/">https</a></td>
+ <td><a href="https://tormirror.piratenpartei-bayern.de">https</a></td>
<td> - </td>
<td> - </td>
+</tr>
+
+<tr>
+
+ <td>NL</td>
+
+ <td>Amorphis</td>
+
+ <td>Up to date</td>
+
<td> - </td>
+ <td><a href="http://tor.amorphis.eu/dist/">http</a></td>
+ <td><a href="http://tor.amorphis.eu/">http</a></td>
<td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
</tr>
<tr>
<td>IS</td>
- <td>Frenn vun der Enn A.S.B.L.</td>
+ <td>Tor Supporter</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://torproject.lu/dist/">http</a></td>
- <td><a href="http://torproject.lu/">http</a></td>
+ <td><a href="http://ayo.tl/tor/dist/">http</a></td>
+ <td><a href="http://ayo.tl/tor/">http</a></td>
+ <td><a href="https://ayo.tl/tor/dist/">https</a></td>
+ <td><a href="https://ayo.tl/tor/">https</a></td>
<td> - </td>
<td> - </td>
- <td> - </td>
- <td> - </td>
</tr>
Modified: website/trunk/include/tor-mirrors.csv
===================================================================
--- website/trunk/include/tor-mirrors.csv 2014-09-04 15:07:37 UTC (rev 26944)
+++ website/trunk/include/tor-mirrors.csv 2014-09-04 16:05:15 UTC (rev 26945)
@@ -22,72 +22,72 @@
maki(a)maki-chan.de, Maki Hoshisawa, DE, Germany, DE, TRUE, FALSE, NO, http://tor.mirrors.maki-chan.de/, , , , http://tor.mirrors.maki-chan.de/dist/, , , , Fri Aug 22 14:09:07 2014
info AT zentrum-der-gesundheit DOT de, Zentrum der Gesundheit, DK, Denmark, Europe, TRUE, FALSE, No, http://tor.idnr.ws/, , , , http://tor.idnr.ws/dist/, , , , Mon Sep 1 17:16:00 2014
mirror ntzk de, Netzkonstrukt Berlin, DE, Germany, Europe, TRUE, FALSE, No, http://mirror.ntzk.de/torproject.org/, , , , http://mirror.ntzk.de/torproject.org/dist/, , , , Mon Sep 1 04:38:04 2014
-info /AT enn /DOT lu, Frenn vun der Enn A.S.B.L., IS, Iceland, Europe, TRUE, FALSE, No, http://torproject.lu/, , , , http://torproject.lu/dist/, , , http://btn6gqzqevlhoryd.onion, Mon Sep 1 04:38:04 2014
-Piratenpartei Bayern, Piratenpartei Bayern, DE, Germany, DE, TRUE, FALSE, NO, http://tormirror.piratenpartei-bayern.de, https://tormirror.piratenpartei-bayern.de, , , http://tormirror.piratenpartei-bayern.de/dist/, http://tormirror.piratenpartei-bayern.de/dist/, , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://tor.hoi-polloi.org, http://tor.hossi-polloiorg, , , http://tor.hoi-polloi.org/dist/, http://tor.hosi-polloi.or/dist/g, , , Tue Sep 2 03:41:05 2014
-kevinmg(a)pressfreedomfoundation.org, Freedom of the Press Foundation, US, United States, US, True, False, No, http://tor.pressfreedomfoundation.org, https://tor.pressfreedomfoundation.org, , , http://tor.pressfreedomfoundation.org/dist/, https://tor.pressfreedomfoundation.org/dist/, , , Tue Sep 2 03:41:05 2014
+info /AT enn /DOT lu, Frenn vun der Enn A.S.B.L., IS, Iceland, Europe, TRUE, FALSE, No, http://torproject.lu/, , , , http://torproject.lu/dist/, , , http://btn6gqzqevlhoryd.onion, Thu Sep 4 02:26:09 2014
+Piratenpartei Bayern, Piratenpartei Bayern, DE, Germany, DE, TRUE, FALSE, NO, http://tormirror.piratenpartei-bayern.de, https://tormirror.piratenpartei-bayern.de, , , http://tormirror.piratenpartei-bayern.de/dist/, http://tormirror.piratenpartei-bayern.de/dist/, , , Wed Sep 3 20:13:11 2014
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://tor.hoi-polloi.org, http://tor.hossi-polloiorg, , , http://tor.hoi-polloi.org/dist/, http://tor.hosi-polloi.or/dist/g, , , Thu Sep 4 02:26:09 2014
+kevinmg(a)pressfreedomfoundation.org, Freedom of the Press Foundation, US, United States, US, True, False, No, http://tor.pressfreedomfoundation.org, https://tor.pressfreedomfoundation.org, , , http://tor.pressfreedomfoundation.org/dist/, https://tor.pressfreedomfoundation.org/dist/, , , Thu Sep 4 02:26:09 2014
tor(a)fodt.it // FoDT.it Webteam, FoDT.it, AT, Austria, Europe, TRUE, FALSE, No, http://tor.fodt.it, https://tor.fodt.it, , ftp://ftp.fodt.it/pub/mirrors/torproject.org/, http://tor.fodt.it/dist/, https://tor.fodt.it/dist/, , , Sun Aug 24 16:19:07 2014
-http://www.multinet.no, MultiNet AS, NO, Trondheim, Trondheim, TRUE, TRUE, No, http://tor.multinet.no/, , , , http://tor.multinet.no/dist/, , , , Tue Sep 2 03:41:05 2014
-haskell at gmx.es, Tor Supporter, ES, Spain, Europe, TRUE, FALSE, No, http://tor.zilog.es/, , , , http://tor.zilog.es/dist/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, http://199.175.55.215/, , , , http://199.175.55.215/dist/, , , , Tue Sep 2 03:41:05 2014
-margus.random at mail.ee, CyberSIDE, EE, Estonia, EE, TRUE, FALSE, No, http://cyberside.planet.ee/tor/, , , , http://cyberside.net.ee/tor/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, torproject.is, IS, Iceland, IS, TRUE, FALSE, No, http://torproject.is/, , , , http://torproject.is/dist/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, spline, DE, Germany, DE, TRUE, FALSE, No, http://tor.spline.de/, https://tor.spline.inf.fu-berlin.de/, rsync://ftp.spline.de/tor, ftp://ftp.spline.de/pub/tor, http://tor.spline.de/dist/, https://tor.spline.inf.fu-berlin.de/dist/, rsync://ftp.spline.de/tor/dist, , Tue Sep 2 03:41:05 2014
-Tor Fan, me0w.cc, RO, Romania, RO, TRUE, FALSE, No, http://tor.me0w.cc/, , , , http://tor.me0w.cc/dist/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, borgmann.tv, DE, Germany, DE, TRUE, FALSE, No, http://tor.borgmann.tv/, , , , http://tor.borgmann.tv/dist/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, TRUE, No, http://tor.dont-know-me.at/, , , , http://tor.dont-know-me.at/dist/, , , , Tue Sep 2 03:41:05 2014
+http://www.multinet.no, MultiNet AS, NO, Trondheim, Trondheim, TRUE, TRUE, No, http://tor.multinet.no/, , , , http://tor.multinet.no/dist/, , , , Thu Sep 4 02:26:09 2014
+haskell at gmx.es, Tor Supporter, ES, Spain, Europe, TRUE, FALSE, No, http://tor.zilog.es/, , , , http://tor.zilog.es/dist/, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, http://199.175.55.215/, , , , http://199.175.55.215/dist/, , , , Thu Sep 4 02:26:09 2014
+margus.random at mail.ee, CyberSIDE, EE, Estonia, EE, TRUE, FALSE, No, http://cyberside.planet.ee/tor/, , , , http://cyberside.net.ee/tor/, , , , Tue Sep 2 15:51:53 2014
+Tor Fan, torproject.is, IS, Iceland, IS, TRUE, FALSE, No, http://torproject.is/, , , , http://torproject.is/dist/, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, spline, DE, Germany, DE, TRUE, FALSE, No, http://tor.spline.de/, https://tor.spline.inf.fu-berlin.de/, rsync://ftp.spline.de/tor, ftp://ftp.spline.de/pub/tor, http://tor.spline.de/dist/, https://tor.spline.inf.fu-berlin.de/dist/, rsync://ftp.spline.de/tor/dist, , Thu Sep 4 02:26:09 2014
+Tor Fan, me0w.cc, RO, Romania, RO, TRUE, FALSE, No, http://tor.me0w.cc/, , , , http://tor.me0w.cc/dist/, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, borgmann.tv, DE, Germany, DE, TRUE, FALSE, No, http://tor.borgmann.tv/, , , , http://tor.borgmann.tv/dist/, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, TRUE, No, http://tor.dont-know-me.at/, , , , http://tor.dont-know-me.at/dist/, , , , Thu Sep 4 02:26:09 2014
coralcdn.org, CoralCDN, INT, International, INT, TRUE, FALSE, Yes, http://www.torproject.org.nyud.net/, , , , http://www.torproject.org.nyud.net/dist/, , , , Thu Aug 28 20:15:25 2014
-Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, FALSE, No, http://torproject.ph3x.at/, , , , http://torproject.ph3x.at/dist/, , , , Tue Sep 2 03:41:05 2014
-neutrino8 AT gmail DOT com, teambelgium, BE, Belgium, Europe, TRUE, FALSE, No, http://tor.teambelgium.net:8080/, , , ftp://tor.teambelgium.net:2121/torproject/, http://tor.teambelgium.net:8080/dist/, , , , Tue Sep 2 03:41:05 2014
- mail AT benjamin-meier DOT info, beme it, DE, Germany, DE, TRUE, FALSE, No, http://tor.beme-it.de/, https://tor.beme-it.de/, rsync://tor.beme-it.de/tor, , http://tor.beme-it.de/dist/, https://tor.beme-it.de/dist/, rsync://tor.beme-it.de/tor/dist, , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, MX, Mexico, MX, TRUE, FALSE, No, http://fbnaia.homelinux.net/torproject/, https://fbnaia.homelinux.net/torproject/, , , http://fbnaia.homelinux.net/torproject/dist/, https://fbnaia.homelinux.net/torproject/dist/, , , Tue Sep 2 03:41:05 2014
-webmaster AT askapache DOT com, AskApache, US, California, US, TRUE, FALSE, No, http://tor.askapache.com/, , , , http://tor.askapache.com/dist/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://tor.mirror.chekanov.net/, , , , http://tor.mirror.chekanov.net/dist/, , , , Tue Sep 2 03:41:05 2014
-http://sebastian.pfeifer.or.at/, TechAsk.IT, AT, Favoriten, Wien, TRUE, TRUE, No, http://www.unicorncloud.org/public/torproject.org/, https://www.unicorncloud.org/public/torproject.org/, , , http://www.unicorncloud.org/public/torproject.org/dist, https://www.unicorncloud.org/public/torproject.org/dist, , , Tue Sep 2 03:41:05 2014
-root AT amorphis DOT eu, Amorphis, NL, The Netherlands, Europe, TRUE, FALSE, No, http://tor.amorphis.eu/, , , , http://tor.amorphis.eu/dist/, , , , Mon Sep 1 17:16:00 2014
-hackthissite.org, HackThisSite.org, US, United States, US, TRUE, TRUE, No, http://tor.hackthissite.org/, https://tor.hackthissite.org/, , , http://mirror.hackthissite.org/tor, https://mirror.hackthissite.org/tor, , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://tor.linuxlounge.net/, https://tor.linuxlounge.net/, , , http://tor.linuxlounge.net/dist/, https://tor.linuxlounge.net/dist/, , , Tue Sep 2 03:41:05 2014
-paul at coffswifi.net, CoffsWiFi, AU, Australia and New Zealand, APNIC, TRUE, FALSE, No, http://torproject.coffswifi.net, , , , http://torproject.coffswifi.net/dist, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, cyberarmy, AT, Austria, AT, TRUE, FALSE, No, http://tor.cyberarmy.at/, , , , , , , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://torproject.cryptowars.info/, https://torproject.cryptowars.info/, rsync://torproject.cryptowars.info/, , http://torproject.cryptowars.info/dist/, https://torproject.cryptowars.info/dist/, , , Tue Sep 2 03:41:05 2014
-hostmaster AT zombiewerks DOT com, TheOnionRouter, IS, Iceland, Iceland, TRUE, FALSE, No, http://theonionrouter.com/, , , , http://theonionrouter.com/dist/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, crazyhaze.de, DE, Germany, DE, TRUE, FALSE, No, http://tor.crazyhaze.de/, https://tor.crazyhaze.de/, , , http://tor.crazyhaze.de/dist/, https://tor.crazyhaze.de/dist/, , , Tue Sep 2 03:41:05 2014
-Tor Fan, chaos darmstadt, DE, Germany, Europe, TRUE, FALSE, No, http://mirrors.chaos-darmstadt.de/tor-mirror/, , , , http://mirrors.chaos-darmstadt.de/tor-mirror/dist/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, Soviet Anonymous, RU, Russia, RU, TRUE, FALSE, No, http://creep.im/tor, https://creep.im/tor, rsync://creep.im/tor, ftp://creep.im/mirrors/tor, http://creep.im/tor/dist/, https://creep.im/tor/dist/, rsync://creep.im/tor-dist, , Tue Sep 2 03:41:05 2014
-Tor Fan, torservers, DE, Germany, DE, TRUE, FALSE, No, http://www.torservers.net/mirrors/torproject.org/, https://www.torservers.net/mirrors/torproject.org/, , , http://www.torservers.net/mirrors/torproject.org/dist/, https://www.torservers.net/mirrors/torproject.org/dist/, , http://hbpvnydyyjbmhx6b.onion/mirrors/torproject.org/, Tue Sep 2 03:41:05 2014
-Tor Fan, torland, GB, United Kingdom, GB, TRUE, FALSE, No, http://mirror.torland.me/torproject.org/, https://mirror.torland.me/torproject.org/, , , http://mirror.torland.me/torproject.org/dist/, https://mirror.torland.me/torproject.org/dist/, , , Tue Sep 2 03:41:05 2014
-Tor Fan, Lightning-bolt.net, CZ, Czech Republic, CZ, TRUE, FALSE, No, http://torproject.lightning-bolt.net/, , , , http://torproject.lightning-bolt.net/dist/, , , , Tue Sep 2 03:41:05 2014
-IceBear, myRL.net, IS, Iceland, IS, TRUE, FALSE, No, http://tor.myrl.net/, https://tor.myrl.net/, , , http://tor.myrl.net/dist/, https://tor.myrl.net/dist/, , , Tue Sep 2 03:41:05 2014
-kiro AT userzap DOT de, Userzap, DE, Germany, DE, TRUE, FALSE, No, http://torprojekt.userzap.de, https://torprojekt.userzap.de, , , http://torprojekt.userzap.de/dist/, https://torprojekt.userzap.de/dist/, , , Tue Sep 2 03:41:05 2014
-tor(a)eprci.net, EPRCI, US, United States, US, TRUE, FALSE, NO, http://tor.eprci.net/, https://www.eprci.com/tor/, , , http://tor.eprci.net/dist/, https://www.eprci.com/tor/dist/, , , Tue Sep 2 03:41:05 2014
-tor(a)les.net, tor(a)les.net, CA, Canada, CA, TRUE, FALSE, NO, http://tor.les.net/, , , , http://tor.les.net/dist, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, PW, DE, Germany, DE, TRUE, TRUE, NO, http://tor.pw.is/, , , , http://tor.pw.is/dist/, , , , Tue Sep 2 03:41:05 2014
-tor(a)stalkr.net, stalkr.net, FR, France, FR, TRUE, TRUE, NO, http://tor.stalkr.net/, https://tor.stalkr.net/, , , http://tor.stalkr.net/dist/, https://tor.stalkr.net/dist/, , , Tue Sep 2 03:41:05 2014
-doemela[AT]cyberguerrilla[DOT]org, cYbergueRrilLa AnonyMous NeXus, DE, Germany, DE, TRUE, FALSE, NO, https://tor-mirror.cyberguerrilla.org, , , , https://tor-mirror.cyberguerrilla.org/dist/, , , http://6dvj6v5imhny3anf.onion, Tue Sep 2 03:41:05 2014
-contact(a)gtor.org, Gtor, DE, Germany, DE, TRUE, TRUE, NO, http://torproject.gtor.org/, https://torproject.gtor.org/, rsync://torproject.gtor.org/website-mirror/, , http://torproject.gtor.org/dist/, https://torproject.gtor.org/dist/, rsync://torproject.gtor.org/website-mirror/dist/, , Tue Sep 2 03:41:05 2014
-SDL, SDL, US, United States, US, TRUE, TRUE, NO, http://torproject.nexiom.net, https://torproject.nexiom.net, , , http://torproject.nexiom.net, https://torproject.nexiom.net/dist, , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://mirror.velcommuta.de/tor/, https://mirror.velcommuta.de/tor/, , , http://mirror.velcommuta.de/tor/dist/, https://mirror.velcommuta.de/tor/dist/, , , Tue Sep 2 03:41:05 2014
-EFF, EFF, US, United States, US, TRUE, FALSE, NO, https://tor.eff.org, https://tor.eff.org, , , https://tor.eff.org/dist/, https://tor.eff.org/dist/, , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, GR, Greece, GR, TRUE, TRUE, NO, https://tor.void.gr, https://tor.void.gr, , , https://tor.void.gr/dist/, https://tor.void.gr/dist/, , , Tue Sep 2 03:41:05 2014
-Ich Eben, Tor Supporter, DE, Germany, DE, TRUE, TRUE, No, http://reichster.de/mirrors/torproject.org/, https://reichster.de/mirrors/torproject.org, , , http://reichster.de/mirrors/torproject.org/dist/, https://reichster.de/mirrors/torproject.org/dist/, , , Tue Sep 2 03:41:05 2014
-jlgaddis AT gnu DOT org, Evil Routers, US, United States, US, TRUE, FALSE, No, http://tor1.evilrouters.net/, , , , http://tor1.evilrouters.net/dist/, , , , Tue Sep 2 03:41:05 2014
-tor AT miglix DOT eu, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, NO, http://tor.miglix.eu, https://tor.miglix.eu, , , http://tor.miglix.eu/dist/, https://tor.miglix.eu/dist/, , , Tue Sep 2 03:41:05 2014
-tor TA ninurta TOD name, TorNinurtaName, AT, Austria, AT, TRUE, TRUE, no, http://tor.ninurta.name/, , , , http://tor.ninurta.name/dist/, , , , Tue Sep 2 03:41:05 2014
-fr33tux <AT> general-changelog-team.fr, Tor Supporter, FR, France, FR, TRUE, TRUE, No, http://tor.fr33tux.org, https://tor.fr33tux.org, , , http://tor.fr33tux.org/dist/, https://tor.fr33tux.org/dist/, , , Tue Sep 2 03:41:05 2014
-sebastian(at)bobrecki(dot)pl, Sebastian M. Bobrecki, PL, Poland, Europe, TRUE, FALSE, No, http://tor.iv.net.pl, https://tor.iv.net.pl, , , http://tor.iv.net.pl/dist/, https://tor.iv.net.pl/dist/, , , Tue Sep 2 03:41:05 2014
-tor-mirror AT rdns DOT cc, d0wn.biz, FR, France, Europe, TRUE, FALSE, No, http://tor.static.lu, https://tor.static.lu, , , http://tor.static.lu/dist/, https://tor.static.lu/dist/, , , Tue Sep 2 03:41:05 2014
-tor(a)moparisthebest.com, moparisthebest.com, DE, Germany, Europe, TRUE, TRUE, No, http://www.moparisthebest.com/tor/, https://www.moparisthebest.com/tor/, , , http://www.moparisthebest.com/tor/dist/, https://www.moparisthebest.com/tor/dist/, , , Tue Sep 2 03:41:05 2014
-Sebastian, Maxanoo, NL, The Netherlands, Amsterdam, TRUE, FALSE, NO, http://tor.maxanoo.com/, , , , http://tor.maxanoo.com/dist/, , , , Tue Sep 2 03:41:05 2014
-rorrim AT ayo DOT tl, Tor Supporter, IS, Iceland, Europe, TRUE, TRUE, No, http://ayo.tl/tor/, https://ayo.tl/tor/, , , http://ayo.tl/tor/dist/, https://ayo.tl/tor/dist/, , , Tue Sep 2 03:41:05 2014
-stefano.fenoglio AT gmail DOT com, Tor Supporter, IT, Italy, Europe, TRUE, FALSE, No, http://tor.stefanof.com, , , , , , http://tor.stefanof.com/dist, , Tue Sep 2 03:41:05 2014
-Jacob Henner, Anatomical Networks, US, United States, US, TRUE, TRUE, TRUE, http://tor.ventricle.us/, , , , http://tor.ventricle.us/dist/, , , , Tue Sep 2 03:41:05 2014
-webmaster[at]hackabit.nl, Hackabit.nl, NL, The Netherlands, Europe, TRUE, FALSE, No, http://hackabit.nl/tor/, https://hackabit.nl/tor/, , , http://hackabit.nl/tor/dist/, https://hackabit.nl/tor/dist/, , , Tue Sep 2 03:41:05 2014
-noc AT bbln DOT org, BBLN, NL, The Netherlands, Europe, TRUE, TRUE, No, http://mirror2.bbln.org/torproject/, https://mirror2.bbln.org/torproject/, rsync://mirror2.bbln.org/torproject/, ftp://mirror2.bbln.org/torproject/, http://mirror2.bbln.org/torproject/dist/, https://mirror2.bbln.org/torproject/dist/, rsync://mirror2.bbln.org/torproject/dist/, , Tue Sep 2 03:41:05 2014
-noc AT bbln DOT org, BBLN, FR, France, Europe, TRUE, TRUE, No, http://mirror.bbln.org/torproject/, https://mirror.bbln.org/torproject/, rsync://mirror.bbln.org/torproject/, ftp://mirror.bbln.org/torproject/, http://mirror.bbln.org/torproject/dist/, https://mirror.bbln.org/torproject/dist/, rsync://mirror.bbln.org/torproject/dist/, , Tue Sep 2 03:41:05 2014
-Tor Fan, Ramos Research, US, United States, US, TRUE, TRUE, No, http://tor.ramosresearch.com/, , , , http://tor.ramosresearch.com/dist/, , , , Tue Sep 2 03:41:05 2014
-Tor Fan, Tor Supporter, DE, Germany, Europe, TRUE, FALSE, No, http://tor.euve33747.vserver.de/, , , , http://tor.euve33747.vserver.de/dist, , , , Tue Sep 2 03:41:05 2014
-s7r[at]sky-ip[d0t]org, sky-ip.org, NL, Netherlands, NL, TRUE, FALSE, No, http://beautiful-mind.sky-ip.org/, , , , http://beautiful-mind.sky-ip.org/dist/, , , , Tue Sep 2 03:41:05 2014
-tor#pajonzeck#de, ITsn, DE, Germany, Europe, TRUE, FALSE, No, http://tor.pajonzeck.de/, https://tor.pajonzeck.de/, rsync://tor.pajonzeck.de/tor, http://tor.pajonzeck.de/dist/, https://tor.pajonzeck.de/dist/, rsync://tor.pajonzeck.de/tor/dist,, http://zgfgvob256pffy62.onion,, Tue Sep 2 03:41:05 2014
-peter AT ludikovsky DOT name,Tor Supporter,AT,Austria,Europe,TRUE,TRUE,No,http://tor.ludikovsky.name/,,,,http://tor.ludikovsky.name/dist,,,http://54lnbzjo6xlr4f4j.onion/,
-admin AT nuclear DASH weapons DOT net,Setec Administrator,US,Texas,Austin,TRUE,FALSE,No,http://tor.nuclear-weapons.net,…,
-0x43DE8191, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, No, http://torproject.hactar.bz, , , , http://torproject.hactar.bz/dist/, , , ,
\ No newline at end of file
+Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, FALSE, No, http://torproject.ph3x.at/, , , , http://torproject.ph3x.at/dist/, , , , Thu Sep 4 02:26:09 2014
+neutrino8 AT gmail DOT com, teambelgium, BE, Belgium, Europe, TRUE, FALSE, No, http://tor.teambelgium.net:8080/, , , ftp://tor.teambelgium.net:2121/torproject/, http://tor.teambelgium.net:8080/dist/, , , , Thu Sep 4 02:26:09 2014
+ mail AT benjamin-meier DOT info, beme it, DE, Germany, DE, TRUE, FALSE, No, http://tor.beme-it.de/, https://tor.beme-it.de/, rsync://tor.beme-it.de/tor, , http://tor.beme-it.de/dist/, https://tor.beme-it.de/dist/, rsync://tor.beme-it.de/tor/dist, , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, MX, Mexico, MX, TRUE, FALSE, No, http://fbnaia.homelinux.net/torproject/, https://fbnaia.homelinux.net/torproject/, , , http://fbnaia.homelinux.net/torproject/dist/, https://fbnaia.homelinux.net/torproject/dist/, , , Thu Sep 4 02:26:09 2014
+webmaster AT askapache DOT com, AskApache, US, California, US, TRUE, FALSE, No, http://tor.askapache.com/, , , , http://tor.askapache.com/dist/, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://tor.mirror.chekanov.net/, , , , http://tor.mirror.chekanov.net/dist/, , , , Thu Sep 4 02:26:09 2014
+http://sebastian.pfeifer.or.at/, TechAsk.IT, AT, Favoriten, Wien, TRUE, TRUE, No, http://www.unicorncloud.org/public/torproject.org/, https://www.unicorncloud.org/public/torproject.org/, , , http://www.unicorncloud.org/public/torproject.org/dist, https://www.unicorncloud.org/public/torproject.org/dist, , , Thu Sep 4 02:26:09 2014
+root AT amorphis DOT eu, Amorphis, NL, The Netherlands, Europe, TRUE, FALSE, No, http://tor.amorphis.eu/, , , , http://tor.amorphis.eu/dist/, , , , Wed Sep 3 20:13:11 2014
+hackthissite.org, HackThisSite.org, US, United States, US, TRUE, TRUE, No, http://tor.hackthissite.org/, https://tor.hackthissite.org/, , , http://mirror.hackthissite.org/tor, https://mirror.hackthissite.org/tor, , , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://tor.linuxlounge.net/, https://tor.linuxlounge.net/, , , http://tor.linuxlounge.net/dist/, https://tor.linuxlounge.net/dist/, , , Thu Sep 4 02:26:09 2014
+paul at coffswifi.net, CoffsWiFi, AU, Australia and New Zealand, APNIC, TRUE, FALSE, No, http://torproject.coffswifi.net, , , , http://torproject.coffswifi.net/dist, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, cyberarmy, AT, Austria, AT, TRUE, FALSE, No, http://tor.cyberarmy.at/, , , , , , , , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://torproject.cryptowars.info/, https://torproject.cryptowars.info/, rsync://torproject.cryptowars.info/, , http://torproject.cryptowars.info/dist/, https://torproject.cryptowars.info/dist/, , , Thu Sep 4 02:26:09 2014
+hostmaster AT zombiewerks DOT com, TheOnionRouter, IS, Iceland, Iceland, TRUE, FALSE, No, http://theonionrouter.com/, , , , http://theonionrouter.com/dist/, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, crazyhaze.de, DE, Germany, DE, TRUE, FALSE, No, http://tor.crazyhaze.de/, https://tor.crazyhaze.de/, , , http://tor.crazyhaze.de/dist/, https://tor.crazyhaze.de/dist/, , , Thu Sep 4 02:26:09 2014
+Tor Fan, chaos darmstadt, DE, Germany, Europe, TRUE, FALSE, No, http://mirrors.chaos-darmstadt.de/tor-mirror/, , , , http://mirrors.chaos-darmstadt.de/tor-mirror/dist/, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, Soviet Anonymous, RU, Russia, RU, TRUE, FALSE, No, http://creep.im/tor, https://creep.im/tor, rsync://creep.im/tor, ftp://creep.im/mirrors/tor, http://creep.im/tor/dist/, https://creep.im/tor/dist/, rsync://creep.im/tor-dist, , Thu Sep 4 02:26:09 2014
+Tor Fan, torservers, DE, Germany, DE, TRUE, FALSE, No, http://www.torservers.net/mirrors/torproject.org/, https://www.torservers.net/mirrors/torproject.org/, , , http://www.torservers.net/mirrors/torproject.org/dist/, https://www.torservers.net/mirrors/torproject.org/dist/, , http://hbpvnydyyjbmhx6b.onion/mirrors/torproject.org/, Thu Sep 4 02:26:09 2014
+Tor Fan, torland, GB, United Kingdom, GB, TRUE, FALSE, No, http://mirror.torland.me/torproject.org/, https://mirror.torland.me/torproject.org/, , , http://mirror.torland.me/torproject.org/dist/, https://mirror.torland.me/torproject.org/dist/, , , Thu Sep 4 02:26:09 2014
+Tor Fan, Lightning-bolt.net, CZ, Czech Republic, CZ, TRUE, FALSE, No, http://torproject.lightning-bolt.net/, , , , http://torproject.lightning-bolt.net/dist/, , , , Thu Sep 4 02:26:09 2014
+IceBear, myRL.net, IS, Iceland, IS, TRUE, FALSE, No, http://tor.myrl.net/, https://tor.myrl.net/, , , http://tor.myrl.net/dist/, https://tor.myrl.net/dist/, , , Thu Sep 4 02:26:09 2014
+kiro AT userzap DOT de, Userzap, DE, Germany, DE, TRUE, FALSE, No, http://torprojekt.userzap.de, https://torprojekt.userzap.de, , , http://torprojekt.userzap.de/dist/, https://torprojekt.userzap.de/dist/, , , Thu Sep 4 02:26:09 2014
+tor(a)eprci.net, EPRCI, US, United States, US, TRUE, FALSE, NO, http://tor.eprci.net/, https://www.eprci.com/tor/, , , http://tor.eprci.net/dist/, https://www.eprci.com/tor/dist/, , , Thu Sep 4 02:26:09 2014
+tor(a)les.net, tor(a)les.net, CA, Canada, CA, TRUE, FALSE, NO, http://tor.les.net/, , , , http://tor.les.net/dist, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, PW, DE, Germany, DE, TRUE, TRUE, NO, http://tor.pw.is/, , , , http://tor.pw.is/dist/, , , , Thu Sep 4 02:26:09 2014
+tor(a)stalkr.net, stalkr.net, FR, France, FR, TRUE, TRUE, NO, http://tor.stalkr.net/, https://tor.stalkr.net/, , , http://tor.stalkr.net/dist/, https://tor.stalkr.net/dist/, , , Thu Sep 4 02:26:09 2014
+doemela[AT]cyberguerrilla[DOT]org, cYbergueRrilLa AnonyMous NeXus, DE, Germany, DE, TRUE, FALSE, NO, https://tor-mirror.cyberguerrilla.org, , , , https://tor-mirror.cyberguerrilla.org/dist/, , , http://6dvj6v5imhny3anf.onion, Thu Sep 4 02:26:09 2014
+contact(a)gtor.org, Gtor, DE, Germany, DE, TRUE, TRUE, NO, http://torproject.gtor.org/, https://torproject.gtor.org/, rsync://torproject.gtor.org/website-mirror/, , http://torproject.gtor.org/dist/, https://torproject.gtor.org/dist/, rsync://torproject.gtor.org/website-mirror/dist/, , Thu Sep 4 02:26:09 2014
+SDL, SDL, US, United States, US, TRUE, TRUE, NO, http://torproject.nexiom.net, https://torproject.nexiom.net, , , http://torproject.nexiom.net, https://torproject.nexiom.net/dist, , , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://mirror.velcommuta.de/tor/, https://mirror.velcommuta.de/tor/, , , http://mirror.velcommuta.de/tor/dist/, https://mirror.velcommuta.de/tor/dist/, , , Thu Sep 4 02:26:09 2014
+EFF, EFF, US, United States, US, TRUE, FALSE, NO, https://tor.eff.org, https://tor.eff.org, , , https://tor.eff.org/dist/, https://tor.eff.org/dist/, , , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, GR, Greece, GR, TRUE, TRUE, NO, https://tor.void.gr, https://tor.void.gr, , , https://tor.void.gr/dist/, https://tor.void.gr/dist/, , , Thu Sep 4 02:26:09 2014
+Ich Eben, Tor Supporter, DE, Germany, DE, TRUE, TRUE, No, http://reichster.de/mirrors/torproject.org/, https://reichster.de/mirrors/torproject.org, , , http://reichster.de/mirrors/torproject.org/dist/, https://reichster.de/mirrors/torproject.org/dist/, , , Thu Sep 4 02:26:09 2014
+jlgaddis AT gnu DOT org, Evil Routers, US, United States, US, TRUE, FALSE, No, http://tor1.evilrouters.net/, , , , http://tor1.evilrouters.net/dist/, , , , Thu Sep 4 02:26:09 2014
+tor AT miglix DOT eu, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, NO, http://tor.miglix.eu, https://tor.miglix.eu, , , http://tor.miglix.eu/dist/, https://tor.miglix.eu/dist/, , , Thu Sep 4 02:26:09 2014
+tor TA ninurta TOD name, TorNinurtaName, AT, Austria, AT, TRUE, TRUE, no, http://tor.ninurta.name/, , , , http://tor.ninurta.name/dist/, , , , Thu Sep 4 02:26:09 2014
+fr33tux <AT> general-changelog-team.fr, Tor Supporter, FR, France, FR, TRUE, TRUE, No, http://tor.fr33tux.org, https://tor.fr33tux.org, , , http://tor.fr33tux.org/dist/, https://tor.fr33tux.org/dist/, , , Thu Sep 4 02:26:09 2014
+sebastian(at)bobrecki(dot)pl, Sebastian M. Bobrecki, PL, Poland, Europe, TRUE, FALSE, No, http://tor.iv.net.pl, https://tor.iv.net.pl, , , http://tor.iv.net.pl/dist/, https://tor.iv.net.pl/dist/, , , Thu Sep 4 02:26:09 2014
+tor-mirror AT rdns DOT cc, d0wn.biz, FR, France, Europe, TRUE, FALSE, No, http://tor.static.lu, https://tor.static.lu, , , http://tor.static.lu/dist/, https://tor.static.lu/dist/, , , Thu Sep 4 02:26:09 2014
+tor(a)moparisthebest.com, moparisthebest.com, DE, Germany, Europe, TRUE, TRUE, No, http://www.moparisthebest.com/tor/, https://www.moparisthebest.com/tor/, , , http://www.moparisthebest.com/tor/dist/, https://www.moparisthebest.com/tor/dist/, , , Thu Sep 4 02:26:09 2014
+Sebastian, Maxanoo, NL, The Netherlands, Amsterdam, TRUE, FALSE, NO, http://tor.maxanoo.com/, , , , http://tor.maxanoo.com/dist/, , , , Thu Sep 4 02:26:09 2014
+rorrim AT ayo DOT tl, Tor Supporter, IS, Iceland, Europe, TRUE, TRUE, No, http://ayo.tl/tor/, https://ayo.tl/tor/, , , http://ayo.tl/tor/dist/, https://ayo.tl/tor/dist/, , , Tue Sep 2 15:51:53 2014
+stefano.fenoglio AT gmail DOT com, Tor Supporter, IT, Italy, Europe, TRUE, FALSE, No, http://tor.stefanof.com, , , , , , http://tor.stefanof.com/dist, , Thu Sep 4 02:26:09 2014
+Jacob Henner, Anatomical Networks, US, United States, US, TRUE, TRUE, TRUE, http://tor.ventricle.us/, , , , http://tor.ventricle.us/dist/, , , , Thu Sep 4 02:26:09 2014
+webmaster[at]hackabit.nl, Hackabit.nl, NL, The Netherlands, Europe, TRUE, FALSE, No, http://hackabit.nl/tor/, https://hackabit.nl/tor/, , , http://hackabit.nl/tor/dist/, https://hackabit.nl/tor/dist/, , , Thu Sep 4 02:26:09 2014
+noc AT bbln DOT org, BBLN, NL, The Netherlands, Europe, TRUE, TRUE, No, http://mirror2.bbln.org/torproject/, https://mirror2.bbln.org/torproject/, rsync://mirror2.bbln.org/torproject/, ftp://mirror2.bbln.org/torproject/, http://mirror2.bbln.org/torproject/dist/, https://mirror2.bbln.org/torproject/dist/, rsync://mirror2.bbln.org/torproject/dist/, , Thu Sep 4 02:26:09 2014
+noc AT bbln DOT org, BBLN, FR, France, Europe, TRUE, TRUE, No, http://mirror.bbln.org/torproject/, https://mirror.bbln.org/torproject/, rsync://mirror.bbln.org/torproject/, ftp://mirror.bbln.org/torproject/, http://mirror.bbln.org/torproject/dist/, https://mirror.bbln.org/torproject/dist/, rsync://mirror.bbln.org/torproject/dist/, , Thu Sep 4 02:26:09 2014
+Tor Fan, Ramos Research, US, United States, US, TRUE, TRUE, No, http://tor.ramosresearch.com/, , , , http://tor.ramosresearch.com/dist/, , , , Thu Sep 4 02:26:09 2014
+Tor Fan, Tor Supporter, DE, Germany, Europe, TRUE, FALSE, No, http://tor.euve33747.vserver.de/, , , , http://tor.euve33747.vserver.de/dist, , , , Thu Sep 4 02:26:09 2014
+s7r[at]sky-ip[d0t]org, sky-ip.org, NL, Netherlands, NL, TRUE, FALSE, No, http://beautiful-mind.sky-ip.org/, , , , http://beautiful-mind.sky-ip.org/dist/, , , , Thu Sep 4 02:26:09 2014
+tor#pajonzeck#de, ITsn, DE, Germany, Europe, TRUE, FALSE, No, http://tor.pajonzeck.de/, https://tor.pajonzeck.de/, rsync://tor.pajonzeck.de/tor, http://tor.pajonzeck.de/dist/, https://tor.pajonzeck.de/dist/, rsync://tor.pajonzeck.de/tor/dist, , http://zgfgvob256pffy62.onion, Thu Sep 4 02:26:09 2014
+peter AT ludikovsky DOT name, Tor Supporter, AT, Austria, Europe, TRUE, TRUE, No, http://tor.ludikovsky.name/, , , , http://tor.ludikovsky.name/dist, , , http://54lnbzjo6xlr4f4j.onion/, Thu Sep 4 02:26:09 2014
+admin AT nuclear DASH weapons DOT net, Setec Administrator, US, Texas, Austin, TRUE, FALSE, No, http://tor.nuclear-weapons.net, https://tor.nuclear-weapons.net, , , , http://tor.nuclear-weapons.net/dist, https://tor.nuclear-weapons.net/dist, , Thu Sep 4 02:26:09 2014
+0x43DE8191, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, No, http://torproject.hactar.bz, , , , http://torproject.hactar.bz/dist/, , , , Thu Sep 4 02:26:09 2014
1
0

04 Sep '14
Author: phobos
Date: 2014-09-04 15:07:37 +0000 (Thu, 04 Sep 2014)
New Revision: 26944
Modified:
website/trunk/include/tor-mirrors.csv
Log:
add three new mirrors.
Modified: website/trunk/include/tor-mirrors.csv
===================================================================
--- website/trunk/include/tor-mirrors.csv 2014-09-04 02:23:50 UTC (rev 26943)
+++ website/trunk/include/tor-mirrors.csv 2014-09-04 15:07:37 UTC (rev 26944)
@@ -87,4 +87,7 @@
Tor Fan, Ramos Research, US, United States, US, TRUE, TRUE, No, http://tor.ramosresearch.com/, , , , http://tor.ramosresearch.com/dist/, , , , Tue Sep 2 03:41:05 2014
Tor Fan, Tor Supporter, DE, Germany, Europe, TRUE, FALSE, No, http://tor.euve33747.vserver.de/, , , , http://tor.euve33747.vserver.de/dist, , , , Tue Sep 2 03:41:05 2014
s7r[at]sky-ip[d0t]org, sky-ip.org, NL, Netherlands, NL, TRUE, FALSE, No, http://beautiful-mind.sky-ip.org/, , , , http://beautiful-mind.sky-ip.org/dist/, , , , Tue Sep 2 03:41:05 2014
-tor#pajonzeck#de, ITsn, DE, Germany, Europe, TRUE, FALSE, No, http://tor.pajonzeck.de/, https://tor.pajonzeck.de/, rsync://tor.pajonzeck.de/tor, http://tor.pajonzeck.de/dist/, https://tor.pajonzeck.de/dist/, rsync://tor.pajonzeck.de/tor/dist, http://zgfgvob256pffy62.onion, , Tue Sep 2 03:41:05 2014
+tor#pajonzeck#de, ITsn, DE, Germany, Europe, TRUE, FALSE, No, http://tor.pajonzeck.de/, https://tor.pajonzeck.de/, rsync://tor.pajonzeck.de/tor, http://tor.pajonzeck.de/dist/, https://tor.pajonzeck.de/dist/, rsync://tor.pajonzeck.de/tor/dist,, http://zgfgvob256pffy62.onion,, Tue Sep 2 03:41:05 2014
+peter AT ludikovsky DOT name,Tor Supporter,AT,Austria,Europe,TRUE,TRUE,No,http://tor.ludikovsky.name/,,,,http://tor.ludikovsky.name/dist,,,http://54lnbzjo6xlr4f4j.onion/,
+admin AT nuclear DASH weapons DOT net,Setec Administrator,US,Texas,Austin,TRUE,FALSE,No,http://tor.nuclear-weapons.net,…,
+0x43DE8191, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, No, http://torproject.hactar.bz, , , , http://torproject.hactar.bz/dist/, , , ,
\ No newline at end of file
1
0

[tor-browser-bundle/master] Include the Go license as required for certain PTs.
by gk@torproject.org 04 Sep '14
by gk@torproject.org 04 Sep '14
04 Sep '14
commit 2326062d5c514ee4ce45783b1ff05af6eadfdb52
Author: Yawning Angel <yawning(a)schwanenlied.me>
Date: Tue Sep 2 14:49:59 2014 +0000
Include the Go license as required for certain PTs.
Go license taken from http://golang.org/LICENSE?m=text
Fixes bug #13039.
---
.../Docs/Licenses/PluggableTransports/LICENSE | 9 +++++++
.../Docs/Licenses/PluggableTransports/LICENSE.GO | 27 ++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE b/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE
index 162589c..749986b 100644
--- a/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE
+++ b/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE
@@ -13,6 +13,15 @@ file LICENSE.PYTHON.
===============================================================================
+Go
+
+Some pluggable transports are written in Go and the binary packages include
+parts of the Go runtime library. A copy of the Go license (which itself
+includes the licenses of some of Go's components) is included in the file
+LICENSE.GO.
+
+===============================================================================
+
OpenSSL
(From http://openssl.org/source/license.html.)
diff --git a/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE.GO b/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE.GO
new file mode 100644
index 0000000..7448756
--- /dev/null
+++ b/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE.GO
@@ -0,0 +1,27 @@
+Copyright (c) 2012 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1
0

[onionoo/master] logging changes for build.xml, added logback config.
by karsten@torproject.org 04 Sep '14
by karsten@torproject.org 04 Sep '14
04 Sep '14
commit 9f39597fecd7c420a4496fa6c46a3b755f0a73e8
Author: iwakeh <iwakeh(a)users.ourproject.org>
Date: Mon Sep 1 17:30:00 2014 +0000
logging changes for build.xml, added logback config.
---
build.xml | 35 ++++++++++++++++++++------
etc/logback.xml | 57 +++++++++++++++++++++++++++++++++++++++++++
logback.xml | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++
vagrant/bootstrap.sh | 3 ++-
4 files changed, 153 insertions(+), 8 deletions(-)
diff --git a/build.xml b/build.xml
index 0d04892..bfe1067 100644
--- a/build.xml
+++ b/build.xml
@@ -12,6 +12,7 @@
value="${config}/web.xml.template"/>
<property name="webxml" value="${config}/web.xml"/>
<property name="warfile" value="onionoo.war"/>
+ <property name="source-and-target-java-version" value="1.6" />
<path id="classpath">
<pathelement path="${classes}"/>
<fileset dir="/usr/share/java">
@@ -21,25 +22,41 @@
<include name="gson.jar"/>
<include name="junit4.jar"/>
<include name="servlet-api-3.0.jar"/>
+ <include name="logback-classic.jar"/>
+ <include name="logback-core.jar"/>
+ <include name="slf4j-api.jar"/>
</fileset>
<fileset dir="deps/metrics-lib">
<include name="descriptor.jar"/>
</fileset>
+ <fileset dir="${config}">
+ <include name="logback.xml"/>
+ </fileset>
</path>
+
<target name="init">
<copy file="${contextxmltemplate}" tofile="${contextxml}"/>
<copy file="${webxmltemplate}" tofile="${webxml}"/>
<mkdir dir="${classes}"/>
</target>
+
+ <target name="clean" >
+ <delete includeEmptyDirs="true">
+ <fileset dir="${classes}" defaultexcludes="false" includes="**" />
+ </delete>
+ <delete file="${warfile}"/>
+ </target>
+
<target name="metrics-lib">
<ant dir="deps/metrics-lib"/>
</target>
+
<target name="compile"
depends="metrics-lib, init">
<javac destdir="${classes}"
srcdir="${javasources}"
- source="1.5"
- target="1.5"
+ source="${source-and-target-java-version}"
+ target="${source-and-target-java-version}"
debug="true"
deprecation="true"
optimize="false"
@@ -48,11 +65,12 @@
<classpath refid="classpath"/>
</javac>
</target>
+
<target name="test" depends="compile">
<javac destdir="${classes}"
srcdir="${tests}"
- source="1.5"
- target="1.5"
+ source="${source-and-target-java-version}"
+ target="${source-and-target-java-version}"
debug="true"
deprecation="true"
optimize="false"
@@ -78,6 +96,9 @@
<include name="descriptor.jar"/>
</lib>
<lib dir="/usr/share/java">
+ <include name="slf4j-api.jar"/>
+ <include name="logback-classic.jar"/>
+ <include name="logback-core.jar"/>
<include name="commons-codec.jar"/>
<include name="commons-compress.jar"/>
<include name="commons-lang.jar"/>
@@ -86,16 +107,16 @@
<classes dir="${classes}"/>
<zipfileset dir="${config}"
prefix="WEB-INF/classes"
- includes="logging.properties"/>
+ includes="logback.xml"/>
<metainf dir="${config}"
includes="context.xml"/>
</war>
</target>
<target name="run" depends="compile">
+ <copy file="logback.xml" todir="${classes}" />
<java fork="true"
maxmemory="${maxmemory.value}"
- classname="org.torproject.onionoo.cron.Main"
- error="errors">
+ classname="org.torproject.onionoo.cron.Main">
<classpath refid="classpath"/>
</java>
</target>
diff --git a/etc/logback.xml b/etc/logback.xml
new file mode 100644
index 0000000..812c7c9
--- /dev/null
+++ b/etc/logback.xml
@@ -0,0 +1,57 @@
+<configuration debug="false">
+
+ <!-- don't forget the trailing slash! -->
+ <property name="logfile-base" value="/var/log/tomcat6/" />
+ <property name="utc-date-pattern" value="%date{yyyy-MM-dd HH:mm:ss, UTC}" />
+
+ <appender name="FILEALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logfile-base}onionoo-all.log</file>
+ <encoder>
+ <pattern>${utc-date-pattern} %level %logger{25}:%line %msg%n</pattern>
+ </encoder>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- rollover daily -->
+ <FileNamePattern>${logfile-base}onionoo-all.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+ <maxHistory>10</maxHistory>
+ <timeBasedFileNamingAndTriggeringPolicy
+ class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+ <!-- or whenever the file size reaches 1MB -->
+ <maxFileSize>1MB</maxFileSize>
+ </timeBasedFileNamingAndTriggeringPolicy>
+ </rollingPolicy>
+ </appender>
+
+ <appender name="FILEERR" class="ch.qos.logback.core.FileAppender">
+ <file>${logfile-base}onionoo-err.log</file>
+ <encoder>
+ <pattern>%date %level %logger{30}(%line): %msg%n</pattern>
+ </encoder>
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+ <level>ERROR</level>
+ </filter>
+ </appender>
+ <appender name="FILESTATISTICS" class="ch.qos.logback.core.FileAppender">
+ <file>${logfile-base}onionoo-statistics.log</file>
+ <encoder>
+ <pattern>${utc-date-pattern} %msg%n</pattern>
+ </encoder>
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+ <level>INFO</level>
+ </filter>
+ </appender>
+
+ <logger name="org.torproject" >
+ <appender-ref ref="FILEERR" />
+ </logger>
+ <logger name="org.torproject.onionoo.server.PerformanceMetrics" >
+ <appender-ref ref="FILESTATISTICS" />
+ </logger>
+ <logger name="statistics" >
+ <appender-ref ref="FILESTATISTICS" />
+ </logger>
+
+ <root level="ALL">
+ <appender-ref ref="FILEALL" />
+ </root>
+</configuration>
+
diff --git a/logback.xml b/logback.xml
new file mode 100644
index 0000000..f6d16d0
--- /dev/null
+++ b/logback.xml
@@ -0,0 +1,66 @@
+<configuration debug="false">
+
+ <!-- don't forget the trailing slash! -->
+ <property name="logfile-base" value="/srv/onionoo.torproject.org/onionoo/" />
+ <property name="utc-date-pattern" value="%date{yyyy-MM-dd HH:mm:ss, UTC}" />
+
+ <appender name="FILEALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${logfile-base}onionoo-all.log</file>
+ <encoder>
+ <pattern>${utc-date-pattern} %level [runtime: %r] %logger{20}:%line %msg%n</pattern>
+ </encoder>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- rollover daily -->
+ <FileNamePattern>${logfile-base}onionoo-all.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+ <maxHistory>10</maxHistory>
+ <timeBasedFileNamingAndTriggeringPolicy
+ class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+ <!-- or whenever the file size reaches 1MB -->
+ <maxFileSize>1MB</maxFileSize>
+ </timeBasedFileNamingAndTriggeringPolicy>
+ </rollingPolicy>
+ </appender>
+
+ <appender name="FILEERR" class="ch.qos.logback.core.FileAppender">
+ <file>${logfile-base}onionoo-err.log</file>
+ <encoder>
+ <pattern>${utc-date-pattern} %level %logger{30}(%line): %msg%n</pattern>
+ </encoder>
+
+ <!-- ERROR or worse -->
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+ <level>ERROR</level>
+ </filter>
+ </appender>
+
+ <appender name="FILESTATISTICS" class="ch.qos.logback.core.FileAppender">
+ <file>${logfile-base}onionoo-statistics.log</file>
+ <encoder>
+ <pattern>${utc-date-pattern} [runtime: %r] %msg%n</pattern>
+ </encoder>
+
+ <!-- only INFO level -->
+ <filter class="ch.qos.logback.classic.filter.LevelFilter">
+ <level>INFO</level>
+ <onMatch>ACCEPT</onMatch>
+ <onMismatch>DENY</onMismatch>
+ </filter>
+ </appender>
+
+ <logger name="org.torproject" >
+ <appender-ref ref="FILEERR" />
+ </logger>
+ <logger name="org.torproject.onionoo.cron.Main" >
+ <appender-ref ref="FILESTATISTICS" />
+ </logger>
+
+ <!-- a named logger -->
+ <logger name="statistics" >
+ <appender-ref ref="FILESTATISTICS" />
+ </logger>
+
+ <root level="ALL">
+ <appender-ref ref="FILEALL" />
+ </root>
+</configuration>
+
diff --git a/vagrant/bootstrap.sh b/vagrant/bootstrap.sh
index f3f0118..d4b1724 100644
--- a/vagrant/bootstrap.sh
+++ b/vagrant/bootstrap.sh
@@ -9,7 +9,7 @@ apt-get -y upgrade
echo "Installing required packages."
apt-get install -y libcommons-codec-java libcommons-compress-java \
libcommons-lang-java libgoogle-gson-java junit4 libservlet3.0-java \
-openjdk-6-jdk ant liblog4j1.2-java tomcat6
+openjdk-6-jdk ant tomcat6 libslf4j-java liblogback-java
echo "Setting up paths and creating symbolic links."
mkdir -p /srv/onionoo.torproject.org/onionoo/
@@ -21,6 +21,7 @@ ln -s /vagrant/etc
ln -s /vagrant/geoip
ln -s /vagrant/src
ln -s /vagrant/web
+ln -s /vagrant/logback.xml
ln -s /srv/onionoo.torproject.org/onionoo/onionoo.war \
/var/lib/tomcat6/webapps/onionoo.war
chown -R vagrant:vagrant /srv/onionoo.torproject.org/
1
0
commit 6139c32c2ab8fc1cc00cae2d9ae1efb19dacae17
Author: iwakeh <iwakeh(a)users.ourproject.org>
Date: Mon Sep 1 17:30:00 2014 +0000
logging java source changes.
---
.../java/org/torproject/onionoo/cron/Main.java | 51 ++++++-----
.../torproject/onionoo/docs/BandwidthStatus.java | 9 +-
.../org/torproject/onionoo/docs/ClientsStatus.java | 7 +-
.../torproject/onionoo/docs/DateTimeHelper.java | 15 +++-
.../org/torproject/onionoo/docs/DocumentStore.java | 92 ++++++++++----------
.../org/torproject/onionoo/docs/NodeStatus.java | 19 ++--
.../org/torproject/onionoo/docs/UptimeHistory.java | 2 +-
.../org/torproject/onionoo/docs/UptimeStatus.java | 8 +-
.../org/torproject/onionoo/docs/WeightsStatus.java | 9 +-
.../onionoo/server/PerformanceMetrics.java | 42 ++++++---
.../onionoo/updater/ClientsStatusUpdater.java | 6 +-
.../onionoo/updater/DescriptorDownloader.java | 22 +++--
.../onionoo/updater/DescriptorQueue.java | 27 +++---
.../onionoo/updater/DescriptorSource.java | 52 +++++++----
.../torproject/onionoo/updater/LookupService.java | 48 +++++-----
.../onionoo/updater/NodeDetailsStatusUpdater.java | 35 ++++----
.../onionoo/updater/ReverseDomainNameResolver.java | 20 +++--
.../onionoo/updater/StatusUpdateRunner.java | 19 ++--
.../onionoo/updater/UptimeStatusUpdater.java | 8 +-
.../torproject/onionoo/util/FormattingUtils.java | 31 +++++++
.../java/org/torproject/onionoo/util/LockFile.java | 10 ++-
.../java/org/torproject/onionoo/util/Logger.java | 82 -----------------
.../onionoo/writer/BandwidthDocumentWriter.java | 8 +-
.../onionoo/writer/ClientsDocumentWriter.java | 13 ++-
.../onionoo/writer/DetailsDocumentWriter.java | 8 +-
.../onionoo/writer/DocumentWriterRunner.java | 9 +-
.../onionoo/writer/SummaryDocumentWriter.java | 17 ++--
.../onionoo/writer/UptimeDocumentWriter.java | 13 ++-
.../onionoo/writer/WeightsDocumentWriter.java | 10 ++-
29 files changed, 390 insertions(+), 302 deletions(-)
diff --git a/src/main/java/org/torproject/onionoo/cron/Main.java b/src/main/java/org/torproject/onionoo/cron/Main.java
index bd4b95a..d9cb1b1 100644
--- a/src/main/java/org/torproject/onionoo/cron/Main.java
+++ b/src/main/java/org/torproject/onionoo/cron/Main.java
@@ -2,76 +2,79 @@
* See LICENSE for licensing information */
package org.torproject.onionoo.cron;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.docs.DocumentStore;
import org.torproject.onionoo.docs.DocumentStoreFactory;
import org.torproject.onionoo.updater.DescriptorSource;
import org.torproject.onionoo.updater.DescriptorSourceFactory;
import org.torproject.onionoo.updater.StatusUpdateRunner;
import org.torproject.onionoo.util.LockFile;
-import org.torproject.onionoo.util.Logger;
import org.torproject.onionoo.writer.DocumentWriterRunner;
/* Update search data and status data files. */
public class Main {
+ private static Logger log = LoggerFactory.getLogger(Main.class);
+
private Main() {
}
public static void main(String[] args) {
-
+ log.debug("Started ...");
LockFile lf = new LockFile();
- Logger.setTime();
- Logger.printStatus("Initializing.");
+ log.info("Initializing.");
if (lf.acquireLock()) {
- Logger.printStatusTime("Acquired lock");
+ log.info("Acquired lock");
} else {
- Logger.printErrorTime("Could not acquire lock. Is Onionoo "
+ log.error("Could not acquire lock. Is Onionoo "
+ "already running? Terminating");
return;
}
+ log.debug(" ... running .... ");
DescriptorSource dso = DescriptorSourceFactory.getDescriptorSource();
- Logger.printStatusTime("Initialized descriptor source");
+ log.info("Initialized descriptor source");
DocumentStore ds = DocumentStoreFactory.getDocumentStore();
- Logger.printStatusTime("Initialized document store");
+ log.info("Initialized document store");
StatusUpdateRunner sur = new StatusUpdateRunner();
- Logger.printStatusTime("Initialized status update runner");
+ log.info("Initialized status update runner");
DocumentWriterRunner dwr = new DocumentWriterRunner();
- Logger.printStatusTime("Initialized document writer runner");
+ log.info("Initialized document writer runner");
- Logger.printStatus("Downloading descriptors.");
+ log.info("Downloading descriptors.");
dso.downloadDescriptors();
- Logger.printStatus("Reading descriptors.");
+ log.info("Reading descriptors.");
dso.readDescriptors();
- Logger.printStatus("Updating internal status files.");
+ log.info("Updating internal status files.");
sur.updateStatuses();
- Logger.printStatus("Updating document files.");
+ log.info("Updating document files.");
dwr.writeDocuments();
- Logger.printStatus("Shutting down.");
+ log.info("Shutting down.");
dso.writeHistoryFiles();
- Logger.printStatusTime("Wrote parse histories");
+ log.info("Wrote parse histories");
ds.flushDocumentCache();
- Logger.printStatusTime("Flushed document cache");
+ log.info("Flushed document cache");
- Logger.printStatus("Gathering statistics.");
+ log.info("Gathering statistics.");
sur.logStatistics();
dwr.logStatistics();
- Logger.printStatistics("Descriptor source", dso.getStatsString());
- Logger.printStatistics("Document store", ds.getStatsString());
+ log.info("Descriptor source", dso.getStatsString());
+ log.info("Document store", ds.getStatsString());
- Logger.printStatus("Releasing lock.");
+ log.info("Releasing lock.");
if (lf.releaseLock()) {
- Logger.printStatusTime("Released lock");
+ log.info("Released lock");
} else {
- Logger.printErrorTime("Could not release lock. The next "
+ log.error("Could not release lock. The next "
+ "execution may not start as expected");
}
- Logger.printStatus("Terminating.");
+ log.info("Terminating.");
}
}
diff --git a/src/main/java/org/torproject/onionoo/docs/BandwidthStatus.java b/src/main/java/org/torproject/onionoo/docs/BandwidthStatus.java
index 3a0d6ba..4c6ea79 100644
--- a/src/main/java/org/torproject/onionoo/docs/BandwidthStatus.java
+++ b/src/main/java/org/torproject/onionoo/docs/BandwidthStatus.java
@@ -7,11 +7,16 @@ import java.util.Scanner;
import java.util.SortedMap;
import java.util.TreeMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.descriptor.BandwidthHistory;
import org.torproject.onionoo.util.TimeFactory;
public class BandwidthStatus extends Document {
+ private static Logger log = LoggerFactory.getLogger(
+ BandwidthStatus.class);
+
private transient boolean isDirty = false;
public boolean isDirty() {
return this.isDirty;
@@ -44,7 +49,7 @@ public class BandwidthStatus extends Document {
String line = s.nextLine();
String[] parts = line.split(" ");
if (parts.length != 6) {
- System.err.println("Illegal line '" + line + "' in bandwidth "
+ log.error("Illegal line '" + line + "' in bandwidth "
+ "history. Skipping this line.");
continue;
}
@@ -53,7 +58,7 @@ public class BandwidthStatus extends Document {
long startMillis = DateTimeHelper.parse(parts[1] + " " + parts[2]);
long endMillis = DateTimeHelper.parse(parts[3] + " " + parts[4]);
if (startMillis < 0L || endMillis < 0L) {
- System.err.println("Could not parse timestamp while reading "
+ log.error("Could not parse timestamp while reading "
+ "bandwidth history. Skipping.");
break;
}
diff --git a/src/main/java/org/torproject/onionoo/docs/ClientsStatus.java b/src/main/java/org/torproject/onionoo/docs/ClientsStatus.java
index 7257faa..a15ff56 100644
--- a/src/main/java/org/torproject/onionoo/docs/ClientsStatus.java
+++ b/src/main/java/org/torproject/onionoo/docs/ClientsStatus.java
@@ -6,10 +6,15 @@ import java.util.Scanner;
import java.util.SortedSet;
import java.util.TreeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.util.TimeFactory;
public class ClientsStatus extends Document {
+ private static Logger log = LoggerFactory.getLogger(
+ ClientsStatus.class);
+
private transient boolean isDirty = false;
public boolean isDirty() {
return this.isDirty;
@@ -35,7 +40,7 @@ public class ClientsStatus extends Document {
if (parsedLine != null) {
this.history.add(parsedLine);
} else {
- System.err.println("Could not parse clients history line '"
+ log.error("Could not parse clients history line '"
+ line + "'. Skipping.");
}
}
diff --git a/src/main/java/org/torproject/onionoo/docs/DateTimeHelper.java b/src/main/java/org/torproject/onionoo/docs/DateTimeHelper.java
index 78aa78f..27b54a0 100644
--- a/src/main/java/org/torproject/onionoo/docs/DateTimeHelper.java
+++ b/src/main/java/org/torproject/onionoo/docs/DateTimeHelper.java
@@ -9,8 +9,16 @@ import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class DateTimeHelper {
+ public final static long NO_TIME_AVAILABLE = -1L;
+
+ private final static Logger log = LoggerFactory.getLogger(
+ DateTimeHelper.class);
+
private DateTimeHelper() {
}
@@ -79,10 +87,15 @@ public class DateTimeHelper {
}
public static long parse(String string, String format) {
+ if (null == string) {
+ log.warn("Date String was null.");
+ return NO_TIME_AVAILABLE;
+ }
try {
return getDateFormat(format).parse(string).getTime();
} catch (ParseException e) {
- return -1L;
+ log.warn(e.getMessage(), e);
+ return NO_TIME_AVAILABLE;
}
}
diff --git a/src/main/java/org/torproject/onionoo/docs/DocumentStore.java b/src/main/java/org/torproject/onionoo/docs/DocumentStore.java
index 73da1ae..e3261e4 100644
--- a/src/main/java/org/torproject/onionoo/docs/DocumentStore.java
+++ b/src/main/java/org/torproject/onionoo/docs/DocumentStore.java
@@ -21,7 +21,9 @@ import java.util.Stack;
import java.util.TreeMap;
import java.util.TreeSet;
-import org.torproject.onionoo.util.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.torproject.onionoo.util.FormattingUtils;
import org.torproject.onionoo.util.Time;
import org.torproject.onionoo.util.TimeFactory;
@@ -36,6 +38,9 @@ import com.google.gson.JsonParseException;
// TODO Also look into simple key-value stores instead of real databases.
public class DocumentStore {
+ private static Logger log = LoggerFactory.getLogger(
+ DocumentStore.class);
+
private final File statusDir = new File("status");
private File outDir = new File("out");
@@ -102,9 +107,8 @@ public class DocumentStore {
this.listedFiles += parsedNodeStatuses.size();
this.listOperations++;
} catch (IOException e) {
- System.err.println("Could not read file '"
- + summaryFile.getAbsolutePath() + "'.");
- e.printStackTrace();
+ log.error("Could not read file '"
+ + summaryFile.getAbsolutePath() + "'.", e);
}
}
}
@@ -145,13 +149,11 @@ public class DocumentStore {
this.listedFiles += parsedSummaryDocuments.size();
this.listOperations++;
} catch (IOException e) {
- System.err.println("Could not read file '"
- + summaryFile.getAbsolutePath() + "'.");
- e.printStackTrace();
+ log.error("Could not read file '"
+ + summaryFile.getAbsolutePath() + "'.", e);
} catch (JsonParseException e) {
- System.err.println("Could not parse summary document '" + line
- + "' in file '" + summaryFile.getAbsolutePath() + "'.");
- e.printStackTrace();
+ log.error("Could not parse summary document '" + line
+ + "' in file '" + summaryFile.getAbsolutePath() + "'.", e);
}
}
}
@@ -289,7 +291,7 @@ public class DocumentStore {
document instanceof UptimeStatus) {
documentString = document.toDocumentString();
} else {
- System.err.println("Serializing is not supported for type "
+ log.error("Serializing is not supported for type "
+ document.getClass().getName() + ".");
return false;
}
@@ -306,9 +308,8 @@ public class DocumentStore {
this.storedFiles++;
this.storedBytes += documentString.length();
} catch (IOException e) {
- System.err.println("Could not write file '"
- + documentFile.getAbsolutePath() + "'.");
- e.printStackTrace();
+ log.error("Could not write file '"
+ + documentFile.getAbsolutePath() + "'.", e);
return false;
}
return true;
@@ -391,7 +392,7 @@ public class DocumentStore {
if (documentFile == null || !documentFile.exists()) {
return null;
} else if (documentFile.isDirectory()) {
- System.err.println("Could not read file '"
+ log.error("Could not read file '"
+ documentFile.getAbsolutePath() + "', because it is a "
+ "directory.");
return null;
@@ -415,9 +416,8 @@ public class DocumentStore {
this.retrievedFiles++;
this.retrievedBytes += documentString.length();
} catch (IOException e) {
- System.err.println("Could not read file '"
- + documentFile.getAbsolutePath() + "'.");
- e.printStackTrace();
+ log.error("Could not read file '"
+ + documentFile.getAbsolutePath() + "'.", e);
return null;
}
T result = null;
@@ -440,7 +440,7 @@ public class DocumentStore {
return this.retrieveParsedDocumentFile(documentType, "{"
+ documentString + "}");
} else {
- System.err.println("Parsing is not supported for type "
+ log.error("Parsing is not supported for type "
+ documentType.getName() + ".");
}
return result;
@@ -454,13 +454,13 @@ public class DocumentStore {
result.fromDocumentString(documentString);
} catch (InstantiationException e) {
/* Handle below. */
- e.printStackTrace();
+ log.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
/* Handle below. */
- e.printStackTrace();
+ log.error(e.getMessage(), e);
}
if (result == null) {
- System.err.println("Could not initialize parsed status file of "
+ log.error("Could not initialize parsed status file of "
+ "type " + documentType.getName() + ".");
}
return result;
@@ -474,10 +474,10 @@ public class DocumentStore {
result = gson.fromJson(documentString, documentType);
} catch (JsonParseException e) {
/* Handle below. */
- e.printStackTrace();
+ log.error(e.getMessage(), e);
}
if (result == null) {
- System.err.println("Could not initialize parsed document of type "
+ log.error("Could not initialize parsed document of type "
+ documentType.getName() + ".");
}
return result;
@@ -491,13 +491,13 @@ public class DocumentStore {
result.setDocumentString(documentString);
} catch (InstantiationException e) {
/* Handle below. */
- e.printStackTrace();
+ log.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
/* Handle below. */
- e.printStackTrace();
+ log.error(e.getMessage(), e);
}
if (result == null) {
- System.err.println("Could not initialize unparsed document of type "
+ log.error("Could not initialize unparsed document of type "
+ documentType.getName() + ".");
}
return result;
@@ -536,7 +536,7 @@ public class DocumentStore {
Class<T> documentType, String fingerprint) {
File documentFile = this.getDocumentFile(documentType, fingerprint);
if (documentFile == null || !documentFile.delete()) {
- System.err.println("Could not delete file '"
+ log.error("Could not delete file '"
+ documentFile.getAbsolutePath() + "'.");
return false;
}
@@ -655,7 +655,7 @@ public class DocumentStore {
if (line != null) {
sb.append(line + "\n");
} else {
- System.err.println("Could not serialize relay node status '"
+ log.error("Could not serialize relay node status '"
+ relay.getFingerprint() + "'");
}
}
@@ -664,7 +664,7 @@ public class DocumentStore {
if (line != null) {
sb.append(line + "\n");
} else {
- System.err.println("Could not serialize bridge node status '"
+ log.error("Could not serialize bridge node status '"
+ bridge.getFingerprint() + "'");
}
}
@@ -677,9 +677,8 @@ public class DocumentStore {
this.storedFiles++;
this.storedBytes += documentString.length();
} catch (IOException e) {
- System.err.println("Could not write file '"
- + summaryFile.getAbsolutePath() + "'.");
- e.printStackTrace();
+ log.error("Could not write file '"
+ + summaryFile.getAbsolutePath() + "'.", e);
}
}
@@ -692,7 +691,7 @@ public class DocumentStore {
if (line != null) {
sb.append(line + "\n");
} else {
- System.err.println("Could not serialize relay summary document '"
+ log.error("Could not serialize relay summary document '"
+ summaryDocument.getFingerprint() + "'");
}
}
@@ -706,9 +705,8 @@ public class DocumentStore {
this.storedFiles++;
this.storedBytes += documentString.length();
} catch (IOException e) {
- System.err.println("Could not write file '"
- + summaryFile.getAbsolutePath() + "'.");
- e.printStackTrace();
+ log.error("Could not write file '"
+ + summaryFile.getAbsolutePath() + "'.", e);
}
}
@@ -726,26 +724,26 @@ public class DocumentStore {
this.storedFiles++;
this.storedBytes += documentString.length();
} catch (IOException e) {
- System.err.println("Could not write file '"
- + updateFile.getAbsolutePath() + "'.");
- e.printStackTrace();
+ log.error("Could not write file '"
+ + updateFile.getAbsolutePath() + "'.", e);
}
}
public String getStatsString() {
StringBuilder sb = new StringBuilder();
- sb.append(" " + Logger.formatDecimalNumber(listOperations)
+ sb.append(" " + FormattingUtils.formatDecimalNumber(listOperations)
+ " list operations performed\n");
- sb.append(" " + Logger.formatDecimalNumber(listedFiles)
+ sb.append(" " + FormattingUtils.formatDecimalNumber(listedFiles)
+ " files listed\n");
- sb.append(" " + Logger.formatDecimalNumber(storedFiles)
+ sb.append(" " + FormattingUtils.formatDecimalNumber(storedFiles)
+ " files stored\n");
- sb.append(" " + Logger.formatBytes(storedBytes) + " stored\n");
- sb.append(" " + Logger.formatDecimalNumber(retrievedFiles)
+ sb.append(" " + FormattingUtils.formatBytes(storedBytes)
+ + " stored\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(retrievedFiles)
+ " files retrieved\n");
- sb.append(" " + Logger.formatBytes(retrievedBytes)
+ sb.append(" " + FormattingUtils.formatBytes(retrievedBytes)
+ " retrieved\n");
- sb.append(" " + Logger.formatDecimalNumber(removedFiles)
+ sb.append(" " + FormattingUtils.formatDecimalNumber(removedFiles)
+ " files removed\n");
return sb.toString();
}
diff --git a/src/main/java/org/torproject/onionoo/docs/NodeStatus.java b/src/main/java/org/torproject/onionoo/docs/NodeStatus.java
index fa31968..0df8847 100644
--- a/src/main/java/org/torproject/onionoo/docs/NodeStatus.java
+++ b/src/main/java/org/torproject/onionoo/docs/NodeStatus.java
@@ -15,11 +15,16 @@ import java.util.TreeSet;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/* Store search data of a single relay that was running in the past seven
* days. */
public class NodeStatus extends Document {
+ private final static Logger log = LoggerFactory.getLogger(
+ NodeStatus.class);
+
private boolean isRelay;
public boolean isRelay() {
return this.isRelay;
@@ -377,7 +382,7 @@ public class NodeStatus extends Document {
String[] parts = documentString.trim().split(separator);
isRelay = parts[0].equals("r");
if (parts.length < 9) {
- System.err.println("Too few space-separated values in line '"
+ log.error("Too few space-separated values in line '"
+ documentString.trim() + "'. Skipping.");
return null;
}
@@ -389,7 +394,7 @@ public class NodeStatus extends Document {
if (addresses.contains(";")) {
String[] addressParts = addresses.split(";", -1);
if (addressParts.length != 3) {
- System.err.println("Invalid addresses entry in line '"
+ log.error("Invalid addresses entry in line '"
+ documentString.trim() + "'. Skipping.");
return null;
}
@@ -407,7 +412,7 @@ public class NodeStatus extends Document {
}
lastSeenMillis = DateTimeHelper.parse(parts[4] + " " + parts[5]);
if (lastSeenMillis < 0L) {
- System.err.println("Parse exception while parsing node status "
+ log.error("Parse exception while parsing node status "
+ "line '" + documentString + "'. Skipping.");
return null;
}
@@ -440,7 +445,7 @@ public class NodeStatus extends Document {
firstSeenMillis = DateTimeHelper.parse(parts[15] + " "
+ parts[16]);
if (firstSeenMillis < 0L) {
- System.err.println("Parse exception while parsing node status "
+ log.error("Parse exception while parsing node status "
+ "line '" + documentString + "'. Skipping.");
return null;
}
@@ -450,7 +455,7 @@ public class NodeStatus extends Document {
lastChangedAddresses = DateTimeHelper.parse(parts[17] + " "
+ parts[18]);
if (lastChangedAddresses < 0L) {
- System.err.println("Parse exception while parsing node status "
+ log.error("Parse exception while parsing node status "
+ "line '" + documentString + "'. Skipping.");
return null;
}
@@ -470,14 +475,14 @@ public class NodeStatus extends Document {
parts[22].split(";")));
}
} catch (NumberFormatException e) {
- System.err.println("Number format exception while parsing node "
+ log.error("Number format exception while parsing node "
+ "status line '" + documentString + "': " + e.getMessage()
+ ". Skipping.");
return null;
} catch (Exception e) {
/* This catch block is only here to handle yet unknown errors. It
* should go away once we're sure what kind of errors can occur. */
- System.err.println("Unknown exception while parsing node status "
+ log.error("Unknown exception while parsing node status "
+ "line '" + documentString + "': " + e.getMessage() + ". "
+ "Skipping.");
return null;
diff --git a/src/main/java/org/torproject/onionoo/docs/UptimeHistory.java b/src/main/java/org/torproject/onionoo/docs/UptimeHistory.java
index d2655d5..0d27242 100644
--- a/src/main/java/org/torproject/onionoo/docs/UptimeHistory.java
+++ b/src/main/java/org/torproject/onionoo/docs/UptimeHistory.java
@@ -39,7 +39,7 @@ public class UptimeHistory
}
long startMillis = DateTimeHelper.parse(parts[1],
DateTimeHelper.DATEHOUR_NOSPACE_FORMAT);
- if (startMillis < 0L) {
+ if (DateTimeHelper.NO_TIME_AVAILABLE == startMillis) {
return null;
}
int uptimeHours = -1;
diff --git a/src/main/java/org/torproject/onionoo/docs/UptimeStatus.java b/src/main/java/org/torproject/onionoo/docs/UptimeStatus.java
index 3bc268a..eaa28ff 100644
--- a/src/main/java/org/torproject/onionoo/docs/UptimeStatus.java
+++ b/src/main/java/org/torproject/onionoo/docs/UptimeStatus.java
@@ -6,8 +6,14 @@ import java.util.Scanner;
import java.util.SortedSet;
import java.util.TreeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class UptimeStatus extends Document {
+ private final static Logger log = LoggerFactory.getLogger(
+ UptimeStatus.class);
+
private transient boolean isDirty = false;
public boolean isDirty() {
return this.isDirty;
@@ -46,7 +52,7 @@ public class UptimeStatus extends Document {
this.bridgeHistory.add(parsedLine);
}
} else {
- System.err.println("Could not parse uptime history line '"
+ log.error("Could not parse uptime history line '"
+ line + "'. Skipping.");
}
}
diff --git a/src/main/java/org/torproject/onionoo/docs/WeightsStatus.java b/src/main/java/org/torproject/onionoo/docs/WeightsStatus.java
index e49dfb1..e20112e 100644
--- a/src/main/java/org/torproject/onionoo/docs/WeightsStatus.java
+++ b/src/main/java/org/torproject/onionoo/docs/WeightsStatus.java
@@ -7,10 +7,15 @@ import java.util.Scanner;
import java.util.SortedMap;
import java.util.TreeMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.util.TimeFactory;
public class WeightsStatus extends Document {
+ private final static Logger log = LoggerFactory.getLogger(
+ WeightsStatus.class);
+
private transient boolean isDirty = false;
public boolean isDirty() {
return this.isDirty;
@@ -51,7 +56,7 @@ public class WeightsStatus extends Document {
continue;
}
if (parts.length != 9 && parts.length != 11) {
- System.err.println("Illegal line '" + line + "' in weights "
+ log.error("Illegal line '" + line + "' in weights "
+ "status file. Skipping this line.");
continue;
}
@@ -65,7 +70,7 @@ public class WeightsStatus extends Document {
long freshUntilMillis = DateTimeHelper.parse(parts[2] + " "
+ parts[3]);
if (validAfterMillis < 0L || freshUntilMillis < 0L) {
- System.err.println("Could not parse timestamp while reading "
+ log.error("Could not parse timestamp while reading "
+ "weights status file. Skipping.");
break;
}
diff --git a/src/main/java/org/torproject/onionoo/server/PerformanceMetrics.java b/src/main/java/org/torproject/onionoo/server/PerformanceMetrics.java
index 9d9f3be..e764601 100644
--- a/src/main/java/org/torproject/onionoo/server/PerformanceMetrics.java
+++ b/src/main/java/org/torproject/onionoo/server/PerformanceMetrics.java
@@ -14,6 +14,9 @@ import java.util.TimeZone;
import java.util.TreeMap;
import java.util.TreeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.torproject.onionoo.docs.DateTimeHelper;
import org.torproject.onionoo.util.Time;
import org.torproject.onionoo.util.TimeFactory;
@@ -117,6 +120,9 @@ class IntegerDistribution {
public class PerformanceMetrics {
+ private static final Logger log = LoggerFactory.getLogger(
+ PerformanceMetrics.class);
+
private static final Object lock = new Object();
private static Time time;
@@ -155,25 +161,25 @@ public class PerformanceMetrics {
SimpleDateFormat dateTimeFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
dateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
- System.err.println("Request statistics ("
+ log.info("Request statistics ("
+ dateTimeFormat.format(lastLoggedMillis
+ LOG_INTERVAL_MILLIS) + ", " + (LOG_INTERVAL_SECONDS)
+ " s):");
- System.err.println(" Total processed requests: "
+ log.info(" Total processed requests: "
+ totalProcessedRequests);
- System.err.println(" Most frequently requested resource: "
+ log.info(" Most frequently requested resource: "
+ requestsByResourceType);
- System.err.println(" Most frequently requested parameter "
+ log.info(" Most frequently requested parameter "
+ "combinations: " + requestsByParameters);
- System.err.println(" Matching relays per request: "
+ log.info(" Matching relays per request: "
+ matchingRelayDocuments);
- System.err.println(" Matching bridges per request: "
+ log.info(" Matching bridges per request: "
+ matchingBridgeDocuments);
- System.err.println(" Written characters per response: "
+ log.info(" Written characters per response: "
+ writtenChars);
- System.err.println(" Milliseconds to handle request: "
+ log.info(" Milliseconds to handle request: "
+ handleRequestMillis);
- System.err.println(" Milliseconds to build response: "
+ log.info(" Milliseconds to build response: "
+ buildResponseMillis);
totalProcessedRequests.clear();
requestsByResourceType.clear();
@@ -189,15 +195,25 @@ public class PerformanceMetrics {
LOG_INTERVAL_MILLIS);
}
totalProcessedRequests.increment();
- handleRequestMillis.addLong(parsedRequestMillis
- - receivedRequestMillis);
+ long handlingTime = parsedRequestMillis - receivedRequestMillis;
+ if (handlingTime > DateTimeHelper.ONE_SECOND) {
+ log.warn("longer request handling: " + handlingTime + " ms for "
+ + resourceType + " params: " + parameterKeys + " and "
+ + charsWritten + " chars.");
+ }
+ handleRequestMillis.addLong(handlingTime);
requestsByResourceType.addString(resourceType);
requestsByParameters.addString(parameterKeys.toString());
matchingRelayDocuments.addLong(relayDocumentsWritten);
matchingBridgeDocuments.addLong(bridgeDocumentsWritten);
writtenChars.addLong(charsWritten);
- buildResponseMillis.addLong(writtenResponseMillis
- - parsedRequestMillis);
+ long responseTime = writtenResponseMillis - parsedRequestMillis;
+ if (responseTime > DateTimeHelper.ONE_SECOND) {
+ log.warn("longer response building: " + responseTime + " ms for "
+ + resourceType + " params: " + parameterKeys + " and "
+ + charsWritten + " chars.");
+ }
+ buildResponseMillis.addLong(responseTime);
}
}
diff --git a/src/main/java/org/torproject/onionoo/updater/ClientsStatusUpdater.java b/src/main/java/org/torproject/onionoo/updater/ClientsStatusUpdater.java
index 4c21032..f3f2e0f 100644
--- a/src/main/java/org/torproject/onionoo/updater/ClientsStatusUpdater.java
+++ b/src/main/java/org/torproject/onionoo/updater/ClientsStatusUpdater.java
@@ -15,7 +15,7 @@ import org.torproject.onionoo.docs.ClientsStatus;
import org.torproject.onionoo.docs.DateTimeHelper;
import org.torproject.onionoo.docs.DocumentStore;
import org.torproject.onionoo.docs.DocumentStoreFactory;
-import org.torproject.onionoo.util.Logger;
+import org.torproject.onionoo.util.FormattingUtils;
/*
* Example extra-info descriptor used as input:
@@ -164,10 +164,10 @@ public class ClientsStatusUpdater implements DescriptorListener,
}
StringBuilder sb = new StringBuilder();
sb.append(" "
- + Logger.formatDecimalNumber(newIntervals / 2)
+ + FormattingUtils.formatDecimalNumber(newIntervals / 2)
+ " client statistics processed from extra-info descriptors\n");
sb.append(" "
- + Logger.formatDecimalNumber(this.newResponses.size())
+ + FormattingUtils.formatDecimalNumber(this.newResponses.size())
+ " client status files updated\n");
return sb.toString();
}
diff --git a/src/main/java/org/torproject/onionoo/updater/DescriptorDownloader.java b/src/main/java/org/torproject/onionoo/updater/DescriptorDownloader.java
index 60d8d45..9e2f80d 100644
--- a/src/main/java/org/torproject/onionoo/updater/DescriptorDownloader.java
+++ b/src/main/java/org/torproject/onionoo/updater/DescriptorDownloader.java
@@ -14,8 +14,14 @@ import java.util.SortedSet;
import java.util.TreeSet;
import java.util.zip.GZIPInputStream;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
class DescriptorDownloader {
+ private static Logger log = LoggerFactory.getLogger(
+ DescriptorDownloader.class);
+
private final String protocolHostNameResourcePrefix =
"https://collector.torproject.org/recent/";
@@ -50,7 +56,7 @@ class DescriptorDownloader {
this.directory = "bridge-pool-assignments/";
break;
default:
- System.err.println("Unknown descriptor type.");
+ log.error("Unknown descriptor type.");
return;
}
}
@@ -78,7 +84,7 @@ class DescriptorDownloader {
huc.setRequestMethod("GET");
huc.connect();
if (huc.getResponseCode() != 200) {
- System.err.println("Could not fetch " + directoryUrl
+ log.error("Could not fetch " + directoryUrl
+ ": " + huc.getResponseCode() + " "
+ huc.getResponseMessage() + ". Skipping.");
return 0;
@@ -104,8 +110,8 @@ class DescriptorDownloader {
}
br.close();
} catch (IOException e) {
- System.err.println("Could not fetch or parse " + directoryUrl
- + ". Skipping.");
+ log.error("Could not fetch or parse " + directoryUrl
+ + ". Skipping. Reason: " + e.getMessage());
}
return this.remoteFiles.size();
}
@@ -129,7 +135,7 @@ class DescriptorDownloader {
huc.addRequestProperty("Accept-Encoding", "gzip");
huc.connect();
if (huc.getResponseCode() != 200) {
- System.err.println("Could not fetch " + fileUrl
+ log.error("Could not fetch \n\t" + fileUrl
+ ": " + huc.getResponseCode() + " "
+ huc.getResponseMessage() + ". Skipping.");
continue;
@@ -158,8 +164,8 @@ class DescriptorDownloader {
}
fetchedFiles++;
} catch (IOException e) {
- System.err.println("Could not fetch or store " + fileUrl
- + ". Skipping.");
+ log.error("Could not fetch or store \n\t" + fileUrl
+ + ". Skipping.\n\tReason: " + e.getMessage());
}
}
return fetchedFiles;
@@ -175,4 +181,4 @@ class DescriptorDownloader {
}
return deletedFiles;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/torproject/onionoo/updater/DescriptorQueue.java b/src/main/java/org/torproject/onionoo/updater/DescriptorQueue.java
index 96362c5..8ba4260 100644
--- a/src/main/java/org/torproject/onionoo/updater/DescriptorQueue.java
+++ b/src/main/java/org/torproject/onionoo/updater/DescriptorQueue.java
@@ -12,6 +12,8 @@ import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.descriptor.Descriptor;
import org.torproject.descriptor.DescriptorFile;
import org.torproject.descriptor.DescriptorReader;
@@ -19,6 +21,9 @@ import org.torproject.descriptor.DescriptorSourceFactory;
class DescriptorQueue {
+ private final static Logger log = LoggerFactory.getLogger(
+ DescriptorQueue.class);
+
private File inDir;
private File statusDir;
@@ -86,7 +91,7 @@ class DescriptorQueue {
directoryName = "exit-lists";
break;
default:
- System.err.println("Unknown descriptor type. Not adding directory "
+ log.error("Unknown descriptor type. Not adding directory "
+ "to descriptor reader.");
return;
}
@@ -95,7 +100,7 @@ class DescriptorQueue {
this.descriptorReader.addDirectory(directory);
this.descriptorReader.setMaxDescriptorFilesInQueue(1);
} else {
- System.err.println("Directory " + directory.getAbsolutePath()
+ log.error("Directory " + directory.getAbsolutePath()
+ " either does not exist or is not a directory. Not adding "
+ "to descriptor reader.");
}
@@ -129,7 +134,7 @@ class DescriptorQueue {
historyFileName = "bridge-server-history";
break;
default:
- System.err.println("Unknown descriptor history. Not excluding "
+ log.error("Unknown descriptor history. Not excluding "
+ "files.");
return;
}
@@ -145,16 +150,15 @@ class DescriptorQueue {
String[] parts = line.split(" ", 2);
excludedFiles.put(parts[1], Long.parseLong(parts[0]));
} catch (NumberFormatException e) {
- System.err.println("Illegal line '" + line + "' in parse "
+ log.error("Illegal line '" + line + "' in parse "
+ "history. Skipping line.");
}
}
br.close();
} catch (IOException e) {
- System.err.println("Could not read history file '"
+ log.error("Could not read history file '"
+ this.historyFile.getAbsolutePath() + "'. Not excluding "
- + "descriptors in this execution.");
- e.printStackTrace();
+ + "descriptors in this execution.", e);
return;
}
this.historySizeBefore = excludedFiles.size();
@@ -184,7 +188,7 @@ class DescriptorQueue {
}
bw.close();
} catch (IOException e) {
- System.err.println("Could not write history file '"
+ log.error("Could not write history file '"
+ this.historyFile.getAbsolutePath() + "'. Not excluding "
+ "descriptors in next execution.");
return;
@@ -199,9 +203,8 @@ class DescriptorQueue {
while (this.descriptors == null && this.descriptorFiles.hasNext()) {
DescriptorFile descriptorFile = this.descriptorFiles.next();
if (descriptorFile.getException() != null) {
- System.err.println("Could not parse "
- + descriptorFile.getFileName());
- descriptorFile.getException().printStackTrace();
+ log.error("Could not parse " + descriptorFile.getFileName(),
+ descriptorFile.getException());
}
if (descriptorFile.getDescriptors() != null &&
!descriptorFile.getDescriptors().isEmpty()) {
@@ -218,4 +221,4 @@ class DescriptorQueue {
}
return nextDescriptor;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/torproject/onionoo/updater/DescriptorSource.java b/src/main/java/org/torproject/onionoo/updater/DescriptorSource.java
index ea1474f..644f503 100644
--- a/src/main/java/org/torproject/onionoo/updater/DescriptorSource.java
+++ b/src/main/java/org/torproject/onionoo/updater/DescriptorSource.java
@@ -12,6 +12,8 @@ import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.descriptor.BridgeNetworkStatus;
import org.torproject.descriptor.BridgePoolAssignment;
import org.torproject.descriptor.Descriptor;
@@ -20,10 +22,13 @@ import org.torproject.descriptor.ExitListEntry;
import org.torproject.descriptor.ExtraInfoDescriptor;
import org.torproject.descriptor.RelayNetworkStatusConsensus;
import org.torproject.descriptor.ServerDescriptor;
-import org.torproject.onionoo.util.Logger;
+import org.torproject.onionoo.util.FormattingUtils;
public class DescriptorSource {
+ private static final Logger log = LoggerFactory.getLogger(
+ DescriptorSource.class);
+
private final File inDir = new File("in/recent");
private final File statusDir = new File("status");
@@ -77,6 +82,7 @@ public class DescriptorSource {
public void downloadDescriptors() {
for (DescriptorType descriptorType : DescriptorType.values()) {
+ log.info("Loading: " + descriptorType);
this.downloadDescriptors(descriptorType);
}
}
@@ -101,20 +107,32 @@ public class DescriptorSource {
public void readDescriptors() {
/* Careful when changing the order of parsing descriptor types! The
* various status updaters may base assumptions on this order. */
+
+ log.debug("Reading " + DescriptorType.RELAY_SERVER_DESCRIPTORS
+ + " ...");
this.readDescriptors(DescriptorType.RELAY_SERVER_DESCRIPTORS,
DescriptorHistory.RELAY_SERVER_HISTORY, true);
+ log.debug("Reading " + DescriptorType.RELAY_EXTRA_INFOS + " ...");
this.readDescriptors(DescriptorType.RELAY_EXTRA_INFOS,
DescriptorHistory.RELAY_EXTRAINFO_HISTORY, true);
+ log.debug("Reading " + DescriptorType.EXIT_LISTS + " ...");
this.readDescriptors(DescriptorType.EXIT_LISTS,
DescriptorHistory.EXIT_LIST_HISTORY, true);
+ log.debug("Reading " + DescriptorType.RELAY_CONSENSUSES + " ...");
this.readDescriptors(DescriptorType.RELAY_CONSENSUSES,
DescriptorHistory.RELAY_CONSENSUS_HISTORY, true);
+ log.debug("Reading " + DescriptorType.BRIDGE_SERVER_DESCRIPTORS
+ + " ...");
this.readDescriptors(DescriptorType.BRIDGE_SERVER_DESCRIPTORS,
DescriptorHistory.BRIDGE_SERVER_HISTORY, false);
+ log.debug("Reading " + DescriptorType.BRIDGE_EXTRA_INFOS + " ...");
this.readDescriptors(DescriptorType.BRIDGE_EXTRA_INFOS,
DescriptorHistory.BRIDGE_EXTRAINFO_HISTORY, false);
+ log.debug("Reading " + DescriptorType.BRIDGE_POOL_ASSIGNMENTS
+ + " ...");
this.readDescriptors(DescriptorType.BRIDGE_POOL_ASSIGNMENTS,
DescriptorHistory.BRIDGE_POOLASSIGN_HISTORY, false);
+ log.debug("Reading " + DescriptorType.BRIDGE_STATUSES + " ...");
this.readDescriptors(DescriptorType.BRIDGE_STATUSES,
DescriptorHistory.BRIDGE_STATUS_HISTORY, false);
}
@@ -185,33 +203,34 @@ public class DescriptorSource {
}
switch (descriptorType) {
case RELAY_CONSENSUSES:
- Logger.printStatusTime("Read relay network consensuses");
+ log.info("Read relay network consensuses");
break;
case RELAY_SERVER_DESCRIPTORS:
- Logger.printStatusTime("Read relay server descriptors");
+ log.info("Read relay server descriptors");
break;
case RELAY_EXTRA_INFOS:
- Logger.printStatusTime("Read relay extra-info descriptors");
+ log.info("Read relay extra-info descriptors");
break;
case EXIT_LISTS:
- Logger.printStatusTime("Read exit lists");
+ log.info("Read exit lists");
break;
case BRIDGE_STATUSES:
- Logger.printStatusTime("Read bridge network statuses");
+ log.info("Read bridge network statuses");
break;
case BRIDGE_SERVER_DESCRIPTORS:
- Logger.printStatusTime("Read bridge server descriptors");
+ log.info("Read bridge server descriptors");
break;
case BRIDGE_EXTRA_INFOS:
- Logger.printStatusTime("Read bridge extra-info descriptors");
+ log.info("Read bridge extra-info descriptors");
break;
case BRIDGE_POOL_ASSIGNMENTS:
- Logger.printStatusTime("Read bridge-pool assignments");
+ log.info("Read bridge-pool assignments");
break;
}
}
public void writeHistoryFiles() {
+ log.debug("Writing history ");
for (DescriptorQueue descriptorQueue : this.descriptorQueues) {
descriptorQueue.writeHistoryFile();
}
@@ -237,13 +256,16 @@ public class DescriptorSource {
descriptors += descriptorQueue.getReturnedDescriptors();
bytes += descriptorQueue.getReturnedBytes();
}
- sb.append(" " + Logger.formatDecimalNumber(historySizeBefore)
- + " descriptors excluded from this execution\n");
- sb.append(" " + Logger.formatDecimalNumber(descriptors)
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ historySizeBefore) + " descriptors excluded from this "
+ + "execution\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(descriptors)
+ " descriptors provided\n");
- sb.append(" " + Logger.formatBytes(bytes) + " provided\n");
- sb.append(" " + Logger.formatDecimalNumber(historySizeAfter)
- + " descriptors excluded from next execution\n");
+ sb.append(" " + FormattingUtils.formatBytes(bytes)
+ + " provided\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ historySizeAfter) + " descriptors excluded from next "
+ + "execution\n");
return sb.toString();
}
}
diff --git a/src/main/java/org/torproject/onionoo/updater/LookupService.java b/src/main/java/org/torproject/onionoo/updater/LookupService.java
index b816091..22560b2 100644
--- a/src/main/java/org/torproject/onionoo/updater/LookupService.java
+++ b/src/main/java/org/torproject/onionoo/updater/LookupService.java
@@ -17,10 +17,15 @@ import java.util.TreeMap;
import java.util.TreeSet;
import java.util.regex.Pattern;
-import org.torproject.onionoo.util.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.torproject.onionoo.util.FormattingUtils;
public class LookupService {
+ private final static Logger log = LoggerFactory.getLogger(
+ LookupService.class);
+
private File geoipDir;
private File geoLite2CityBlocksCsvFile;
private File geoLite2CityLocationsCsvFile;
@@ -36,19 +41,19 @@ public class LookupService {
this.geoLite2CityBlocksCsvFile = new File(this.geoipDir,
"GeoLite2-City-Blocks.csv");
if (!this.geoLite2CityBlocksCsvFile.exists()) {
- System.err.println("No GeoLite2-City-Blocks.csv file in geoip/.");
+ log.error("No GeoLite2-City-Blocks.csv file in geoip/.");
return;
}
this.geoLite2CityLocationsCsvFile = new File(this.geoipDir,
"GeoLite2-City-Locations.csv");
if (!this.geoLite2CityLocationsCsvFile.exists()) {
- System.err.println("No GeoLite2-City-Locations.csv file in "
+ log.error("No GeoLite2-City-Locations.csv file in "
+ "geoip/.");
return;
}
this.geoIPASNum2CsvFile = new File(this.geoipDir, "GeoIPASNum2.csv");
if (!this.geoIPASNum2CsvFile.exists()) {
- System.err.println("No GeoIPASNum2.csv file in geoip/.");
+ log.error("No GeoIPASNum2.csv file in geoip/.");
return;
}
this.hasAllFiles = true;
@@ -119,7 +124,7 @@ public class LookupService {
}
String[] parts = line.replaceAll("\"", "").split(",", 10);
if (parts.length != 10) {
- System.err.println("Illegal line '" + line + "' in "
+ log.error("Illegal line '" + line + "' in "
+ geoLite2CityBlocksCsvFile.getAbsolutePath() + ".");
br.close();
return lookupResults;
@@ -128,7 +133,7 @@ public class LookupService {
String startAddressString = parts[0].substring(7); /* ::ffff: */
long startIpNum = this.parseAddressString(startAddressString);
if (startIpNum < 0L) {
- System.err.println("Illegal IP address in '" + line
+ log.error("Illegal IP address in '" + line
+ "' in " + geoLite2CityBlocksCsvFile.getAbsolutePath()
+ ".");
br.close();
@@ -136,7 +141,7 @@ public class LookupService {
}
int networkMaskLength = Integer.parseInt(parts[1]);
if (networkMaskLength < 96 || networkMaskLength > 128) {
- System.err.println("Illegal network mask in '" + line
+ log.error("Illegal network mask in '" + line
+ "' in " + geoLite2CityBlocksCsvFile.getAbsolutePath()
+ ".");
br.close();
@@ -160,7 +165,7 @@ public class LookupService {
}
}
} catch (NumberFormatException e) {
- System.err.println("Number format exception while parsing line "
+ log.error("Number format exception while parsing line "
+ "'" + line + "' in "
+ geoLite2CityBlocksCsvFile.getAbsolutePath() + ".");
br.close();
@@ -169,7 +174,7 @@ public class LookupService {
}
br.close();
} catch (IOException e) {
- System.err.println("I/O exception while reading "
+ log.error("I/O exception while reading "
+ geoLite2CityBlocksCsvFile.getAbsolutePath() + ".");
return lookupResults;
}
@@ -186,7 +191,7 @@ public class LookupService {
while ((line = br.readLine()) != null) {
String[] parts = line.replaceAll("\"", "").split(",", 10);
if (parts.length != 10) {
- System.err.println("Illegal line '" + line + "' in "
+ log.error("Illegal line '" + line + "' in "
+ geoLite2CityLocationsCsvFile.getAbsolutePath() + ".");
br.close();
return lookupResults;
@@ -197,7 +202,7 @@ public class LookupService {
blockLocations.put(locId, line);
}
} catch (NumberFormatException e) {
- System.err.println("Number format exception while parsing line "
+ log.error("Number format exception while parsing line "
+ "'" + line + "' in "
+ geoLite2CityLocationsCsvFile.getAbsolutePath() + ".");
br.close();
@@ -206,7 +211,7 @@ public class LookupService {
}
br.close();
} catch (IOException e) {
- System.err.println("I/O exception while reading "
+ log.error("I/O exception while reading "
+ geoLite2CityLocationsCsvFile.getAbsolutePath() + ".");
return lookupResults;
}
@@ -224,7 +229,7 @@ public class LookupService {
while ((line = br.readLine()) != null) {
String[] parts = line.replaceAll("\"", "").split(",", 3);
if (parts.length != 3) {
- System.err.println("Illegal line '" + line + "' in "
+ log.error("Illegal line '" + line + "' in "
+ geoIPASNum2CsvFile.getAbsolutePath() + ".");
br.close();
return lookupResults;
@@ -232,7 +237,7 @@ public class LookupService {
try {
long startIpNum = Long.parseLong(parts[0]);
if (startIpNum <= previousStartIpNum) {
- System.err.println("Line '" + line + "' not sorted in "
+ log.error("Line '" + line + "' not sorted in "
+ geoIPASNum2CsvFile.getAbsolutePath() + ".");
br.close();
return lookupResults;
@@ -264,9 +269,8 @@ public class LookupService {
if (firstAddressNumber == -1L) {
break;
}
- }
- catch (NumberFormatException e) {
- System.err.println("Number format exception while parsing line "
+ } catch (NumberFormatException e) {
+ log.error("Number format exception while parsing line "
+ "'" + line + "' in "
+ geoIPASNum2CsvFile.getAbsolutePath() + ".");
br.close();
@@ -275,7 +279,7 @@ public class LookupService {
}
br.close();
} catch (IOException e) {
- System.err.println("I/O exception while reading "
+ log.error("I/O exception while reading "
+ geoIPASNum2CsvFile.getAbsolutePath() + ".");
return lookupResults;
}
@@ -334,10 +338,10 @@ public class LookupService {
public String getStatsString() {
StringBuilder sb = new StringBuilder();
- sb.append(" " + Logger.formatDecimalNumber(addressesLookedUp)
- + " addresses looked up\n");
- sb.append(" " + Logger.formatDecimalNumber(addressesResolved)
- + " addresses resolved\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ addressesLookedUp) + " addresses looked up\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ addressesResolved) + " addresses resolved\n");
return sb.toString();
}
}
diff --git a/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java b/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
index 6341afd..f09a46c 100644
--- a/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
+++ b/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
@@ -13,6 +13,8 @@ import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.descriptor.BridgeNetworkStatus;
import org.torproject.descriptor.BridgePoolAssignment;
import org.torproject.descriptor.Descriptor;
@@ -26,12 +28,15 @@ import org.torproject.onionoo.docs.DetailsStatus;
import org.torproject.onionoo.docs.DocumentStore;
import org.torproject.onionoo.docs.DocumentStoreFactory;
import org.torproject.onionoo.docs.NodeStatus;
-import org.torproject.onionoo.util.Logger;
+import org.torproject.onionoo.util.FormattingUtils;
import org.torproject.onionoo.util.TimeFactory;
public class NodeDetailsStatusUpdater implements DescriptorListener,
StatusUpdater {
+ private Logger log = LoggerFactory.getLogger(
+ NodeDetailsStatusUpdater.class);
+
private DescriptorSource descriptorSource;
private ReverseDomainNameResolver reverseDomainNameResolver;
@@ -288,23 +293,23 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
public void updateStatuses() {
this.readStatusSummary();
- Logger.printStatusTime("Read status summary");
+ log.info("Read status summary");
this.setCurrentNodes();
- Logger.printStatusTime("Set current node fingerprints");
+ log.info("Set current node fingerprints");
this.startReverseDomainNameLookups();
- Logger.printStatusTime("Started reverse domain name lookups");
+ log.info("Started reverse domain name lookups");
this.lookUpCitiesAndASes();
- Logger.printStatusTime("Looked up cities and ASes");
+ log.info("Looked up cities and ASes");
this.setDescriptorPartsOfNodeStatus();
- Logger.printStatusTime("Set descriptor parts of node statuses.");
+ log.info("Set descriptor parts of node statuses.");
this.calculatePathSelectionProbabilities();
- Logger.printStatusTime("Calculated path selection probabilities");
+ log.info("Calculated path selection probabilities");
this.finishReverseDomainNameLookups();
- Logger.printStatusTime("Finished reverse domain name lookups");
+ log.info("Finished reverse domain name lookups");
this.writeStatusSummary();
- Logger.printStatusTime("Wrote status summary");
+ log.info("Wrote status summary");
this.updateDetailsStatuses();
- Logger.printStatusTime("Updated exit addresses in details statuses");
+ log.info("Updated exit addresses in details statuses");
}
private void readStatusSummary() {
@@ -368,7 +373,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
}
}
if (addressStrings.isEmpty()) {
- System.err.println("No relay IP addresses to resolve to cities or "
+ log.error("No relay IP addresses to resolve to cities or "
+ "ASN.");
return;
}
@@ -456,7 +461,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
wed = ((double) this.lastBandwidthWeights.get("Wed")) / 10000.0;
}
} else {
- System.err.println("Could not determine most recent Wxx parameter "
+ log.error("Could not determine most recent Wxx parameter "
+ "values, probably because we didn't parse a consensus in "
+ "this execution. All relays' guard/middle/exit weights are "
+ "going to be 0.0.");
@@ -609,10 +614,10 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
public String getStatsString() {
StringBuilder sb = new StringBuilder();
- sb.append(" " + Logger.formatDecimalNumber(
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
relayConsensusesProcessed) + " relay consensuses processed\n");
- sb.append(" " + Logger.formatDecimalNumber(bridgeStatusesProcessed)
- + " bridge statuses processed\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ bridgeStatusesProcessed) + " bridge statuses processed\n");
return sb.toString();
}
}
diff --git a/src/main/java/org/torproject/onionoo/updater/ReverseDomainNameResolver.java b/src/main/java/org/torproject/onionoo/updater/ReverseDomainNameResolver.java
index dc662a5..681a681 100644
--- a/src/main/java/org/torproject/onionoo/updater/ReverseDomainNameResolver.java
+++ b/src/main/java/org/torproject/onionoo/updater/ReverseDomainNameResolver.java
@@ -10,7 +10,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.torproject.onionoo.util.Logger;
+import org.torproject.onionoo.util.FormattingUtils;
import org.torproject.onionoo.util.Time;
import org.torproject.onionoo.util.TimeFactory;
@@ -88,16 +88,18 @@ public class ReverseDomainNameResolver {
public String getStatsString() {
StringBuilder sb = new StringBuilder();
- sb.append(" " + Logger.formatDecimalNumber(rdnsLookupMillis.size())
- + " lookups performed\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ rdnsLookupMillis.size()) + " lookups performed\n");
if (rdnsLookupMillis.size() > 0) {
Collections.sort(rdnsLookupMillis);
- sb.append(" " + Logger.formatMillis(rdnsLookupMillis.get(0))
- + " minimum lookup time\n");
- sb.append(" " + Logger.formatMillis(rdnsLookupMillis.get(
- rdnsLookupMillis.size() / 2)) + " median lookup time\n");
- sb.append(" " + Logger.formatMillis(rdnsLookupMillis.get(
- rdnsLookupMillis.size() - 1)) + " maximum lookup time\n");
+ sb.append(" " + FormattingUtils.formatMillis(
+ rdnsLookupMillis.get(0)) + " minimum lookup time\n");
+ sb.append(" " + FormattingUtils.formatMillis(
+ rdnsLookupMillis.get(rdnsLookupMillis.size() / 2))
+ + " median lookup time\n");
+ sb.append(" " + FormattingUtils.formatMillis(
+ rdnsLookupMillis.get(rdnsLookupMillis.size() - 1))
+ + " maximum lookup time\n");
}
return sb.toString();
}
diff --git a/src/main/java/org/torproject/onionoo/updater/StatusUpdateRunner.java b/src/main/java/org/torproject/onionoo/updater/StatusUpdateRunner.java
index 09dd952..2080697 100644
--- a/src/main/java/org/torproject/onionoo/updater/StatusUpdateRunner.java
+++ b/src/main/java/org/torproject/onionoo/updater/StatusUpdateRunner.java
@@ -4,10 +4,14 @@ package org.torproject.onionoo.updater;
import java.io.File;
-import org.torproject.onionoo.util.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class StatusUpdateRunner {
+ private static final Logger log = LoggerFactory.getLogger(
+ StatusUpdateRunner.class);
+
private LookupService ls;
private ReverseDomainNameResolver rdnr;
@@ -29,8 +33,9 @@ public class StatusUpdateRunner {
public void updateStatuses() {
for (StatusUpdater su : this.statusUpdaters) {
+ log.debug("Begin update of " + su.getClass().getSimpleName());
su.updateStatuses();
- Logger.printStatusTime(su.getClass().getSimpleName()
+ log.info(su.getClass().getSimpleName()
+ " updated status files");
}
}
@@ -39,13 +44,13 @@ public class StatusUpdateRunner {
for (StatusUpdater su : this.statusUpdaters) {
String statsString = su.getStatsString();
if (statsString != null) {
- Logger.printStatistics(su.getClass().getSimpleName(),
- statsString);
+ LoggerFactory.getLogger("statistics").info(
+ su.getClass().getSimpleName(), statsString);
}
}
- Logger.printStatistics("GeoIP lookup service",
+ LoggerFactory.getLogger("statistics").info("GeoIP lookup service",
this.ls.getStatsString());
- Logger.printStatistics("Reverse domain name resolver",
- this.rdnr.getStatsString());
+ LoggerFactory.getLogger("statistics").info("Reverse domain name "
+ + "resolver", this.rdnr.getStatsString());
}
}
diff --git a/src/main/java/org/torproject/onionoo/updater/UptimeStatusUpdater.java b/src/main/java/org/torproject/onionoo/updater/UptimeStatusUpdater.java
index 4bbdcf1..c3c98ed 100644
--- a/src/main/java/org/torproject/onionoo/updater/UptimeStatusUpdater.java
+++ b/src/main/java/org/torproject/onionoo/updater/UptimeStatusUpdater.java
@@ -16,7 +16,7 @@ import org.torproject.onionoo.docs.DateTimeHelper;
import org.torproject.onionoo.docs.DocumentStore;
import org.torproject.onionoo.docs.DocumentStoreFactory;
import org.torproject.onionoo.docs.UptimeStatus;
-import org.torproject.onionoo.util.Logger;
+import org.torproject.onionoo.util.FormattingUtils;
public class UptimeStatusUpdater implements DescriptorListener,
StatusUpdater {
@@ -133,13 +133,13 @@ public class UptimeStatusUpdater implements DescriptorListener,
public String getStatsString() {
StringBuilder sb = new StringBuilder();
- sb.append(" " + Logger.formatDecimalNumber(
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
this.newRelayStatuses.size()) + " hours of relay uptimes "
+ "processed\n");
- sb.append(" " + Logger.formatDecimalNumber(
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
this.newBridgeStatuses.size()) + " hours of bridge uptimes "
+ "processed\n");
- sb.append(" " + Logger.formatDecimalNumber(
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
this.newRunningRelays.size() + this.newRunningBridges.size())
+ " uptime status files updated\n");
return sb.toString();
diff --git a/src/main/java/org/torproject/onionoo/util/FormattingUtils.java b/src/main/java/org/torproject/onionoo/util/FormattingUtils.java
new file mode 100644
index 0000000..bda5a1d
--- /dev/null
+++ b/src/main/java/org/torproject/onionoo/util/FormattingUtils.java
@@ -0,0 +1,31 @@
+/* Copyright 2013 The Tor Project
+ * See LICENSE for licensing information */
+package org.torproject.onionoo.util;
+
+public class FormattingUtils {
+
+ private FormattingUtils() {
+ }
+
+ private static final long ONE_SECOND = 1000L,
+ ONE_MINUTE = 60L * ONE_SECOND;
+
+ public static String formatMillis(long millis) {
+ return String.format("%02d:%02d.%03d minutes", millis / ONE_MINUTE,
+ (millis % ONE_MINUTE) / ONE_SECOND, millis % ONE_SECOND);
+ }
+
+ public static String formatBytes(long bytes) {
+ if (bytes < 1024) {
+ return bytes + " B";
+ } else {
+ int exp = (int) (Math.log(bytes) / Math.log(1024));
+ return String.format("%.1f %siB", bytes / Math.pow(1024, exp),
+ "KMGTPE".charAt(exp - 1));
+ }
+ }
+
+ public static String formatDecimalNumber(long decimalNumber) {
+ return String.format("%,d", decimalNumber);
+ }
+}
diff --git a/src/main/java/org/torproject/onionoo/util/LockFile.java b/src/main/java/org/torproject/onionoo/util/LockFile.java
index 9c6b723..0a1f17d 100644
--- a/src/main/java/org/torproject/onionoo/util/LockFile.java
+++ b/src/main/java/org/torproject/onionoo/util/LockFile.java
@@ -7,8 +7,14 @@ import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class LockFile {
+ private final static Logger log = LoggerFactory.getLogger(
+ LockFile.class);
+
private final File lockFile = new File("lock");
public boolean acquireLock() {
@@ -26,9 +32,7 @@ public class LockFile {
bw.close();
return true;
} catch (IOException e) {
- System.err.println("Caught exception while trying to acquire "
- + "lock!");
- e.printStackTrace();
+ log.error("Caught exception while trying to acquire lock!", e);
return false;
}
}
diff --git a/src/main/java/org/torproject/onionoo/util/Logger.java b/src/main/java/org/torproject/onionoo/util/Logger.java
deleted file mode 100644
index a9c7cde..0000000
--- a/src/main/java/org/torproject/onionoo/util/Logger.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Copyright 2013 The Tor Project
- * See LICENSE for licensing information */
-package org.torproject.onionoo.util;
-
-import java.util.Date;
-
-public class Logger {
-
- private Logger() {
- }
-
- private static Time time;
-
- public static void setTime() {
- time = TimeFactory.getTime();
- }
-
- private static long currentTimeMillis() {
- if (time == null) {
- return System.currentTimeMillis();
- } else {
- return time.currentTimeMillis();
- }
- }
-
- public static String formatDecimalNumber(long decimalNumber) {
- return String.format("%,d", decimalNumber);
- }
-
- private static final long ONE_SECOND = 1000L,
- ONE_MINUTE = 60L * ONE_SECOND;
-
- public static String formatMillis(long millis) {
- return String.format("%02d:%02d.%03d minutes", millis / ONE_MINUTE,
- (millis % ONE_MINUTE) / ONE_SECOND, millis % ONE_SECOND);
- }
-
- public static String formatBytes(long bytes) {
- if (bytes < 1024) {
- return bytes + " B";
- } else {
- int exp = (int) (Math.log(bytes) / Math.log(1024));
- return String.format("%.1f %siB", bytes / Math.pow(1024, exp),
- "KMGTPE".charAt(exp-1));
- }
- }
-
- private static long printedLastStatusMessage = -1L;
-
- public static void printStatus(String message) {
- System.out.println(new Date() + ": " + message);
- printedLastStatusMessage = currentTimeMillis();
- }
-
- public static void printStatistics(String component, String message) {
- System.out.print(" " + component + " statistics:\n" + message);
- }
-
- public static void printStatusTime(String message) {
- printStatusOrErrorTime(message, false);
- }
-
- public static void printErrorTime(String message) {
- printStatusOrErrorTime(message, true);
- }
-
- private static void printStatusOrErrorTime(String message,
- boolean printToSystemErr) {
- long now = currentTimeMillis();
- long millis = printedLastStatusMessage < 0 ? 0 :
- now - printedLastStatusMessage;
- String line = " " + message + " (" + Logger.formatMillis(millis)
- + ").";
- if (printToSystemErr) {
- System.err.println(line);
- } else {
- System.out.println(line);
- }
- printedLastStatusMessage = now;
- }
-}
-
diff --git a/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java
index f5d860c..c5167d0 100644
--- a/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/BandwidthDocumentWriter.java
@@ -11,6 +11,8 @@ import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.docs.BandwidthDocument;
import org.torproject.onionoo.docs.BandwidthStatus;
import org.torproject.onionoo.docs.DateTimeHelper;
@@ -21,12 +23,14 @@ import org.torproject.onionoo.updater.DescriptorSource;
import org.torproject.onionoo.updater.DescriptorSourceFactory;
import org.torproject.onionoo.updater.DescriptorType;
import org.torproject.onionoo.updater.FingerprintListener;
-import org.torproject.onionoo.util.Logger;
import org.torproject.onionoo.util.TimeFactory;
public class BandwidthDocumentWriter implements FingerprintListener,
DocumentWriter{
+ private static final Logger log = LoggerFactory.getLogger(
+ BandwidthDocumentWriter.class);
+
private DescriptorSource descriptorSource;
private DocumentStore documentStore;
@@ -65,7 +69,7 @@ public class BandwidthDocumentWriter implements FingerprintListener,
fingerprint, bandwidthStatus);
this.documentStore.store(bandwidthDocument, fingerprint);
}
- Logger.printStatusTime("Wrote bandwidth document files");
+ log.info("Wrote bandwidth document files");
}
diff --git a/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java
index 0541be8..4086bc7 100644
--- a/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/ClientsDocumentWriter.java
@@ -11,6 +11,8 @@ import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.docs.ClientsDocument;
import org.torproject.onionoo.docs.ClientsGraphHistory;
import org.torproject.onionoo.docs.ClientsHistory;
@@ -22,7 +24,7 @@ import org.torproject.onionoo.updater.DescriptorSource;
import org.torproject.onionoo.updater.DescriptorSourceFactory;
import org.torproject.onionoo.updater.DescriptorType;
import org.torproject.onionoo.updater.FingerprintListener;
-import org.torproject.onionoo.util.Logger;
+import org.torproject.onionoo.util.FormattingUtils;
import org.torproject.onionoo.util.TimeFactory;
/*
@@ -51,6 +53,9 @@ import org.torproject.onionoo.util.TimeFactory;
public class ClientsDocumentWriter implements FingerprintListener,
DocumentWriter {
+ private final static Logger log = LoggerFactory.getLogger(
+ ClientsDocumentWriter.class);
+
private DescriptorSource descriptorSource;
private DocumentStore documentStore;
@@ -93,7 +98,7 @@ public class ClientsDocumentWriter implements FingerprintListener,
this.documentStore.store(clientsDocument, hashedFingerprint);
this.writtenDocuments++;
}
- Logger.printStatusTime("Wrote clients document files");
+ log.info("Wrote clients document files");
}
private String[] graphNames = new String[] {
@@ -291,8 +296,8 @@ public class ClientsDocumentWriter implements FingerprintListener,
public String getStatsString() {
StringBuilder sb = new StringBuilder();
- sb.append(" " + Logger.formatDecimalNumber(this.writtenDocuments)
- + " clients document files updated\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ this.writtenDocuments) + " clients document files updated\n");
return sb.toString();
}
}
diff --git a/src/main/java/org/torproject/onionoo/writer/DetailsDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/DetailsDocumentWriter.java
index bd2a955..3e6b07f 100644
--- a/src/main/java/org/torproject/onionoo/writer/DetailsDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/DetailsDocumentWriter.java
@@ -8,6 +8,8 @@ import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.docs.DateTimeHelper;
import org.torproject.onionoo.docs.DetailsDocument;
import org.torproject.onionoo.docs.DetailsStatus;
@@ -18,12 +20,14 @@ import org.torproject.onionoo.updater.DescriptorSource;
import org.torproject.onionoo.updater.DescriptorSourceFactory;
import org.torproject.onionoo.updater.DescriptorType;
import org.torproject.onionoo.updater.FingerprintListener;
-import org.torproject.onionoo.util.Logger;
import org.torproject.onionoo.util.TimeFactory;
public class DetailsDocumentWriter implements FingerprintListener,
DocumentWriter {
+ private final static Logger log = LoggerFactory.getLogger(
+ DetailsDocumentWriter.class);
+
private DescriptorSource descriptorSource;
private DocumentStore documentStore;
@@ -67,7 +71,7 @@ public class DetailsDocumentWriter implements FingerprintListener,
public void writeDocuments() {
this.updateRelayDetailsFiles();
this.updateBridgeDetailsFiles();
- Logger.printStatusTime("Wrote details document files");
+ log.info("Wrote details document files");
}
private void updateRelayDetailsFiles() {
diff --git a/src/main/java/org/torproject/onionoo/writer/DocumentWriterRunner.java b/src/main/java/org/torproject/onionoo/writer/DocumentWriterRunner.java
index 559206f..dbca06e 100644
--- a/src/main/java/org/torproject/onionoo/writer/DocumentWriterRunner.java
+++ b/src/main/java/org/torproject/onionoo/writer/DocumentWriterRunner.java
@@ -2,10 +2,14 @@
* See LICENSE for licensing information */
package org.torproject.onionoo.writer;
-import org.torproject.onionoo.util.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class DocumentWriterRunner {
+ private final static Logger log = LoggerFactory.getLogger(
+ DocumentWriterRunner.class);
+
private DocumentWriter[] documentWriters;
public DocumentWriterRunner() {
@@ -21,6 +25,7 @@ public class DocumentWriterRunner {
public void writeDocuments() {
for (DocumentWriter dw : this.documentWriters) {
+ log.debug("Writing " + dw.getClass().getSimpleName());
dw.writeDocuments();
}
}
@@ -29,7 +34,7 @@ public class DocumentWriterRunner {
for (DocumentWriter dw : this.documentWriters) {
String statsString = dw.getStatsString();
if (statsString != null) {
- Logger.printStatistics(dw.getClass().getSimpleName(),
+ log.info(dw.getClass().getSimpleName(),
statsString);
}
}
diff --git a/src/main/java/org/torproject/onionoo/writer/SummaryDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/SummaryDocumentWriter.java
index 8d68dea..d7686cb 100644
--- a/src/main/java/org/torproject/onionoo/writer/SummaryDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/SummaryDocumentWriter.java
@@ -6,15 +6,20 @@ import java.util.ArrayList;
import java.util.List;
import java.util.SortedSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.docs.DateTimeHelper;
import org.torproject.onionoo.docs.DocumentStore;
import org.torproject.onionoo.docs.DocumentStoreFactory;
import org.torproject.onionoo.docs.NodeStatus;
import org.torproject.onionoo.docs.SummaryDocument;
-import org.torproject.onionoo.util.Logger;
+import org.torproject.onionoo.util.FormattingUtils;
public class SummaryDocumentWriter implements DocumentWriter {
+ private final static Logger log = LoggerFactory.getLogger(
+ SummaryDocumentWriter.class);
+
private DocumentStore documentStore;
public SummaryDocumentWriter() {
@@ -80,15 +85,15 @@ public class SummaryDocumentWriter implements DocumentWriter {
this.writtenDocuments++;
};
}
- Logger.printStatusTime("Wrote summary document files");
+ log.info("Wrote summary document files");
}
public String getStatsString() {
StringBuilder sb = new StringBuilder();
- sb.append(" " + Logger.formatDecimalNumber(this.writtenDocuments)
- + " summary document files written\n");
- sb.append(" " + Logger.formatDecimalNumber(this.deletedDocuments)
- + " summary document files deleted\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ this.writtenDocuments) + " summary document files written\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ this.deletedDocuments) + " summary document files deleted\n");
return sb.toString();
}
}
diff --git a/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java
index 92b434a..973fa67 100644
--- a/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/UptimeDocumentWriter.java
@@ -9,6 +9,8 @@ import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.docs.DateTimeHelper;
import org.torproject.onionoo.docs.DocumentStore;
import org.torproject.onionoo.docs.DocumentStoreFactory;
@@ -20,12 +22,15 @@ import org.torproject.onionoo.updater.DescriptorSource;
import org.torproject.onionoo.updater.DescriptorSourceFactory;
import org.torproject.onionoo.updater.DescriptorType;
import org.torproject.onionoo.updater.FingerprintListener;
-import org.torproject.onionoo.util.Logger;
+import org.torproject.onionoo.util.FormattingUtils;
import org.torproject.onionoo.util.TimeFactory;
public class UptimeDocumentWriter implements FingerprintListener,
DocumentWriter {
+ private final static Logger log = LoggerFactory.getLogger(
+ UptimeDocumentWriter.class);
+
private DescriptorSource descriptorSource;
private DocumentStore documentStore;
@@ -72,7 +77,7 @@ public class UptimeDocumentWriter implements FingerprintListener,
this.updateDocument(false, fingerprint,
uptimeStatus.getBridgeHistory());
}
- Logger.printStatusTime("Wrote uptime document files");
+ log.info("Wrote uptime document files");
}
private int writtenDocuments = 0;
@@ -297,8 +302,8 @@ public class UptimeDocumentWriter implements FingerprintListener,
public String getStatsString() {
StringBuilder sb = new StringBuilder();
- sb.append(" " + Logger.formatDecimalNumber(this.writtenDocuments)
- + " uptime document files written\n");
+ sb.append(" " + FormattingUtils.formatDecimalNumber(
+ this.writtenDocuments) + " uptime document files written\n");
return sb.toString();
}
}
diff --git a/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java
index 9af9825..0d70465 100644
--- a/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/WeightsDocumentWriter.java
@@ -11,6 +11,8 @@ import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.torproject.onionoo.docs.DateTimeHelper;
import org.torproject.onionoo.docs.DocumentStore;
import org.torproject.onionoo.docs.DocumentStoreFactory;
@@ -21,12 +23,14 @@ import org.torproject.onionoo.updater.DescriptorSource;
import org.torproject.onionoo.updater.DescriptorSourceFactory;
import org.torproject.onionoo.updater.DescriptorType;
import org.torproject.onionoo.updater.FingerprintListener;
-import org.torproject.onionoo.util.Logger;
import org.torproject.onionoo.util.TimeFactory;
public class WeightsDocumentWriter implements FingerprintListener,
DocumentWriter {
+ private final static Logger log = LoggerFactory.getLogger(
+ WeightsDocumentWriter.class);
+
private DescriptorSource descriptorSource;
private DocumentStore documentStore;
@@ -58,7 +62,7 @@ public class WeightsDocumentWriter implements FingerprintListener,
public void writeDocuments() {
this.writeWeightsDataFiles();
- Logger.printStatusTime("Wrote weights document files");
+ log.info("Wrote weights document files");
}
private void writeWeightsDataFiles() {
@@ -73,7 +77,7 @@ public class WeightsDocumentWriter implements FingerprintListener,
fingerprint, history);
this.documentStore.store(weightsDocument, fingerprint);
}
- Logger.printStatusTime("Wrote weights document files");
+ log.info("Wrote weights document files");
}
private String[] graphNames = new String[] {
1
0

[translation/tails-iuk_completed] Update translations for tails-iuk_completed
by translation@torproject.org 04 Sep '14
by translation@torproject.org 04 Sep '14
04 Sep '14
commit 941457c432d78cea896a3f2df36137f11af10049
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Sep 4 03:15:48 2014 +0000
Update translations for tails-iuk_completed
---
zh_TW.po | 74 +++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 39 insertions(+), 35 deletions(-)
diff --git a/zh_TW.po b/zh_TW.po
index b9db448..0874079 100644
--- a/zh_TW.po
+++ b/zh_TW.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
-"POT-Creation-Date: 2014-06-24 11:44+0200\n"
-"PO-Revision-Date: 2014-07-05 18:44+0000\n"
+"POT-Creation-Date: 2014-08-31 15:23+0200\n"
+"PO-Revision-Date: 2014-09-04 03:10+0000\n"
"Last-Translator: danfong <danfong.hsieh(a)gmail.com>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/torproject/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
@@ -19,8 +19,8 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ../lib/Tails/IUK/Frontend.pm:146 ../lib/Tails/IUK/Frontend.pm:523
-#: ../lib/Tails/IUK/Frontend.pm:667
+#: ../lib/Tails/IUK/Frontend.pm:146 ../lib/Tails/IUK/Frontend.pm:527
+#: ../lib/Tails/IUK/Frontend.pm:671
msgid "For debugging information, see /home/amnesia/.xsession-errors"
msgstr "偵錯資訊,請參閱 /home/amnesia/.xsession-errors"
@@ -62,39 +62,43 @@ msgstr "此系統上沒有足夠的記憶體可用"
msgid "No explanation available for reason '%{reason}s'."
msgstr "沒有可用的解釋理由 '%{reason}s'"
-#: ../lib/Tails/IUK/Frontend.pm:281
+#: ../lib/Tails/IUK/Frontend.pm:279
+msgid "XXX HEJ XXX"
+msgstr "XXX HEJ XXX"
+
+#: ../lib/Tails/IUK/Frontend.pm:285
msgid "The system is up-to-date"
msgstr "系統已更新到最新"
-#: ../lib/Tails/IUK/Frontend.pm:286
+#: ../lib/Tails/IUK/Frontend.pm:290
msgid "This version of Tails is outdated, and may have security issues."
msgstr "這個 Tails 版本已過時,可能會有安全問題。"
-#: ../lib/Tails/IUK/Frontend.pm:318
+#: ../lib/Tails/IUK/Frontend.pm:322
#, perl-brace-format
msgid ""
"The available incremental upgrade requires %{space_needed}s of free space on"
" Tails system partition, but only %{free_space}s is available."
msgstr "可用的累加式升級在 Tails 系統分割區上需要 %{space_needed}s 的可用空間,但是只有 %{free_space}s 可用。"
-#: ../lib/Tails/IUK/Frontend.pm:334
+#: ../lib/Tails/IUK/Frontend.pm:338
#, perl-brace-format
msgid ""
"The available incremental upgrade requires %{memory_needed}s of free memory,"
" but only %{free_memory}s is available."
msgstr "可用的累加式升級需要 %{space_needed}s 的可用記憶體,但是只有 %{free_space}s 可用。"
-#: ../lib/Tails/IUK/Frontend.pm:356
+#: ../lib/Tails/IUK/Frontend.pm:360
msgid ""
"An incremental upgrade is available, but no full upgrade is.\n"
"This should not happen. Please report a bug."
msgstr "有累加式升級可用,但是沒有完整升級。\n這個情況不應該發生。請回報錯誤。"
-#: ../lib/Tails/IUK/Frontend.pm:360
+#: ../lib/Tails/IUK/Frontend.pm:364
msgid "Error while detecting available upgrades"
msgstr "偵測可用更新時發生錯誤"
-#: ../lib/Tails/IUK/Frontend.pm:370
+#: ../lib/Tails/IUK/Frontend.pm:374
#, perl-brace-format
msgid ""
"<b>You should upgrade to %{name}s %{version}s.</b>\n"
@@ -110,19 +114,19 @@ msgid ""
"Do you want to upgrade now?"
msgstr "<b>您需要升級成 %{name}s %{version}s。</b>\n\n要獲得此新版本的更多相關資訊,請前往 %{details_url}s\n\n建議在升級過程中關閉所有開啟的應用程式。\n下載升級可能會花很多時間,從幾分鐘到幾小時。\n下載升級後,網路將會被停用。\n\n下載大小: %{size}s\n\n您要馬上升級嗎?"
-#: ../lib/Tails/IUK/Frontend.pm:385
+#: ../lib/Tails/IUK/Frontend.pm:389
msgid "Upgrade available"
msgstr "有升級可用"
-#: ../lib/Tails/IUK/Frontend.pm:386
+#: ../lib/Tails/IUK/Frontend.pm:390
msgid "Upgrade now"
msgstr "馬上升級"
-#: ../lib/Tails/IUK/Frontend.pm:387
+#: ../lib/Tails/IUK/Frontend.pm:391
msgid "Upgrade later"
msgstr "稍後升級"
-#: ../lib/Tails/IUK/Frontend.pm:395
+#: ../lib/Tails/IUK/Frontend.pm:399
#, perl-brace-format
msgid ""
"<b>You should do a manual upgrade to %{name}s %{version}s.</b>\n"
@@ -134,20 +138,20 @@ msgid ""
"To learn how to do a manual upgrade, go to https://tails.boum.org/doc/first_steps/upgrade/#manual"
msgstr "<b>您應手動升級成 %{name}s %{version}s。</b>\n\n要獲得此新版本的更多相關資訊,請前往 %{details_url}s\n\n可能無法將您的裝置自動升級成此新版本: %{explanation}s。\n\n欲學習如何手動更新,請前往 https://tails.boum.org/doc/first_steps/upgrade/#manual"
-#: ../lib/Tails/IUK/Frontend.pm:411
+#: ../lib/Tails/IUK/Frontend.pm:415
msgid "New version available"
msgstr "有新版本可用"
-#: ../lib/Tails/IUK/Frontend.pm:468
+#: ../lib/Tails/IUK/Frontend.pm:472
msgid "Downloading upgrade"
msgstr "正在下載升級"
-#: ../lib/Tails/IUK/Frontend.pm:471
+#: ../lib/Tails/IUK/Frontend.pm:475
#, perl-brace-format
msgid "Downloading the upgrade to %{name}s %{version}s..."
msgstr "正在下載升級到 %{name}s %{version}s..."
-#: ../lib/Tails/IUK/Frontend.pm:512
+#: ../lib/Tails/IUK/Frontend.pm:516
msgid ""
"<b>The upgrade could not be downloaded.</b>\\n\\nCheck your network "
"connection, and restart Tails to try upgrading again.\\n\\nIf the problem "
@@ -155,26 +159,26 @@ msgid ""
"file:///usr/share/doc/tails/website/doc/upgrade/error/download.en.html"
msgstr "<b>無法下載升級。</b>\\n\\n請檢查您的網路連線,然後將 Tails 重新啟動後再次嘗試升級。\\n\\n如果問題仍然存在,請前往 file:///usr/share/doc/tails/website/doc/upgrade/error/download.en.html"
-#: ../lib/Tails/IUK/Frontend.pm:528 ../lib/Tails/IUK/Frontend.pm:547
+#: ../lib/Tails/IUK/Frontend.pm:532 ../lib/Tails/IUK/Frontend.pm:551
msgid "Error while downloading the upgrade"
msgstr "下載升級時發生錯誤"
-#: ../lib/Tails/IUK/Frontend.pm:540
+#: ../lib/Tails/IUK/Frontend.pm:544
#, perl-brace-format
msgid ""
"Output file '%{output_file}s' does not exist, but tails-iuk-get-target-file "
"did not complain. Please report a bug."
msgstr "輸出檔 '%{output_file}s' 不存在,但是 tails-iut-get-target-file 沒有抱怨。請回報錯誤。"
-#: ../lib/Tails/IUK/Frontend.pm:559
+#: ../lib/Tails/IUK/Frontend.pm:563
msgid "Error while creating temporary downloading directory"
msgstr "建立暫存下載目錄時發生錯誤"
-#: ../lib/Tails/IUK/Frontend.pm:562
+#: ../lib/Tails/IUK/Frontend.pm:566
msgid "Failed to create temporary download directory"
msgstr "無法建立暫存下載目錄"
-#: ../lib/Tails/IUK/Frontend.pm:574
+#: ../lib/Tails/IUK/Frontend.pm:578
msgid ""
"<b>Your Tails device was successfully upgraded.</b>\n"
"\n"
@@ -184,46 +188,46 @@ msgid ""
"Do you want to restart now?"
msgstr "<b>您的 Tails 裝置已成功升級。</b>\n\n有些安全性功能暫時停用。\n您應儘快將 Tails 重新啟動以使用新版本。\n\n您要現在重新啟動嗎?"
-#: ../lib/Tails/IUK/Frontend.pm:579
+#: ../lib/Tails/IUK/Frontend.pm:583
msgid "Restart Tails"
msgstr "重新啟動 Tails"
-#: ../lib/Tails/IUK/Frontend.pm:580
+#: ../lib/Tails/IUK/Frontend.pm:584
msgid "Restart now"
msgstr "立即重新啟動"
-#: ../lib/Tails/IUK/Frontend.pm:581
+#: ../lib/Tails/IUK/Frontend.pm:585
msgid "Restart later"
msgstr "稍後重新啟動"
-#: ../lib/Tails/IUK/Frontend.pm:592
+#: ../lib/Tails/IUK/Frontend.pm:596
msgid "Error while restarting the system"
msgstr "重新啟動系統時發生錯誤"
-#: ../lib/Tails/IUK/Frontend.pm:595
+#: ../lib/Tails/IUK/Frontend.pm:599
msgid "Failed to restart the system"
msgstr "無法重新啟動系統"
-#: ../lib/Tails/IUK/Frontend.pm:610
+#: ../lib/Tails/IUK/Frontend.pm:614
msgid "Error while shutting down the network"
msgstr "關閉網路時發生錯誤"
-#: ../lib/Tails/IUK/Frontend.pm:613
+#: ../lib/Tails/IUK/Frontend.pm:617
msgid "Failed to shutdown network"
msgstr "無法關閉網路"
-#: ../lib/Tails/IUK/Frontend.pm:623
+#: ../lib/Tails/IUK/Frontend.pm:627
msgid "Upgrading the system"
msgstr "正在升級系統"
-#: ../lib/Tails/IUK/Frontend.pm:625
+#: ../lib/Tails/IUK/Frontend.pm:629
msgid ""
"<b>Your Tails device is being upgraded...</b>\n"
"\n"
"For security reasons, the networking is now disabled."
msgstr "<b>您的 Tails 裝置正在升級中...</b>\n\n因為安全理由,網路現在停用。"
-#: ../lib/Tails/IUK/Frontend.pm:662
+#: ../lib/Tails/IUK/Frontend.pm:666
msgid ""
"<b>An error occured while installing the upgrade.</b>\\n\\nYour Tails device"
" needs to be repaired and might be unable to restart.\\n\\nPlease follow the"
@@ -231,6 +235,6 @@ msgid ""
"file:///usr/share/doc/tails/website/doc/upgrade/error/install.en.html"
msgstr "<b>安裝升級時發生錯誤。</b>\\n\\n您的 Tails 裝置需要被修復而且可能無法重新啟動。\\n\\n請按照指示在 file:///usr/share/doc/tails/website/doc/upgrade/error/install.en.html"
-#: ../lib/Tails/IUK/Frontend.pm:672
+#: ../lib/Tails/IUK/Frontend.pm:676
msgid "Error while installing the upgrade"
msgstr "安裝升級時發生錯誤"
1
0