Skip to content

Commit 97e2f4c

Browse files
committed
Added 'Top referrers' in overview page
1 parent 8c3de91 commit 97e2f4c

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

docs/index.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Once you have installed ``django-request`` you can add it to a django project by
3232

3333
.. note #2:
3434
Make sure that you got your domain name right in the Sites model.
35-
If it's not, the unique visits will not be calculated right.
35+
If it's not, the unique visits will not be calculated right, and top referers will not be shown correctly.
3636

3737
django-admin.py
3838
===============

request/managers.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,34 @@ def paths(self, unique=True, count=False, qs=None, limit=None):
5252

5353
return paths
5454

55+
def referrers(self, unique=True, count=False, qs=None, limit=None):
56+
# There is a slight misspelling here, referer should be referrer,
57+
# but even the http headers misspell it so I'll leave it here.
58+
if not qs:
59+
qs = self.all()
60+
61+
if count: unique = False
62+
63+
if unique:
64+
referers = set([request.referer for request in qs.only('referer')])
65+
else:
66+
referers = [request.referer for request in qs.only('referer')]
67+
68+
if count:
69+
referer_count = {}
70+
for referer in referers:
71+
referer_count[referer] = len([None for x in referers if referer == x])
72+
73+
referers = [(v, k) for k, v in referer_count.iteritems()]
74+
referers.sort()
75+
referers.reverse()
76+
referers = [(k, v) for v, k in referers]
77+
78+
if limit:
79+
referers = referers[:limit]
80+
81+
return referers
82+
5583
def year(self, year):
5684
return self.filter(time__year=year)
5785

request/templates/admin/request/overview.html

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,5 +149,22 @@
149149
{% endfor %}
150150
</table>
151151
</div>
152+
153+
<div class="module" style="clear: both; float: left; width: 450px;">
154+
<table summary="{% trans "Top referrers" %}" style="width: 100%;">
155+
<caption>{% trans "Top referrers" %}</caption>
156+
<tr>
157+
<th>{% trans "Referrer" %}</th>
158+
<th>{% trans "Hits" %}</th>
159+
</tr>
160+
{% for referrer,hits in top_referrers %}
161+
<tr>
162+
<td><a href="{{ referrer }}">{{ referrer }}</a></td>
163+
<td>{{ hits }}</td>
164+
</tr>
165+
{% endfor %}
166+
</table>
167+
</div>
168+
152169
</div>
153170
{% endblock %}

request/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def overview(request):
4141
'traffic_graph': simplejson.dumps([getattr(importlib.import_module(module_path[:module_path.rindex('.')]), module_path[module_path.rindex('.')+1:], None)(days) for module_path in settings.REQUEST_TRAFFIC_GRAPH_MODULES]),
4242
'top_paths': Request.objects.paths(count=True, limit=10, qs=Request.objects.filter(response__lt=400)),
4343
'top_error_paths': Request.objects.paths(count=True, limit=10, qs=(Request.objects.filter(response__gte=400))),
44+
'top_referrers': Request.objects.referrers(count=True, limit=10, qs=Request.objects.exclude(referer__startswith=settings.REQUEST_BASE_URL).exclude(referer='')),
4445

4546
'requests_url': '/admin/request/request/',
4647
'use_hosted_media': settings.REQUEST_USE_HOSTED_MEDIA

0 commit comments

Comments
 (0)