summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2012-03-23 17:33:48 -0500
committerDan McGee <dan@archlinux.org>2013-09-30 20:53:53 -0500
commit160e1efaadff58efbe92ed98cbec75ab04689d70 (patch)
treef28ce9684ddb0dcf6c1a9e3667e136e55e79b524
parent5a8cfb8566f8764f5ee5370a3414a3a4aafb206a (diff)
downloadarchweb-160e1efaadff58efbe92ed98cbec75ab04689d70.tar.gz
archweb-160e1efaadff58efbe92ed98cbec75ab04689d70.zip
WIP: more visualizations stuff
-rw-r--r--visualize/views.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/visualize/views.py b/visualize/views.py
index 9c537c20..1e98f0ad 100644
--- a/visualize/views.py
+++ b/visualize/views.py
@@ -1,3 +1,5 @@
+from collections import defaultdict
+from datetime import datetime
import json
from django.db.models import Count, Sum
@@ -7,6 +9,8 @@ from django.views.decorators.cache import cache_page
from main.models import Package, Arch, Repo
+from devel.models import MasterKey, PGPSignature
+from packages.models import PackageRelation
def index(request):
return render(request, 'visualize/index.html')
@@ -71,4 +75,45 @@ def by_repo(request):
to_json = json.dumps(data['by_repo'], ensure_ascii=False)
return HttpResponse(to_json, content_type='application/json')
+@cache_page(1800)
+def summary(request):
+ data = Package.objects.aggregate(total=Count('pk'), flagged=Count('flag_date'))
+ total_pkgs = data['total']
+ data['unflagged'] = total_pkgs - data['flagged']
+
+ maintained = PackageRelation.objects.filter(
+ type=PackageRelation.MAINTAINER).values('pkgbase')
+ data['orphan'] = Package.objects.exclude(pkgbase__in=maintained).count()
+ data['maintained'] = total_pkgs - data['orphan']
+
+ to_json = simplejson.dumps(data, ensure_ascii=False)
+ return HttpResponse(to_json, mimetype='application/json')
+
+
+@cache_page(1800)
+def packages(request):
+ qs = Package.objects.normal().filter(arch__name__in=('i686', 'any'))
+
+ repos = defaultdict(dict)
+ for pkg in qs:
+ values = {
+ 'arch': pkg.arch.name,
+ 'repo': pkg.repo.name,
+ 'name': pkg.pkgname,
+ 'base': pkg.pkgbase,
+ 'csize': pkg.compressed_size,
+ 'isize': pkg.installed_size,
+ 'flagged': bool(pkg.flag_date),
+ }
+ repos[pkg.repo.name].setdefault(pkg.arch.name, []).append(values)
+
+ # TODO this is totally fucked to read, but it works
+ def xform(d):
+ return [{ 'name': k, 'data': v} for k, v in d.items()]
+
+ newdata = [{ 'name': k, 'data': xform(v)} for k, v in repos.items()]
+ data = { 'name': 'Repositories', 'data': newdata }
+ to_json = simplejson.dumps(data, ensure_ascii=False)
+ return HttpResponse(to_json, mimetype='application/json')
+
# vim: set ts=4 sw=4 et: