From: Ross Jones Date: Thu, 25 Oct 2012 19:45:27 +0000 Subject: Nicer 404 message X-Git-Url: https://maxious.lambdacomplex.org/git/?p=ckanext-ga-report.git&a=commitdiff&h=884b8ef07990ca928194f0bc78e1b8da1e441fb4 --- Nicer 404 message --- --- a/ckanext/ga_report/controller.py +++ b/ckanext/ga_report/controller.py @@ -1,6 +1,6 @@ import logging import operator -from ckan.lib.base import BaseController, c, render, request, response +from ckan.lib.base import BaseController, c, render, request, response, abort import sqlalchemy from sqlalchemy import func, cast, Integer @@ -34,7 +34,6 @@ filter(GA_Stat.period_name==month).\ order_by('GA_Stat.stat_name, GA_Stat.key').all() - response.headers['Content-disposition'] = 'attachment; filename=dgu_analytics_%s.csv' % (month) response.headers['Content-Type'] = "text/csv; charset=utf-8" writer = csv.writer(response) @@ -60,7 +59,19 @@ filter(GA_Stat.stat_name=='Totals').\ filter(GA_Stat.period_name==c.month).\ order_by('ga_stat.key').all() - c.global_totals = [(s.key, s.value) for s in entries ] + + c.global_totals = [] + for e in entries: + val = e.value + if e.key in ['Average time on site', 'Pages per visit', 'Percent new visits']: + val = "%.2f" % round(float(e.value), 2) + if e.key == 'Average time on site': + mins, secs = divmod(float(val), 60) + hours, mins = divmod(mins, 60) + val = '%02d:%02d:%02d (%s seconds) ' % (hours, mins, secs, val) + e.key = '%s *' % e.key + c.global_totals.append((e.key, val)) + keys = { 'Browser versions': 'browsers', @@ -88,35 +99,40 @@ """ def index(self): - try: - # Get the month details by fetching distinct values and determining the - # month names from the values. - c.months = _month_details(GA_Url) - # Work out which month to show, based on query params of the first item - c.month = request.params.get('month', c.months[0][0] if c.months else '') - c.month_desc = ''.join([m[1] for m in c.months if m[0]==c.month]) + # Get the month details by fetching distinct values and determining the + # month names from the values. + c.months = _month_details(GA_Url) - connection = model.Session.connection() - q = """ - select department_id, sum(pageviews::int) views, sum(visitors::int) visits - from ga_url - where department_id <> '' - and not url like '/publisher/%%' - and period_name=%s - group by department_id order by views desc limit 20; - """ - c.top_publishers = [] - res = connection.execute(q, c.month) - for row in res: - c.top_publishers.append((model.Group.get(row[0]), row[1], row[2])) - except Exception as e: - raise e + # Work out which month to show, based on query params of the first item + c.month = request.params.get('month', c.months[0][0] if c.months else '') + c.month_desc = ''.join([m[1] for m in c.months if m[0]==c.month]) + + connection = model.Session.connection() + q = """ + select department_id, sum(pageviews::int) views, sum(visitors::int) visits + from ga_url + where department_id <> '' + and period_name=%s + group by department_id order by views desc limit 20; + """ + # Add this back (before and period_name =%s) if you want to ignore publisher + # homepage views + # and not url like '/publisher/%%' + + c.top_publishers = [] + res = connection.execute(q, c.month) + for row in res: + c.top_publishers.append((model.Group.get(row[0]), row[1], row[2])) + return render('ga_report/publisher/index.html') def read(self, id): + c.publisher = model.Group.get(id) + if not c.publisher: + abort(404, 'A publisher with that name could not be found') c.top_packages = [] # package, dataset_views in c.top_packages # Get the month details by fetching distinct values and determining the --- a/ckanext/ga_report/plugin.py +++ b/ckanext/ga_report/plugin.py @@ -18,7 +18,7 @@ def after_map(self, map): map.connect( - '/data/analytics/publisher/', + '/data/analytics/publisher', controller='ckanext.ga_report.controller:GaPublisherReport', action='index' ) @@ -33,7 +33,7 @@ action='index' ) map.connect( - '/data/analytics_{month}.csv', + '/data/analytics/data_{month}.csv', controller='ckanext.ga_report.controller:GaReport', action='csv' ) --- a/ckanext/ga_report/templates/ga_report/publisher/index.html +++ b/ckanext/ga_report/templates/ga_report/publisher/index.html @@ -8,6 +8,7 @@
  • Publishers

    +

    The table shows the top 20 publishers as recorded by page views of datasets owned by that publisher, and the number of visits to each publisher's home page.

  • --- a/ckanext/ga_report/templates/ga_report/publisher/read.html +++ b/ckanext/ga_report/templates/ga_report/publisher/read.html @@ -15,9 +15,8 @@ As well as showing the number of views within ${c.month_desc}, it will also show the number of visitors that viewed each dataset.

    -

    The dataset list page for ${c.publisher.title} was viewed ${c.publisher_page_views} times during ${c.month_desc}

    -

    +

    View the publishers leaderboard

    --- a/ckanext/ga_report/templates/ga_report/site/index.html +++ b/ckanext/ga_report/templates/ga_report/site/index.html @@ -50,6 +50,8 @@ + +

    * Values are rounded up to 2 decimal places.