[tor-commits] [sbws/master] new: v3bwfile: Add measurement attempts, failures
juga at torproject.org
juga at torproject.org
Thu Mar 21 18:30:42 UTC 2019
commit 58d5a4a5c9380fc9b6524f372f982797c3416a00
Author: juga0 <juga at riseup.net>
Date: Thu Feb 7 20:12:47 2019 +0000
new: v3bwfile: Add measurement attempts, failures
and priority list counters
Part of #28567.
---
sbws/lib/v3bwfile.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/sbws/lib/v3bwfile.py b/sbws/lib/v3bwfile.py
index 997e35c..521f304 100644
--- a/sbws/lib/v3bwfile.py
+++ b/sbws/lib/v3bwfile.py
@@ -114,6 +114,9 @@ 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',
+ # 2.6 relay: the number of times a relay was "prioritized" to be measured
+ # in the recent days (by default 5).
+ 'relay_recent_priority_list_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)
@@ -244,6 +247,35 @@ class V3BWHeader(object):
kwargs['destinations_countries'] = destinations_countries
if recent_consensus_count is not None:
kwargs['recent_consensus_count'] = str(recent_consensus_count)
+
+ recent_measurement_attempt_count = \
+ cls.recent_measurement_attempt_count_from_file(state_fpath)
+ if recent_measurement_attempt_count is not None:
+ kwargs['recent_measurement_attempt_count'] = \
+ str(recent_measurement_attempt_count)
+
+ # If it is a failure that is not a ResultError, then
+ # failures = attempts - all mesaurements
+ # Works only in the case that old measurements files already had
+ # measurements count
+ if recent_measurement_attempt_count is not None:
+ all_measurements = 0
+ for result_list in results.values():
+ all_measurements += len(result_list)
+ measurement_failures = (recent_measurement_attempt_count
+ - all_measurements)
+ kwargs['recent_measurement_failure_count'] = \
+ str(measurement_failures)
+
+ priority_lists = cls.recent_priority_list_count_from_file(state_fpath)
+ if priority_lists is not None:
+ kwargs['recent_priority_list_count'] = str(priority_lists)
+
+ priority_relays = \
+ cls.recent_priority_relay_count_from_file(state_fpath)
+ if priority_relays is not None:
+ kwargs['recent_priority_relay_count'] = str(priority_relays)
+
h = cls(timestamp, **kwargs)
return h
@@ -308,6 +340,36 @@ class V3BWHeader(object):
else:
return None
+ # NOTE: in future refactor store state in the class
+ @staticmethod
+ def recent_measurement_attempt_count_from_file(state_fpath):
+ """
+ Returns the number of times any relay was queued to be measured
+ in the recent (by default 5) days from the state file.
+ """
+ state = State(state_fpath)
+ return state.get('recent_measurement_attempt_count', None)
+
+ @staticmethod
+ def recent_priority_list_count_from_file(state_fpath):
+ """
+ Returns the number of times
+ :meth:`~sbws.lib.relayprioritizer.RelayPrioritizer.best_priority`
+ was run
+ in the recent (by default 5) days from the state file.
+ """
+ state = State(state_fpath)
+ return state.get('recent_priority_list_count', None)
+
+ @staticmethod
+ def recent_priority_relay_count_from_file(state_fpath):
+ """
+ Returns the number of times any relay was "prioritized" to be measured
+ in the recent (by default 5) days from the state file.
+ """
+ state = State(state_fpath)
+ return state.get('recent_priority_relay_count', None)
+
@staticmethod
def latest_bandwidth_from_results(results):
return round(max([r.time for fp in results for r in results[fp]]))
@@ -423,6 +485,20 @@ class V3BWLine(object):
consensus_count = max(consensuses_count)
kwargs['relay_in_recent_consensus_count'] = consensus_count
+ measurements_attempts = \
+ [r.relay_recent_measurement_attempt_count for r in results
+ if getattr(r, 'relay_recent_measurement_attempt_count', None)]
+ if measurements_attempts:
+ kwargs['relay_recent_measurement_attempt_count'] = \
+ str(max(measurements_attempts))
+
+ relay_recent_priority_list_counts = \
+ [r.relay_recent_priority_list_count for r in results
+ if getattr(r, 'relay_recent_priority_list_count', None)]
+ if relay_recent_priority_list_counts:
+ kwargs['relay_recent_priority_list_count'] = \
+ str(max(relay_recent_priority_list_counts))
+
success_results = [r for r in results if isinstance(r, ResultSuccess)]
if not success_results:
return None
More information about the tor-commits
mailing list