summaryrefslogtreecommitdiffstats
path: root/mirrors
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2013-12-01 18:42:25 +0100
committerDan McGee <dan@archlinux.org>2013-12-14 17:53:04 +0100
commitecece25814042d262bb7a102b9cbe48fc9c87db4 (patch)
tree63b4706a97a637cc4fa59cfc2b64ed5e4a3a9c6b /mirrors
parent3b1b677b49af194313da766579e9fa1a021afd84 (diff)
downloadarchweb-ecece25814042d262bb7a102b9cbe48fc9c87db4.tar.gz
archweb-ecece25814042d262bb7a102b9cbe48fc9c87db4.tar.xz
Show all mirror status data to authorized users
Regardless of whether the mirror URL is active or not, we often have data we can show the end user, especially if mirror admins care to see the data we've been gathering. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'mirrors')
-rw-r--r--mirrors/utils.py20
-rw-r--r--mirrors/views.py18
2 files changed, 24 insertions, 14 deletions
diff --git a/mirrors/utils.py b/mirrors/utils.py
index 633731a..9f40bca 100644
--- a/mirrors/utils.py
+++ b/mirrors/utils.py
@@ -113,18 +113,17 @@ def annotate_url(url, url_data):
url.score = (hours + url.duration_avg + stddev) / divisor
-def get_mirror_statuses(cutoff=DEFAULT_CUTOFF, mirror_id=None):
+def get_mirror_statuses(cutoff=DEFAULT_CUTOFF, mirror_id=None, show_all=False):
cutoff_time = now() - cutoff
- # TODO: this prevents grabbing data points from any mirror that was active,
- # receiving checks, and then marked private. we can probably be smarter and
- # filter the data later?
- valid_urls = MirrorUrl.objects.filter(active=True,
- mirror__active=True, mirror__public=True,
+ valid_urls = MirrorUrl.objects.filter(
logs__check_time__gte=cutoff_time).distinct()
if mirror_id:
valid_urls = valid_urls.filter(mirror_id=mirror_id)
+ if not show_all:
+ valid_urls = valid_urls.filter(active=True, mirror__active=True,
+ mirror__public=True)
url_data = status_data(cutoff_time, mirror_id)
urls = MirrorUrl.objects.select_related('mirror', 'protocol').filter(
@@ -159,11 +158,11 @@ def get_mirror_statuses(cutoff=DEFAULT_CUTOFF, mirror_id=None):
}
-def get_mirror_errors(cutoff=DEFAULT_CUTOFF, mirror_id=None):
+def get_mirror_errors(cutoff=DEFAULT_CUTOFF, mirror_id=None, show_all=False):
cutoff_time = now() - cutoff
errors = MirrorLog.objects.filter(
- is_success=False, check_time__gte=cutoff_time, url__active=True,
- url__mirror__active=True, url__mirror__public=True).values(
+ is_success=False, check_time__gte=cutoff_time,
+ url__mirror__public=True).values(
'url__url', 'url__country', 'url__protocol__protocol',
'url__mirror__tier', 'error').annotate(
error_count=Count('error'), last_occurred=Max('check_time')
@@ -171,6 +170,9 @@ def get_mirror_errors(cutoff=DEFAULT_CUTOFF, mirror_id=None):
if mirror_id:
errors = errors.filter(url__mirror_id=mirror_id)
+ if not show_all:
+ errors = errors.filter(url__active=True, url__mirror__active=True,
+ url__mirror__public=True)
errors = list(errors)
for err in errors:
diff --git a/mirrors/views.py b/mirrors/views.py
index ec05669..9e05e5f 100644
--- a/mirrors/views.py
+++ b/mirrors/views.py
@@ -153,15 +153,20 @@ def mirrors(request):
def mirror_details(request, name):
mirror = get_object_or_404(Mirror, name=name)
- if not request.user.is_authenticated() and \
+ authorized = request.user.is_authenticated()
+ if not authorized and \
(not mirror.public or not mirror.active):
raise Http404
error_cutoff = timedelta(days=7)
- status_info = get_mirror_statuses(mirror_id=mirror.id)
+ status_info = get_mirror_statuses(mirror_id=mirror.id,
+ show_all=authorized)
checked_urls = {url for url in status_info['urls'] \
if url.mirror_id == mirror.id}
- all_urls = set(mirror.urls.filter(active=True).select_related('protocol'))
+ all_urls = mirror.urls.select_related('protocol')
+ if not authorized:
+ all_urls = all_urls.filter(active=True)
+ all_urls = set(all_urls)
# Add dummy data for URLs that we haven't checked recently
other_urls = all_urls.difference(checked_urls)
for url in other_urls:
@@ -170,7 +175,8 @@ def mirror_details(request, name):
setattr(url, attr, None)
all_urls = sorted(checked_urls.union(other_urls), key=attrgetter('url'))
- error_logs = get_mirror_errors(mirror_id=mirror.id, cutoff=error_cutoff)
+ error_logs = get_mirror_errors(mirror_id=mirror.id, cutoff=error_cutoff,
+ show_all=True)
context = {
'mirror': mirror,
@@ -181,8 +187,10 @@ def mirror_details(request, name):
return render(request, 'mirrors/mirror_details.html', context)
def mirror_details_json(request, name):
+ authorized = request.user.is_authenticated()
mirror = get_object_or_404(Mirror, name=name)
- status_info = get_mirror_statuses(mirror_id=mirror.id)
+ status_info = get_mirror_statuses(mirror_id=mirror.id,
+ show_all=authorized)
data = status_info.copy()
data['version'] = 3
to_json = json.dumps(data, ensure_ascii=False,