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>
This commit is contained in:
Dan McGee 2010-09-23 10:33:32 -05:00
parent e82e953aa2
commit 10fca82816
3 changed files with 38 additions and 19 deletions

View File

@ -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(

View File

@ -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:

View File

@ -1,4 +1,5 @@
{% extends "base.html" %}
{% load mirror_status %}
{% block title %}Arch Linux - Mirror Status{% endblock %}
@ -21,7 +22,7 @@ <h2>Mirror Status</h2>
retrieved or contained data we didn't recognize, this column will show
'unknown'.</li>
<li><em>μ Delay:</em> The calculated average mirroring delay; e.g. the
mean value of <code>last check last sync</code> for each check of
mean value of <tt>last check last sync</tt> for each check of
this mirror URL.</li>
<li><em>μ Duration:</em> The average (mean) time it took to connect and
retrieve the <tt>lastsync</tt> file from the given URL. Note that this
@ -31,8 +32,8 @@ <h2>Mirror Status</h2>
retrieval time. A high standard deviation can indicate an unstable or
overloaded mirror.</li>
<li><em>Mirror Score:</em> A very rough calculation for ranking
mirrors. It is currently calculated as <code>hours delay + average
duration + standard deviation</code>. Lower is better.</li>
mirrors. It is currently calculated as <tt>hours delay + average
duration + standard deviation</tt>. Lower is better.</li>
</ul>
<p>The final table on this page is an error log, which shows any errors
that occurred while contacting mirrors. This only shows errors that
@ -43,7 +44,9 @@ <h2>Mirror Status</h2>
<li><a href="#errorlog">Mirror Syncing Error Log</a></li>
</ul>
<p>The last mirror check ran at {{ last_check|date:'Y-m-d H:i' }} UTC.</p>
<p>The last mirror check ran at {{ last_check|date:'Y-m-d H:i' }} UTC.
Checks have ran {{ num_checks }} times in the last 24 hours at an average
interval of {{ check_frequency|duration }} (hh:mm).</p>
<a name="outofsync" id="outofsync"></a>
<h3>Out of Sync Mirrors</h3>