diff options
author | Dan McGee <dan@archlinux.org> | 2012-04-27 09:24:34 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-04-27 09:24:34 -0500 |
commit | 80e7d19726a95b40727b7f35b9ad80b436b14b93 (patch) | |
tree | 12ba9aa51efb35c3b2bc91cd09913eff3829e5fb | |
parent | 4e1e28729f97eb694cdcae2f3fe51b5178963069 (diff) |
Dev dashboard performance improvement
Rather than one query per cell in the arches and repos statistics
tables, we can group these together up front using Django annotations.
This means we only need one query per table.
In my local instance with all of the staging repos imported, this
reduces the total query count on this page from 56 to 26, a rather
marked improvement.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | devel/views.py | 15 | ||||
-rw-r--r-- | templates/devel/index.html | 8 |
2 files changed, 14 insertions, 9 deletions
diff --git a/devel/views.py b/devel/views.py index 39f28a65..cf0d8ad2 100644 --- a/devel/views.py +++ b/devel/views.py @@ -13,7 +13,7 @@ from django.contrib.auth.models import User, Group from django.contrib.sites.models import Site from django.core.mail import send_mail from django.db import transaction -from django.db.models import F +from django.db.models import F, Count from django.http import Http404 from django.shortcuts import get_object_or_404 from django.template import loader, Context @@ -54,6 +54,11 @@ def index(request): signoffs = sorted(get_signoff_groups(user=request.user), key=operator.attrgetter('pkgbase')) + arches = Arch.objects.all().annotate( + total_ct=Count('packages'), flagged_ct=Count('packages__flag_date')) + repos = Repo.objects.all().annotate( + total_ct=Count('packages'), flagged_ct=Count('packages__flag_date')) + maintainers = get_annotated_maintainers() maintained = PackageRelation.objects.filter( @@ -70,12 +75,12 @@ def index(request): page_dict = { 'todos': todolists, - 'repos': Repo.objects.all(), - 'arches': Arch.objects.all(), + 'arches': arches, + 'repos': repos, 'maintainers': maintainers, 'orphan': orphan, - 'flagged' : flagged, - 'todopkgs' : todopkgs, + 'flagged': flagged, + 'todopkgs': todopkgs, 'signoffs': signoffs } diff --git a/templates/devel/index.html b/templates/devel/index.html index a0ccb91f..c67cf277 100644 --- a/templates/devel/index.html +++ b/templates/devel/index.html @@ -194,10 +194,10 @@ <td>{{ arch.name }}</td> <td><a href="/packages/?arch={{ arch.name }}" title="View all packages for the {{ arch.name }} architecture"> - <strong>{{ arch.packages.count }}</strong> packages</a></td> + <strong>{{ arch.total_ct }}</strong> packages</a></td> <td><a href="/packages/?arch={{ arch.name }}&flagged=Flagged" title="View all flagged packages for the {{ arch.name }} architecture"> - <strong>{{ arch.packages.flagged.count }}</strong> packages</a></td> + <strong>{{ arch.flagged_ct }}</strong> packages</a></td> </tr> {% endfor %} </tbody> @@ -224,10 +224,10 @@ <td>{{ repo.name }}</td> <td><a href="/packages/?repo={{ repo.name }}" title="View all packages in the {{ repo.name }} repository"> - <strong>{{ repo.packages.count }}</strong> packages</a></td> + <strong>{{ repo.total_ct }}</strong> packages</a></td> <td><a href="/packages/?repo={{ repo.name }}&flagged=Flagged" title="View all flagged packages in the {{ repo.name }} repository"> - <strong>{{ repo.packages.flagged.count }}</strong> packages</a></td> + <strong>{{ repo.flagged_ct }}</strong> packages</a></td> </tr> {% endfor %} </tbody> |