summaryrefslogtreecommitdiffstats
path: root/mirrors
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2010-09-23 10:33:32 -0500
committerDan McGee <dan@archlinux.org>2010-09-24 19:39:36 -0500
commit10fca8281663d45c08367f9d5e351c66b670d773 (patch)
tree37c55a3c550f7397073c228380f6f8f17ad123be /mirrors
parente82e953aa297f1e54d0aff9b2097aaab6d58d0ba (diff)
downloadarchweb-10fca8281663d45c08367f9d5e351c66b670d773.tar.gz
archweb-10fca8281663d45c08367f9d5e351c66b670d773.zip
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 <dan@archlinux.org>
Diffstat (limited to 'mirrors')
-rw-r--r--mirrors/utils.py29
-rw-r--r--mirrors/views.py17
2 files changed, 31 insertions, 15 deletions
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 @@ from .models import MirrorLog, MirrorProtocol, MirrorUrl
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: