commit 0fb5efe1be34949f7fa13eaba8e48fedd4342f2b Author: Damian Johnson atagar@torproject.org Date: Sun Apr 21 16:47:16 2019 -0700
Bandwidth file 1.4 headers
Parsing the headers added in bandwidth file version 1.4.0.
https://trac.torproject.org/projects/tor/ticket/30160 --- run_tests.py | 9 +-- stem/descriptor/bandwidth_file.py | 93 ++++++++++++++++++++++- test/unit/descriptor/bandwidth_file.py | 105 ++++++++++++++++++++++++++ test/unit/descriptor/data/bandwidth_file_v1.4 | 84 +++++++++++++++++++++ 4 files changed, 284 insertions(+), 7 deletions(-)
diff --git a/run_tests.py b/run_tests.py index d5a16651..89c0b3de 100755 --- a/run_tests.py +++ b/run_tests.py @@ -109,12 +109,11 @@ def log_traceback(sig, frame): for p in multiprocessing.active_children(): try: os.kill(p.pid, sig) - except OSError as e: - # If the process exited before we could kill it - if e.errno == errno.ESRCH: # No such process - pass + except OSError as exc: + if exc.errno == errno.ESRCH: + pass # already exited, no such process else: - raise e + raise exc
if sig == signal.SIGABRT: # we need to use os._exit() to abort every thread in the interpreter, diff --git a/stem/descriptor/bandwidth_file.py b/stem/descriptor/bandwidth_file.py index 75fe2639..a26b2d57 100644 --- a/stem/descriptor/bandwidth_file.py +++ b/stem/descriptor/bandwidth_file.py @@ -38,6 +38,53 @@ HEADER_DIV = b'=====' HEADER_DIV_ALT = b'===='
+class RecentStats(object): + """ + Statistical information collected over the last 'data_period' (by default + five days). + + :var int consensus_count: number of consensuses published during this period + + :var int prioritized_relays: number of relays prioritized to be measured + :var int prioritized_relay_lists: number of times a set of relays were + prioritized to be measured + + :var int measurement_attempts: number of relay measurements we attempted + :var int measurement_failures: number of measurement attempts that failed + + :var RelayFailures relay_failures: number of relays we failed to measure + """ + + def __init__(self): + self.consensus_count = None + self.prioritized_relays = None + self.prioritized_relay_lists = None + self.measurement_attempts = None + self.measurement_failures = None + self.relay_failures = RelayFailures() + + +class RelayFailures(object): + """ + Summary of the number of relays we were unable to measure. + + :var int no_measurement: number of relays that did not have any successful + measurements + :var int insuffient_period: number of relays whos measurements were collected + over a period that was too small (1 day by default) + :var int insufficient_measurements: number of relays we did not collect + enough measurements for (2 by default) + :var int stale: number of relays whos latest measurement is too old (5 days + by default) + """ + + def __init__(self): + self.no_measurement = None + self.insuffient_period = None + self.insufficient_measurements = None + self.stale = None + + # Converts header attributes to a given type. Malformed fields should be # ignored according to the spec.
@@ -56,9 +103,15 @@ def _date(val): return None # not an iso formatted date
+def _csv(val): + return map(lambda v: v.strip(), val.split(',')) if val is not None else None + + # mapping of attributes => (header, type)
HEADER_ATTR = { + # version 1.1.0 introduced headers + 'version': ('version', _str),
'software': ('software', _str), @@ -69,11 +122,32 @@ HEADER_ATTR = { 'created_at': ('file_created', _date), 'generated_at': ('generator_started', _date),
+ # version 1.2.0 additions + 'consensus_size': ('number_consensus_relays', _int), 'eligible_count': ('number_eligible_relays', _int), 'eligible_percent': ('percent_eligible_relays', _int), 'min_count': ('minimum_number_eligible_relays', _int), 'min_percent': ('minimum_percent_eligible_relays', _int), + + # version 1.3.0 additions + + 'scanner_country': ('scanner_country', _str), + 'destinations_countries': ('destinations_countries', _csv), + + # version 1.4.0 additions + + 'time_to_report_half_network': ('time_to_report_half_network', _int), + + 'recent_stats.consensus_count': ('recent_consensus_count', _int), + 'recent_stats.prioritized_relay_lists': ('recent_priority_list_count', _int), + 'recent_stats.prioritized_relays': ('recent_priority_relay_count', _int), + 'recent_stats.measurement_attempts': ('recent_measurement_attempt_count', _int), + 'recent_stats.measurement_failures': ('recent_measurement_failure_count', _int), + 'recent_stats.relay_failures.no_measurement': ('recent_measurements_excluded_error_count', _int), + 'recent_stats.relay_failures.insuffient_period': ('recent_measurements_excluded_near_count', _int), + 'recent_stats.relay_failures.insufficient_measurements': ('recent_measurements_excluded_few_count', _int), + 'recent_stats.relay_failures.stale': ('recent_measurements_excluded_old_count', _int), }
HEADER_DEFAULT = { @@ -131,9 +205,15 @@ def _parse_header(descriptor, entries): index += 1
descriptor.header = header + descriptor.recent_stats = RecentStats() + + for full_attr, (keyword, cls) in HEADER_ATTR.items(): + obj = descriptor + + for attr in full_attr.split('.')[:-1]: + obj = getattr(obj, attr)
- for attr, (keyword, cls) in HEADER_ATTR.items(): - setattr(descriptor, attr, cls(header.get(keyword, HEADER_DEFAULT.get(attr)))) + setattr(obj, full_attr.split('.')[-1], cls(header.get(keyword, HEADER_DEFAULT.get(full_attr))))
if version_index is not None and version_index != 1: raise ValueError("The 'version' header must be in the second position") @@ -202,6 +282,15 @@ class BandwidthFile(Descriptor): :var int min_count: minimum eligible relays for results to be provided :var int min_percent: minimum measured percentage of the consensus
+ :var str scanner_country: country code where this scan took place + :var list destinations_countries: all country codes that were scanned + + :var int time_to_report_half_network: estimated number of seconds required to + measure half the network, given recent measurements + + :var RecentStats recent_stats: statistical information collected over the + last 'data_period' (by default five days) + ***** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined """ diff --git a/test/unit/descriptor/bandwidth_file.py b/test/unit/descriptor/bandwidth_file.py index 7b1cd198..ddf171a2 100644 --- a/test/unit/descriptor/bandwidth_file.py +++ b/test/unit/descriptor/bandwidth_file.py @@ -52,6 +52,33 @@ EXPECTED_MEASUREMENT_2 = { 'error_misc': '0', }
+EXPECTED_MEASUREMENT_3 = { + 'desc_bw_obs_last': '70423', + 'success': '13', + 'desc_bw_obs_mean': '81784', + 'bw_median': '2603', + 'nick': 'whitsun', + 'bw': '1', + 'desc_bw_avg': '1073741824', + 'time': '2019-04-21T10:22:16', + 'bw_mean': '2714', + 'error_circ': '1', + 'error_stream': '0', + 'node_id': '$8F0F49F2341C7F706D5B475815DBD3E5761334B3', + 'error_misc': '0', + 'consensus_bandwidth': '1000', + 'consensus_bandwidth_is_unmeasured': 'False', + 'desc_bw_bur': '1073741824', + 'error_destination': '0', + 'error_second_relay': '0', + 'master_key_ed25519': 'acShTw35dmVSTkhMdmo9RFRLsP4QV+qOZrEJQubnvWY', + 'relay_in_recent_consensus_count': '22', + 'relay_recent_measurement_attempt_count': '1', + 'relay_recent_measurements_excluded_error_count': '1', + 'relay_recent_priority_list_count': '1', + 'success': '3', +} + EXPECTED_NEW_HEADER_CONTENT = """ 1410723598 version=1.1.0 @@ -103,6 +130,23 @@ class TestBandwidthFile(unittest.TestCase): self.assertEqual(None, desc.min_count) self.assertEqual(None, desc.min_percent)
+ self.assertEqual(None, desc.scanner_country) + self.assertEqual(None, desc.destinations_countries) + self.assertEqual(None, desc.time_to_report_half_network) + + stats = desc.recent_stats + self.assertEqual(None, stats.consensus_count) + self.assertEqual(None, stats.prioritized_relays) + self.assertEqual(None, stats.prioritized_relay_lists) + self.assertEqual(None, stats.measurement_attempts) + self.assertEqual(None, stats.measurement_failures) + + relay_failures = stats.relay_failures + self.assertEqual(None, relay_failures.no_measurement) + self.assertEqual(None, relay_failures.insuffient_period) + self.assertEqual(None, relay_failures.insufficient_measurements) + self.assertEqual(None, relay_failures.stale) + self.assertEqual(94, len(desc.measurements)) self.assertEqual(EXPECTED_MEASUREMENT_1, desc.measurements['D8B9CAA5B818DEFE80857F83FDABBB6429DCFCA0'])
@@ -130,9 +174,70 @@ class TestBandwidthFile(unittest.TestCase): self.assertEqual(3908, desc.min_count) self.assertEqual(60, desc.min_percent)
+ self.assertEqual(None, desc.scanner_country) + self.assertEqual(None, desc.destinations_countries) + self.assertEqual(None, desc.time_to_report_half_network) + + stats = desc.recent_stats + self.assertEqual(None, stats.consensus_count) + self.assertEqual(None, stats.prioritized_relays) + self.assertEqual(None, stats.prioritized_relay_lists) + self.assertEqual(None, stats.measurement_attempts) + self.assertEqual(None, stats.measurement_failures) + + relay_failures = stats.relay_failures + self.assertEqual(None, relay_failures.no_measurement) + self.assertEqual(None, relay_failures.insuffient_period) + self.assertEqual(None, relay_failures.insufficient_measurements) + self.assertEqual(None, relay_failures.stale) + self.assertEqual(81, len(desc.measurements)) self.assertEqual(EXPECTED_MEASUREMENT_2, desc.measurements['9C7E1AFDACC53228F6FB57B3A08C7D36240B8F6F'])
+ def test_format_v1_4(self): + """ + Parse version 1.4 formatted files. + """ + + desc = list(stem.descriptor.parse_file(get_resource('bandwidth_file_v1.4'), 'bandwidth-file 1.4'))[0] + + self.assertEqual(datetime.datetime(2019, 4, 21, 21, 34, 57), desc.timestamp) + self.assertEqual('1.4.0', desc.version) + + self.assertEqual('sbws', desc.software) + self.assertEqual('1.1.0', desc.software_version) + + self.assertEqual(datetime.datetime(2019, 4, 16, 21, 35, 7), desc.earliest_bandwidth) + self.assertEqual(datetime.datetime(2019, 4, 21, 21, 34, 57), desc.latest_bandwidth) + self.assertEqual(datetime.datetime(2019, 4, 21, 21, 35, 4), desc.created_at) + self.assertEqual(datetime.datetime(2019, 4, 20, 11, 40, 1), desc.generated_at) + + self.assertEqual(6684, desc.consensus_size) + self.assertEqual(6459, desc.eligible_count) + self.assertEqual(97, desc.eligible_percent) + self.assertEqual(4010, desc.min_count) + self.assertEqual(60, desc.min_percent) + + self.assertEqual('US', desc.scanner_country) + self.assertEqual(['ZZ'], desc.destinations_countries) + self.assertEqual(223519, desc.time_to_report_half_network) + + stats = desc.recent_stats + self.assertEqual(34, stats.consensus_count) + self.assertEqual(86417, stats.prioritized_relays) + self.assertEqual(260, stats.prioritized_relay_lists) + self.assertEqual(86417, stats.measurement_attempts) + self.assertEqual(57023, stats.measurement_failures) + + relay_failures = stats.relay_failures + self.assertEqual(788, relay_failures.no_measurement) + self.assertEqual(182, relay_failures.insuffient_period) + self.assertEqual(663, relay_failures.insufficient_measurements) + self.assertEqual(0, relay_failures.stale) + + self.assertEqual(58, len(desc.measurements)) + self.assertEqual(EXPECTED_MEASUREMENT_3, desc.measurements['8F0F49F2341C7F706D5B475815DBD3E5761334B3']) + @patch('time.time', Mock(return_value = 1410723598.276578)) def test_minimal_bandwidth_file(self): """ diff --git a/test/unit/descriptor/data/bandwidth_file_v1.4 b/test/unit/descriptor/data/bandwidth_file_v1.4 new file mode 100644 index 00000000..233ec10b --- /dev/null +++ b/test/unit/descriptor/data/bandwidth_file_v1.4 @@ -0,0 +1,84 @@ +1555882497 +version=1.4.0 +destinations_countries=ZZ +earliest_bandwidth=2019-04-16T21:35:07 +file_created=2019-04-21T21:35:04 +generator_started=2019-04-20T11:40:01 +latest_bandwidth=2019-04-21T21:34:57 +minimum_number_eligible_relays=4010 +minimum_percent_eligible_relays=60 +number_consensus_relays=6684 +number_eligible_relays=6459 +percent_eligible_relays=97 +recent_consensus_count=34 +recent_measurement_attempt_count=86417 +recent_measurement_failure_count=57023 +recent_measurements_excluded_error_count=788 +recent_measurements_excluded_few_count=663 +recent_measurements_excluded_near_count=182 +recent_measurements_excluded_old_count=0 +recent_priority_list_count=260 +recent_priority_relay_count=86417 +scanner_country=US +software=sbws +software_version=1.1.0 +time_to_report_half_network=223519 +===== +bw=1 bw_mean=21403 bw_median=21405 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=25600 desc_bw_bur=61440 desc_bw_obs_last=34105 desc_bw_obs_mean=36357 error_circ=2 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 nick=t7 node_id=$F63DF6AA4F395AD2F5F363333D104279F2171381 relay_in_recent_consensus_count=19 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-21T06:53:01 +bw=1 bw_mean=380199 bw_median=397005 consensus_bandwidth=395000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=512000 desc_bw_bur=512000 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=MAB0U2NzMiVSMflW9lSV7DilOcfUg1nFZ4Zeb7g4Vl0 nick=Unnamed node_id=$3E957D869E0DD829FA249E22D8A741AA30B938C2 relay_in_recent_consensus_count=27 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T15:29:15 +bw=1 bw_mean=29398 bw_median=29387 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=76800 desc_bw_bur=153600 desc_bw_obs_last=58500 desc_bw_obs_mean=55486 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=P06EH68TrHTjeHX9KTZ8AIVgH05D09gGyb9s9a0Jj8g nick=nibiru node_id=$7F786E9B32B1599B49433E76D6681959130FD019 relay_in_recent_consensus_count=22 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=4 time=2019-04-21T09:38:06 +bw=1 bw_mean=2714 bw_median=2603 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=70423 desc_bw_obs_mean=81784 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=acShTw35dmVSTkhMdmo9RFRLsP4QV+qOZrEJQubnvWY nick=whitsun node_id=$8F0F49F2341C7F706D5B475815DBD3E5761334B3 relay_in_recent_consensus_count=22 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T10:22:16 +bw=1 bw_mean=188248 bw_median=188009 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=204800 desc_bw_bur=307200 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=ZYBv1WW6QIuWZyZHAzZekfPAiJmK5ntIBRwLr8cfcHI nick=Iqu7ge node_id=$2CA3219A203F120C9B28C9BE00C10C5F0C5DF484 relay_in_recent_consensus_count=10 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T22:36:33 +bw=1 bw_mean=807445 bw_median=911047 consensus_bandwidth=1190000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=4194304 desc_bw_bur=6291456 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=Jbi1fwC4LaqxjmYfI1E3d03ozlo1ByPpsHmIOJlBzOY nick=snap269 node_id=$FDCF49562E65B1CC219410009BD48A9EED387C77 relay_in_recent_consensus_count=1 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T06:11:25 +bw=1 bw_mean=631049 bw_median=622052 consensus_bandwidth=55000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1 desc_bw_bur=0 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=PPPhJHDc2FTZBzFgZFeVSTuHjFAOS/smj2iCnOeDadA nick=donate4Crowdfunding node_id=$BD4172533C3F7271ABCCD9F057E06FD91547C42B relay_in_recent_consensus_count=1 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-21T00:10:24 +bw=1 bw_mean=9959 bw_median=7313 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=149603 desc_bw_obs_mean=86828 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=IkI18qXiueRUwJqwqMoZ9PTYdZNz9+ElpUfZmivmRqo nick=suntzu node_id=$697D7612A5EB6DB98226E98D180A779CB341C655 relay_in_recent_consensus_count=5 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=4 time=2019-04-20T17:10:17 +bw=1 bw_mean=1039857 bw_median=1014723 consensus_bandwidth=6800000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=5242880 desc_bw_bur=8388608 desc_bw_obs_last=0 desc_bw_obs_mean=4728784 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=cHTjxZJ2pKV6WtLxEwJc2oUluL3LNkuurv9czKa9wOw nick=spaghetti node_id=$59CA96E7CDA30AB36C597B499C848BD845745EA0 relay_in_recent_consensus_count=6 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=4 time=2019-04-20T18:26:53 +bw=1 bw_mean=18111 bw_median=15457 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=307200 desc_bw_bur=512000 desc_bw_obs_last=41605 desc_bw_obs_mean=81190 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=u3gfnO0muspu534tF+N+xi+tbbvq1m6xtivmYdO/YwY nick=pkswitchtorronto node_id=$73F6BF45E14C72C47B8B3D3568F6FF195B967A15 relay_in_recent_consensus_count=9 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=4 time=2019-04-20T21:06:24 +bw=1 bw_mean=6328 bw_median=5705 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=80917 desc_bw_obs_mean=112251 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=2 master_key_ed25519=mbihLJ+8Pbv66GrsEW0S8yB6Iu08QnrPnoFkSxhGAsY nick=lader node_id=$CF773DE0B4F537BB80DA35643299403B7BF11AFA relay_in_recent_consensus_count=11 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-20T22:46:07 +bw=1 bw_mean=19938 bw_median=20395 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=76800 desc_bw_bur=524288 desc_bw_obs_last=54697 desc_bw_obs_mean=55364 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=VY8EuVyc6gnXkZs1LmXTT3BCc82gUtYeLPFZU8+noAE nick=Unnamed node_id=$99DEAFE8623642451EB8F7C1B8BC026457FAF85B relay_in_recent_consensus_count=11 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T23:28:12 +bw=1 bw_mean=58191 bw_median=57946 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=76800 desc_bw_bur=90112 desc_bw_obs_last=142605 desc_bw_obs_mean=139931 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=hGFYN/t1/tjgA8+OqgHcHWHWamX+IPU3b/S0I2ipht0 nick=itcanhappenhere node_id=$0B823502D34E15987BF6A8AB4557B600100B0EC5 relay_in_recent_consensus_count=15 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-21T02:52:16 +bw=1 bw_mean=32132 bw_median=18625 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=65536 desc_bw_bur=153600 desc_bw_obs_last=199486 desc_bw_obs_mean=181867 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=6DIWF95I7sYm5y2j7kRk6/qY3srcMf+ZQU4NADIcxb8 nick=GuruKopi node_id=$35449EB3D025CC24601FB43884F9699367D677CF relay_in_recent_consensus_count=1 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T03:57:36 +bw=1 bw_mean=396820 bw_median=336591 consensus_bandwidth=1730000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=4194304 desc_bw_bur=6291456 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=FhDwpSPN14hqHeCMgh1xUazxlTLDUMo/HSPuvhDyFBM nick=PESEC node_id=$683A668EBD5E275889B510CAEA45752016E3DE30 relay_in_recent_consensus_count=17 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=2 time=2019-04-21T04:56:27 +bw=1 bw_mean=8729 bw_median=8718 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1024000 desc_bw_bur=2048000 desc_bw_obs_last=50786 desc_bw_obs_mean=54875 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=yY7oCwfdoojVJoarPzmMMx47RZo+QPxF6jt5AbuXL2o nick=severalwdadwajunior node_id=$703D1DC9A96F34DCF7D698FE854FED081A4BE13C relay_in_recent_consensus_count=18 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T05:21:19 +bw=1 bw_mean=747719 bw_median=825687 consensus_bandwidth=1500000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=4194304 desc_bw_bur=6291456 desc_bw_obs_last=0 desc_bw_obs_mean=849408 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=x2F1QxlV0R85OWJniJXGVReGQwP0Ka1/CmERyPRl424 nick=snap269 node_id=$FE66738B7E6B3516E70E851ECA32A837DA0FED66 relay_in_recent_consensus_count=1 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-21T10:47:23 +bw=1 bw_mean=31609 bw_median=38830 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=4194304 desc_bw_bur=6291456 desc_bw_obs_last=63976 desc_bw_obs_mean=60791 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=6iwHrySU1h49K8zDGSnjgMDuHnsJVWLqVZcQ936SHCs nick=snap269 node_id=$518B136C45A98BA6616E54AA329D29B13FA191DB relay_in_recent_consensus_count=9 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T11:25:25 +bw=1 bw_mean=30429 bw_median=43192 consensus_bandwidth=1000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=4194304 desc_bw_bur=6291456 desc_bw_obs_last=58367 desc_bw_obs_mean=57666 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=gfrdhgHGJFOmyFx9d/CzRbW/FeMZ93oEfXCgoqEFaAI nick=snap269 node_id=$16AABB2EAA582E897BCD48080349313E7AF8221D relay_in_recent_consensus_count=26 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T14:03:49 +bw=1 bw_mean=185550 bw_median=181334 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=2 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=lGNYSbAx8toGLoF4SscKqZzAlGPqz+cwAA/NxXLJnGA nick=Ongared node_id=$7E4867681DEB4879C71CD4D63EF3EC231D534366 relay_in_recent_consensus_count=1 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-20T11:46:05 +bw=1 bw_mean=453366 bw_median=512238 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1 desc_bw_bur=0 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=sTrv4H0VBa8UbqxoQWxS8ndX8g2Fl8QTnWZE6rpzP9k nick=donateDonationbased node_id=$0F45FCAC70DA935F5367A9B94264D1C46707E947 relay_in_recent_consensus_count=7 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T23:26:55 +bw=1 bw_mean=1072550 bw_median=718941 consensus_bandwidth=1390000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=Dn8dTxq3XuziqenuJds5PqgRESUVnlmXQiVhM63Ff4A nick=Debbie node_id=$A94DEB640E06E90BD98387624EE6D59DF20D91BD relay_in_recent_consensus_count=1 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-19T04:32:08 +bw=1 bw_mean=931669 bw_median=901981 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=kI3qC9qQfEM8Ber3ngxNhLida7E/VIJWm9ofiNGRJJo nick=hellebuz node_id=$52D5FB2004C67127C73B71478238FA66122BD443 relay_in_recent_consensus_count=22 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T10:18:04 +bw=1 bw_mean=669850 bw_median=782470 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=32768000 desc_bw_bur=39321600 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=2 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=4zeLC/ooBsI1B/XYrs2ontESIMgFVvx/acK1iFtUlVw nick=torstockholm node_id=$5ED7E5EEC5FE07EE7EEF8005519ADB175E24B6DB relay_in_recent_consensus_count=27 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-21T15:47:05 +bw=1 bw_mean=384544 bw_median=405846 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=2 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 nick=zftktohanu2jfxxUeBz node_id=$6B2547FEAC0B85246DB3649522A72660DA4F346A relay_in_recent_consensus_count=29 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-21T17:01:15 +bw=1 bw_mean=662618 bw_median=762980 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=c83tAlDa/0M+t00ucRlRcAEKJnIAQpwIbP5ebtOF2Mk nick=VegasOnion node_id=$66EAE0A3A8B0E7029F493E48F19DBBB1967A2423 relay_in_recent_consensus_count=1 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T06:11:03 +bw=1 bw_mean=1010521 bw_median=941059 consensus_bandwidth=18900000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=12288000 desc_bw_bur=12288000 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=7PV1B+84IhXfpoz1sBS1Kb5mvKr3bQoXIKeCulgw51M nick=sauronkingofmortor node_id=$2D8AFA912E2B8623BB2CDACD19332209D524D1A3 relay_in_recent_consensus_count=3 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T15:01:43 +bw=1 bw_mean=801295 bw_median=703490 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=3932160 desc_bw_bur=3932160 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=O10Rs6JTsiM8AK7UN4P7ECvzlDmXe9OhYLmDNXfwGU0 nick=AnonNetherland00 node_id=$64AFFBBE017853193E190EF89D64602307B7C4D8 relay_in_recent_consensus_count=3 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T15:05:21 +bw=1 bw_mean=929220 bw_median=947505 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=J/PfHpCclL4lym9NK/gMLO+7RltiQaC7sh4txmLddnk nick=Ieditedtheconfig node_id=$E8C3FA7D135CE4703EA48CC46108C02BB52031D1 relay_in_recent_consensus_count=3 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T15:04:50 +bw=1 bw_mean=1137027 bw_median=1011789 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=5120000 desc_bw_bur=5632000 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=co2riWQXINjw2LkY2tbUzdMc14mVzOmkFMS85jzjzPA nick=tor98 node_id=$64EADE307AA3F5C9B5196AB21C51C9F89B2184D9 relay_in_recent_consensus_count=3 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T15:06:05 +bw=1 bw_mean=93008 bw_median=93113 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=102400 desc_bw_bur=204800 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=fGdcMh/HyD2aDctqzA4G3dgh0/r+BUb/uqbu7/XvfFc nick=ursula node_id=$4751FB559499DE05EA411DFEF2470B60D5DA8AE2 relay_in_recent_consensus_count=3 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T15:06:10 +bw=1 bw_mean=473551 bw_median=393498 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1310720 desc_bw_bur=1310720 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=Fah1AlOZdrYAOFPwVQg+ezs5+erXy7pfkAzmQ7ZetBE nick=salus node_id=$81784560C613C5F81B3C27B68A234E1A0C42A981 relay_in_recent_consensus_count=5 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T17:04:00 +bw=1 bw_mean=416282 bw_median=254338 consensus_bandwidth=8880000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=PoDjluh0AuCWze+mWxncVdBCjGKsY3/Ozl/ymJ0kA24 nick=tosk node_id=$B183A69592D2E8C8C487C054D0849E3C9561DC11 relay_in_recent_consensus_count=6 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T18:13:23 +bw=1 bw_mean=871316 bw_median=717463 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 nick=DeathStar002 node_id=$39987D752EC658A439228262737DC44E48164832 relay_in_recent_consensus_count=9 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=2 time=2019-04-20T20:54:23 +bw=1 bw_mean=619044 bw_median=578283 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=8192000 desc_bw_bur=9216000 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=JVSfobbrl+azn9EBlX81k/aBGCZpF78GaXoNhVB3pH0 nick=badabing node_id=$C637D62E52E6D0DAC947231E8AFB3D75E70AE3AE relay_in_recent_consensus_count=11 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T23:26:21 +bw=1 bw_mean=586076 bw_median=545343 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=pPjUY0K2qvl6TnbSsBNvHaD4AzkBXqCjYLb4w2W6oIA nick=whyme node_id=$8278CFFF4FABA7A6932359574A226EE198AC6ABA relay_in_recent_consensus_count=11 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-20T23:26:43 +bw=1 bw_mean=225851 bw_median=226576 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=409600 desc_bw_bur=819200 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=SzIhcB9UKWCJn5gd1xIr1DWVMRmxNFdAYLGgOB4C0GY nick=central2rave4you node_id=$332DC90B7938F15AA8B607C058C66CB005762CDD relay_in_recent_consensus_count=11 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=2 time=2019-04-20T23:51:15 +bw=1 bw_mean=383908 bw_median=381405 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=4194304 desc_bw_bur=6291456 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=LOoDXSJnEZ/yL9MXz4Ho4E7d3SmWUsSI8WpZeWzN7yQ nick=snap269 node_id=$AC5654C67637C9BF97B2E343012CB70528586E9B relay_in_recent_consensus_count=13 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=2 time=2019-04-21T01:15:27 +bw=1 bw_mean=179210 bw_median=179467 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=196608 desc_bw_bur=393216 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=v3c3OM4JCQvK1ScvbtO1T2BSRPgb2XhGFGxKfNn6G/I nick=Sete node_id=$A9AFBC96CD42825F556F7A3801985CD2042607BB relay_in_recent_consensus_count=14 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T02:24:09 +bw=1 bw_mean=1016016 bw_median=917521 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=b7nn0dEaqGXVQ9HBPmkBVfDIUeb8Iwrz0IkTUiSFGjU nick=OSRelay2 node_id=$335FD0F2101E23405700FF1EC200340E804A903E relay_in_recent_consensus_count=14 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T02:24:39 +bw=1 bw_mean=373784 bw_median=375515 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 master_key_ed25519=kxN7MOH/oUWf+s0ll+zcfXgwMV77rGil3AtA9hbS/wk nick=furrybrigade node_id=$173F579A24FE2763D1357AA87C6B01059BEF18E3 relay_in_recent_consensus_count=17 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=2 time=2019-04-21T04:36:25 +bw=1 bw_mean=551405 bw_median=779227 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=262144 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=gL6eqamFOxBxxZo4ZHh9X66zXFhDgPwox56UTYjYynE nick=Unnamed node_id=$2EDB8B1CBA3EA2BE05C1122E419CAEE2CE3A7577 relay_in_recent_consensus_count=17 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T04:37:11 +bw=1 bw_mean=414955 bw_median=460026 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=RHZ61q8pMDVm18+zBd5CrHbBDXI5gLNiJh2TqZf8exI nick=poopwielder node_id=$7E4062413B006D3BA37F92235723341465CEF8C7 relay_in_recent_consensus_count=17 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T04:37:57 +bw=1 bw_mean=758197 bw_median=686226 consensus_bandwidth=802000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=394240 desc_bw_bur=61440000 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=qgyf68eOnJwJF/5Q+sTDrukzBxfVBxbN58DlWDj2FqA nick=vahShei7Eeth node_id=$6C1A8CBE589906EEC6E73F4F286AC29AF7521E1D relay_in_recent_consensus_count=22 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T10:15:02 +bw=1 bw_mean=687376 bw_median=720036 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=819200 desc_bw_bur=1126400 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=I4elr+i0u2F072zrNXpNHp63+7NjSucyofSdx8tnVqA nick=Unnamed node_id=$321A004A3CCDC98C5B987E9ACFBB4AD2D78E29B0 relay_in_recent_consensus_count=22 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T10:15:50 +bw=1 bw_mean=434140 bw_median=550161 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=gUPogFLVURdBKX/mzutp9aaCDFBVSlHA8+HqE454wBQ nick=SwissRelay42 node_id=$B2A23EDCFFA923B465AE4DB9A2428ED7E2C29ADD relay_in_recent_consensus_count=26 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T15:26:59 +bw=1 bw_mean=767668 bw_median=540190 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=JH/hac6tDbr2FpVnArEZh+Co00ajNMCtZqNdZHPnZjI nick=slalix node_id=$472CDEFC95177D36FA0A45E2119867DC461BB88F relay_in_recent_consensus_count=26 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T15:27:24 +bw=1 bw_mean=601475 bw_median=545961 consensus_bandwidth=1420000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=OKbDN/bczMN2lVMnH9zoIUapBrwoLOa+2N/M2s9wEoY nick=armik2 node_id=$0C0388BC552D7AC903F49390A40244FD3FFF44A2 relay_in_recent_consensus_count=26 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T15:27:36 +bw=1 bw_mean=594942 bw_median=573495 consensus_bandwidth=3910000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=4194304 desc_bw_bur=6291456 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=KRIc4GWdnu6jzGMKU6nvzilAJQJq3aG5OAYoMTrVWjY nick=snap269 node_id=$5E4A0FC4EFB477F5AE730CB1482635B346C8F527 relay_in_recent_consensus_count=26 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T18:20:03 +bw=1 bw_mean=444707 bw_median=470882 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=nlfGZeBWPz4BxAsChPurPooymKCWZlMTuMjMm01VcUo nick=slalix node_id=$70BD9ECBE1BDB383F04670ED1DB5ADFE60814259 relay_in_recent_consensus_count=26 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T18:20:42 +bw=1 bw_mean=225459 bw_median=168079 consensus_bandwidth=0 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=0 desc_bw_obs_mean=1 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=BmYw3xQa51pm2isY7To/YlHTG59poD7+h4L6yFv4sd0 nick=moxiecolo node_id=$B023D779A32A363BA63B375A7A6B0649199B8418 relay_in_recent_consensus_count=26 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T18:21:21 +bw=2 bw_mean=50012 bw_median=77763 consensus_bandwidth=3000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=167017 desc_bw_obs_mean=171882 error_circ=1 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 nick=toosa node_id=$314793A8A3530A6FA47C9484AD1250032A4F9A66 relay_in_recent_consensus_count=19 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-21T06:42:22 +bw=2 bw_mean=36645 bw_median=44011 consensus_bandwidth=3000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=80896 desc_bw_bur=80896 desc_bw_obs_last=80149 desc_bw_obs_mean=79605 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=K9m8MIOa/NEIwmfwFJrm3p8SeW+lwzjqP66ygG/TP3o nick=salottisipuli node_id=$04ABF90AEF8556F3A7E0527722CDFA7FDCB66C59 relay_in_recent_consensus_count=21 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=4 time=2019-04-21T08:20:07 +bw=2 bw_mean=146698 bw_median=56149 consensus_bandwidth=3000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=122457 desc_bw_obs_mean=116616 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=P3oGHtTeP+pwjdS4AesDjahKStiJOq99CWygTcjYxAo nick=sriyani node_id=$2AF1F03CA502A23D554EB61C6649C531674C9627 relay_in_recent_consensus_count=21 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=4 time=2019-04-21T08:23:48 +bw=2 bw_mean=35699 bw_median=36470 consensus_bandwidth=3000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=40960 desc_bw_bur=81920 desc_bw_obs_last=48350 desc_bw_obs_mean=48108 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 nick=hottor01 node_id=$D0D2816EB56967430B9271ADDD9340A41A2E1683 relay_in_recent_consensus_count=22 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=4 time=2019-04-21T09:55:25 +bw=2 bw_mean=4994 bw_median=4842 consensus_bandwidth=2000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=1073741824 desc_bw_bur=1073741824 desc_bw_obs_last=109396 desc_bw_obs_mean=97203 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=0 master_key_ed25519=kAdk+2XPBM1LWpfKf+JBfC3yKp+LFLh/K5sbPO8Gnso nick=nothaas node_id=$925F82CFAD0DDB839161FAB9E7355E774C730378 relay_in_recent_consensus_count=23 relay_recent_measurement_attempt_count=1 relay_recent_priority_list_count=1 success=4 time=2019-04-21T11:21:21 +bw=2 bw_mean=7219 bw_median=7356 consensus_bandwidth=2000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=76800 desc_bw_bur=76800 desc_bw_obs_last=76259 desc_bw_obs_mean=76837 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=2 master_key_ed25519=/Gk3GQhdhmASNPdGjReNdsWOHL1m2TGp4oAcvV0mXKI nick=ageinghacker node_id=$26AD3C1C18F1CD2B357A33FA7652A906DB13A8CC relay_in_recent_consensus_count=23 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=2 relay_recent_priority_list_count=1 success=2 time=2019-04-21T11:15:13 +bw=2 bw_mean=38871 bw_median=39022 consensus_bandwidth=3000 consensus_bandwidth_is_unmeasured=False desc_bw_avg=5242880 desc_bw_bur=10485760 desc_bw_obs_last=127367 desc_bw_obs_mean=125775 error_circ=0 error_destination=0 error_misc=0 error_second_relay=0 error_stream=1 nick=default node_id=$AD77073249E2DC7381E27D40DE686E4AF18D0123 relay_in_recent_consensus_count=27 relay_recent_measurement_attempt_count=1 relay_recent_measurements_excluded_error_count=1 relay_recent_priority_list_count=1 success=3 time=2019-04-21T15:31:49