commit feb0d6b24d1f1081e8ffb8935a04dbf456a7e7b1 Author: Tom Ritter tom@ritter.vg Date: Sat Oct 15 23:31:58 2016 -0400
Indicate Fallback Directory mirrors --- website.py | 15 +++++++++++++++ write_website.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+)
diff --git a/website.py b/website.py index 23d48e1..b0eb68c 100755 --- a/website.py +++ b/website.py @@ -17,6 +17,7 @@ from Crypto.PublicKey import RSA class WebsiteWriter: consensus = None votes = None + fallback_dirs = None known_authorities = [] consensus_expirey = datetime.timedelta(hours=3) directory_key_warning_time = datetime.timedelta(days=14) @@ -58,6 +59,8 @@ class WebsiteWriter: def set_config(self, config): self.known_params = config['known_params'] self.bandwidth_authorities = config['bandwidth_authorities'] + def set_fallback_dirs(self, fallback_dirs): + self.fallback_dirs = fallback_dirs def get_consensus_time(self): return self.consensus.valid_after
@@ -937,6 +940,7 @@ class WebsiteWriter: if vote.routers[relay_fp].measured >= 0L: self.site.write(" <br />" if flagsWritten > 0 else "") self.site.write("bw=" + str(vote.routers[relay_fp].measured)) + flagsWritten += 1
self.site.write("</td>\n"); else: @@ -956,6 +960,14 @@ class WebsiteWriter: if self.consensus.routers[relay_fp].bandwidth >= 0L: self.site.write(" <br />" if flagsWritten > 0 else "") self.site.write("bw=" + str(self.consensus.routers[relay_fp].bandwidth)) + flagsWritten += 1 + + if relay_fp in self.fallback_dirs: + self.site.write(" <br />" if flagsWritten > 0 else "") + self.site.write("FallbackDir") + if 'disappeared_version' in self.fallback_dirs[relay_fp]: + self.site.write('(<' + self.fallback_dirs[relay_fp]['disappeared_version'] + ')') + flagsWritten += 1
self.site.write("</td>\n") else: @@ -998,6 +1010,9 @@ if __name__ == '__main__': w.set_consensuses(c) v = pickle.load(open('votes.p', 'rb')) w.set_votes(v) + f = pickle.load(open('fallback_dirs.p', 'rb')) + w.set_fallback_dirs(f) +
CONFIG = stem.util.conf.config_dict('consensus', { 'ignored_authorities': [], diff --git a/write_website.py b/write_website.py index ddb5a47..8fca41e 100755 --- a/write_website.py +++ b/write_website.py @@ -63,6 +63,49 @@ def main(): f.write("%s,%i,%i\n" % (ds, time.time() * 1000, int(consensus_fetching_runtimes[ds] * 1000))) f.close()
+ # Calculate the fallback directory info + import re + import urllib + + GITWEB_FALLBACK_DIR_URL = 'https://gitweb.torproject.org/tor.git/plain/src/or/fallback_dirs.inc' + fallback_lines = urllib.urlopen(GITWEB_FALLBACK_DIR_URL).read() + + fallback_dirs, attr = {}, {} + for line in fallback_lines.splitlines(): + if line.startswith('"') or line.startswith('/*') or line.startswith(' *'): + if line.startswith('"'): + info_line_match = False + addr_line_match = re.match('"([\d.]+):(\d+) orport=(\d+) id=([\dA-F]{40}).*', line) + ipv6_line_match = re.match('" ipv6=[([\da-f:]+)]:(\d+)"', line) + else: + info_line_match = re.match('/* Fallback was on (.+) list, but (.*) before (.+)', line) + addr_line_match = re.match(' * "([\d.]+):(\d+) orport=(\d+) id=([\dA-F]{40}).*', line) + ipv6_line_match = re.match(' * " ipv6=[([\da-f:]+)]:(\d+)"', line) + + if info_line_match: + appeared_version, removed_reason, disappeared_version = info_line_match.groups() + + attr['appeared_version'] = appeared_version + attr['removed_reason'] = removed_reason + attr['disappeared_version'] = disappeared_version + elif addr_line_match: + address, dir_port, or_port, fingerprint = addr_line_match.groups() + + attr['address'] = address + attr['or_port'] = int(or_port) + attr['dir_port'] = int(dir_port) + attr['fingerprint'] = fingerprint + elif ipv6_line_match: + address, port = ipv6_line_match.groups() + + attr['orport_v6'] = (address, int(port)) + elif '" weight=' in line and 'fingerprint' in attr: + fallback_dirs[attr.get('fingerprint')] = attr + + attr = {} + # great for debugging + #import pickle + #pickle.dump(fallback_dirs, open('fallback_dirs.p', 'wb'))
# Calculate the number of known and measured relays for each dirauth and insert it into the database databaseDirAuths = "faravahar, gabelmoo, dizum, moria1, urras, maatuska, longclaw, tor26, dannenberg, turtles".split(", ") @@ -117,6 +160,7 @@ def main(): w = WebsiteWriter() w.set_consensuses(consensuses) w.set_votes(votes) + w.set_fallback_dirs(fallback_dirs) w.set_config(CONFIG) w.write_website(os.path.join(os.path.dirname(__file__), 'out', 'consensus-health.html'), True) w.write_website(os.path.join(os.path.dirname(__file__), 'out', 'index.html'), False)
tor-commits@lists.torproject.org