From 10fca8281663d45c08367f9d5e351c66b670d773 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 23 Sep 2010 10:33:32 -0500 Subject: Give more information about mirror check runs and frequency Show how many times the check has ran in the last 24 hours, as well as the average interval between checks. Signed-off-by: Dan McGee --- mirrors/utils.py | 29 ++++++++++++++++++++++++----- mirrors/views.py | 17 +++++++---------- 2 files changed, 31 insertions(+), 15 deletions(-) (limited to 'mirrors') diff --git a/mirrors/utils.py b/mirrors/utils.py index 69909dcf..cdb705b2 100644 --- a/mirrors/utils.py +++ b/mirrors/utils.py @@ -5,10 +5,11 @@ import datetime +default_cutoff = datetime.timedelta(hours=24) @cache_function(300) -def get_mirror_statuses(): - cutoff_time = datetime.datetime.utcnow() - datetime.timedelta(hours=24) +def get_mirror_statuses(cutoff=default_cutoff): + cutoff_time = datetime.datetime.utcnow() - cutoff protocols = MirrorProtocol.objects.exclude(protocol__iexact='rsync') # I swear, this actually has decent performance... urls = MirrorUrl.objects.select_related('mirror', 'protocol').filter( @@ -41,11 +42,29 @@ def get_mirror_statuses(): else: url.delay = None url.score = None - return urls + + if urls: + last_check = max([u.last_check for u in urls]) + num_checks = max([u.check_count for u in urls]) + check_info = MirrorLog.objects.filter( + check_time__gte=cutoff_time).aggregate( + mn=Min('check_time'), mx=Max('check_time')) + check_frequency = (check_info['mx'] - check_info['mn']) / num_checks + else: + last_check = None + num_checks = 0 + check_frequency = None + + return { + 'last_check': last_check, + 'num_checks': num_checks, + 'check_frequency': check_frequency, + 'urls': urls, + } @cache_function(300) -def get_mirror_errors(): - cutoff_time = datetime.datetime.utcnow() - datetime.timedelta(hours=24) +def get_mirror_errors(cutoff=default_cutoff): + cutoff_time = datetime.datetime.utcnow() - cutoff errors = MirrorLog.objects.filter( is_success=False, check_time__gte=cutoff_time, url__mirror__active=True, url__mirror__public=True).values( diff --git a/mirrors/views.py b/mirrors/views.py index 71c896df..5c157894 100644 --- a/mirrors/views.py +++ b/mirrors/views.py @@ -55,7 +55,8 @@ def find_mirrors(request, countries=None, protocols=None, use_status=False): urls = qset.order_by('mirror__country', 'mirror__name', 'url') template = 'mirrors/mirrorlist.txt' else: - scores = dict([(u.id, u.score) for u in get_mirror_statuses()]) + status_info = get_mirror_statuses() + scores = dict([(u.id, u.score) for u in status_info['urls']]) urls = [] for u in qset: u.score = scores[u.id] @@ -72,13 +73,9 @@ def find_mirrors(request, countries=None, protocols=None, use_status=False): def status(request): bad_timedelta = datetime.timedelta(days=3) - urls = get_mirror_statuses() - - if urls: - last_check = max([u.last_check for u in urls]) - else: - last_check = None + status_info = get_mirror_statuses() + urls = status_info['urls'] good_urls = [] bad_urls = [] for url in urls: @@ -88,12 +85,12 @@ def status(request): else: good_urls.append(url) - context = { - 'last_check': last_check, + context = status_info.copy() + context.update({ 'good_urls': good_urls, 'bad_urls': bad_urls, 'error_logs': get_mirror_errors(), - } + }) return direct_to_template(request, 'mirrors/status.html', context) # vim: set ts=4 sw=4 et: -- cgit v1.2.3-54-g00ecf