commit 4e7bc3e5b3f4f17d9a5848f21176f4c60b96c098 Author: juga0 juga@riseup.net Date: Mon Jun 18 13:22:43 2018 +0000
Trim bandwidth results for relays that change IP --- sbws/lib/resultdump.py | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/sbws/lib/resultdump.py b/sbws/lib/resultdump.py index 32fd1cd..d64d843 100644 --- a/sbws/lib/resultdump.py +++ b/sbws/lib/resultdump.py @@ -82,7 +82,44 @@ def trim_results(fresh_days, result_dict): return out_results
-def load_recent_results_in_datadir(fresh_days, datadir, success_only=False): +def trim_results_ip_changed(result_dict, ipv4=True, ipv6=False): + """When there are results for the same relay with different IPs, + create a new results' dictionary without that relay's results using an + older IP. + + :param dict result_dict: a dictionary of results + :param bool ipv4: whether to trim the results when a relay's IPv4 changes + :param bool ipv6: whether to trim the results when a relay's IPv6 changes + :returns: a new results dictionary + """ + assert isinstance(result_dict, dict) + assert ipv4 is True or ipv6 is True + new_results_dict = {} + if ipv4 is True: + for fp in result_dict.keys(): + results = result_dict[fp] + # find if the results for a relay have more than one ipv4 + # address + ipv4s = set([result.address for result in results]) + if len(ipv4s) > 1: + # keep only the results for the last ip used + # probably we should not just discard all the results for + # a relay that change address + ordered_results = sorted(results, key=lambda r: r.time) + latest_address = ordered_results[-1].address + last_ip_results = [result for result in results + if result.address == latest_address] + new_results_dict[fp] = last_ip_results + else: + new_results_dict[fp] = results + if ipv6 is True: + # Not implemented + pass + return new_results_dict + + +def load_recent_results_in_datadir(fresh_days, datadir, success_only=False, + ipv4=True, ipv6=False): ''' Given a data directory, read all results files in it that could have results in them that are still valid. Trim them, and return the valid Results as a list '''