[tor-commits] [sbws/master] new: v3bwfile: Add KeyValues to monitor relays
juga at torproject.org
juga at torproject.org
Thu Mar 21 18:30:42 UTC 2019
commit 013cbb7247d531511672e26abbd69a4177014a6b
Author: juga0 <juga at riseup.net>
Date: Tue Feb 26 15:33:58 2019 +0000
new: v3bwfile: Add KeyValues to monitor relays
that are not measured or not reported in the bandwidth file.
Part of #29591.
---
sbws/lib/v3bwfile.py | 95 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 89 insertions(+), 6 deletions(-)
diff --git a/sbws/lib/v3bwfile.py b/sbws/lib/v3bwfile.py
index 37475d2..d6c545a 100644
--- a/sbws/lib/v3bwfile.py
+++ b/sbws/lib/v3bwfile.py
@@ -26,20 +26,71 @@ log = logging.getLogger(__name__)
LINE_SEP = '\n'
KEYVALUE_SEP_V1 = '='
KEYVALUE_SEP_V2 = ' '
+
+# NOTE: in a future refactor make make all the KeyValues be a dictionary
+# with their type, so that it's more similar to stem parser.
+
+# Header KeyValues
+# =================
# List of the extra KeyValues accepted by the class
EXTRA_ARG_KEYVALUES = ['software', 'software_version', 'file_created',
'earliest_bandwidth', 'generator_started',
'scanner_country', 'destinations_countries']
+# number_eligible_relays is the number that ends in the bandwidth file
+# ie, have not been excluded by one of the filters in 4. below
+# They should be call recent_measurement_included_count to be congruent
+# with the other KeyValues.
STATS_KEYVALUES = ['number_eligible_relays', 'minimum_number_eligible_relays',
'number_consensus_relays', 'percent_eligible_relays',
'minimum_percent_eligible_relays']
-KEYVALUES_INT = STATS_KEYVALUES
+# Added in #29591
+BW_HEADER_KEYVALUES_MONITOR = [
+ # 1.1 header: the number of different consensuses, that sbws has seen,
+ # since the last 5 days
+ 'recent_consensus_count',
+ # 2.4 Number of times a priority list has been created
+ 'recent_priority_list_count',
+ # 2.5 Number of relays that there were in a priority list
+ # [50, number of relays in the network * 0.05]
+ 'recent_priority_relay_count',
+ # 3.6 header: the number of times that sbws has tried to measure any relay,
+ # since the last 5 days
+ # This would be the number of times a relays were in a priority list
+ 'recent_measurement_attempt_count',
+ # 3.7 header: the number of times that sbws has tried to measure any relay,
+ # since the last 5 days, but it didn't work
+ # This should be the number of attempts - number of ResultSuccess -
+ # something else we don't know yet
+ # So far is the number of ResultError
+ 'recent_measurement_failure_count',
+ # The number of success results should be:
+ # the number of attempts - the number of failures
+ # 4.6 header: the number of successful results, created in the last 5 days,
+ # that were excluded by a filter
+ # This is the sum of the following 3 + not success results
+ # 'recent_measurement_exclusion_count',
+ 'recent_measurement_exclusion_not_distanciated_count',
+ 'recent_measurement_exclusion_not_recent_count',
+ 'recent_measurement_exclusion_not_min_num_count',
+]
+BANDWIDTH_HEADER_KEY_VALUES_INIT = \
+ ['earliest_bandwidth', 'generator_started',
+ 'scanner_country', 'destinations_countries']\
+ + STATS_KEYVALUES \
+ + BW_HEADER_KEYVALUES_MONITOR
+
+KEYVALUES_INT = STATS_KEYVALUES + BW_HEADER_KEYVALUES_MONITOR
# List of all unordered KeyValues currently being used to generate the file
UNORDERED_KEYVALUES = EXTRA_ARG_KEYVALUES + STATS_KEYVALUES + \
- ['latest_bandwidth']
+ ['latest_bandwidth'] + \
+ BW_HEADER_KEYVALUES_MONITOR
# List of all the KeyValues currently being used to generate the file
ALL_KEYVALUES = ['version'] + UNORDERED_KEYVALUES
+
TERMINATOR = '====='
+
+# Bandwidth Lines KeyValues
+# =========================
# Num header lines in v1.X.X using all the KeyValues
NUM_LINES_HEADER_V1 = len(ALL_KEYVALUES) + 2
LINE_TERMINATOR = TERMINATOR + LINE_SEP
@@ -50,14 +101,46 @@ BW_KEYVALUE_SEP_V1 = ' '
BW_KEYVALUES_BASIC = ['node_id', 'bw']
BW_KEYVALUES_FILE = BW_KEYVALUES_BASIC + \
['master_key_ed25519', 'nick', 'rtt', 'time',
- 'success', 'error_stream', 'error_circ', 'error_misc']
+ 'success', 'error_stream', 'error_circ', 'error_misc',
+ # Added in #292951
+ 'error_second_relay', 'error_destination']
BW_KEYVALUES_EXTRA_BWS = ['bw_median', 'bw_mean', 'desc_bw_avg', 'desc_bw_bur',
'desc_bw_obs_last', 'desc_bw_obs_mean',
'consensus_bandwidth',
'consensus_bandwidth_is_unmeasured']
-BW_KEYVALUES_EXTRA = BW_KEYVALUES_FILE + BW_KEYVALUES_EXTRA_BWS
+
+# Added in #292951
+BANDWIDTH_LINE_KEY_VALUES_MONITOR = [
+ # 1.2 relay: the number of different consensuses, that sbws has seen,
+ # since the last 5 days, that have this relay
+ 'relay_in_recent_consensus_count',
+ # 3.8 relay: the number of times that sbws has tried to measure
+ # this relay, since the last 5 days
+ # This would be the number of times a relay was in a priority list (2.6)
+ # since once it gets measured, it either returns ResultError,
+ # ResultSuccess or something else happened that we don't know yet
+ 'relay_recent_measurement_attempt_count',
+ # 3.9 relay: the number of times that sbws has tried to measure
+ # this relay, since the last 5 days, but it didn't work
+ # This should be the number of attempts - number of ResultSuccess -
+ # something else we don't know yet
+ # So far is the number of ResultError
+ 'relay_recent_measurement_failure_count',
+ # The number of success results should be:
+ # the number of attempts - the number of failures
+ # 4.8 relay: the number of successful results, created in the last 5 days,
+ # that were excluded by a rule, for this relay
+ # This would be the sum of the following 3 + the number of not success
+ 'relay_recent_measurement_exclusion_count',
+ 'relay_recent_measurement_exclusion_not_distanciated',
+ 'relay_recent_measurement_exclusion_not_recent_count',
+ 'relay_recent_measurement_exclusion_not_min_num_count',
+]
+BW_KEYVALUES_EXTRA = BW_KEYVALUES_FILE + BW_KEYVALUES_EXTRA_BWS \
+ + BANDWIDTH_LINE_KEY_VALUES_MONITOR
BW_KEYVALUES_INT = ['bw', 'rtt', 'success', 'error_stream',
- 'error_circ', 'error_misc'] + BW_KEYVALUES_EXTRA_BWS
+ 'error_circ', 'error_misc'] + BW_KEYVALUES_EXTRA_BWS \
+ + BANDWIDTH_LINE_KEY_VALUES_MONITOR
BW_KEYVALUES = BW_KEYVALUES_BASIC + BW_KEYVALUES_EXTRA
@@ -133,7 +216,7 @@ class V3BWHeader(object):
# same as timestamp
self.latest_bandwidth = unixts_to_isodt_str(timestamp)
[setattr(self, k, v) for k, v in kwargs.items()
- if k in EXTRA_ARG_KEYVALUES]
+ if k in BANDWIDTH_HEADER_KEY_VALUES_INIT]
def __str__(self):
if self.version.startswith('1.'):
More information about the tor-commits
mailing list