diff options
author | Dan McGee <dan@archlinux.org> | 2012-03-23 17:33:48 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2013-09-30 20:53:53 -0500 |
commit | 160e1efaadff58efbe92ed98cbec75ab04689d70 (patch) | |
tree | f28ce9684ddb0dcf6c1a9e3667e136e55e79b524 | |
parent | 5a8cfb8566f8764f5ee5370a3414a3a4aafb206a (diff) | |
download | archweb-160e1efaadff58efbe92ed98cbec75ab04689d70.tar.gz archweb-160e1efaadff58efbe92ed98cbec75ab04689d70.zip |
WIP: more visualizations stuff
-rw-r--r-- | visualize/views.py | 45 |
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: |