From: Ross Jones Date: Tue, 30 Oct 2012 13:38:23 +0000 Subject: Added a link to the publisher statistics X-Git-Url: http://maxious.lambdacomplex.org/git/?p=ckanext-ga-report.git&a=commitdiff&h=39f59ee1939d61a49e6dcc300d0652ba1d6f4f6a --- Added a link to the publisher statistics --- --- 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 @@ -59,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', @@ -101,10 +113,13 @@ 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; """ + # 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: @@ -114,7 +129,10 @@ 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 --- /dev/null +++ b/ckanext/ga_report/helpers.py @@ -1,1 +1,41 @@ +import logging +import operator +import ckan.lib.base as base +import ckan.model as model +_log = logging.getLogger(__name__) + +def most_popular_datasets(publisher, count=20): + from ckanext.ga_report.ga_model import GA_Url + + if not publisher: + _log.error("No valid publisher passed to 'most_popular_datasets'") + return "" + + datasets = {} + entries = model.Session.query(GA_Url).\ + filter(GA_Url.department_id==publisher.name).\ + filter(GA_Url.url.like('/dataset/%')).\ + order_by('ga_url.pageviews::int desc')[:count] + for entry in entries: + p = model.Package.get(entry.url[len('/dataset/'):]) + if not p in datasets: + datasets[p] = {'views':0, 'visits': 0} + datasets[p]['views'] = datasets[p]['views'] + int(entry.pageviews) + datasets[p]['visits'] = datasets[p]['visits'] + int(entry.visitors) + + results = [] + for k, v in datasets.iteritems(): + results.append((k,v['views'],v['visits'])) + + results = sorted(results, key=operator.itemgetter(1), reverse=True) + + ctx = { + 'dataset_count': len(datasets), + 'datasets': results, + + 'publisher': publisher + } + + return base.render_snippet('ga_report/publisher/popular.html', **ctx) + --- a/ckanext/ga_report/plugin.py +++ b/ckanext/ga_report/plugin.py @@ -2,19 +2,28 @@ import ckan.lib.helpers as h import ckan.plugins as p from ckan.plugins import implements, toolkit -#import gasnippet -#import commands -#import dbutil log = logging.getLogger('ckanext.ga-report') class GAReportPlugin(p.SingletonPlugin): implements(p.IConfigurer, inherit=True) implements(p.IRoutes, inherit=True) + implements(p.ITemplateHelpers, inherit=True) def update_config(self, config): toolkit.add_template_directory(config, 'templates') toolkit.add_public_directory(config, 'public') + + def get_helpers(self): + """ + A dictionary of extra helpers that will be available to provide + ga report info to templates. + """ + from ckanext.ga_report.helpers import most_popular_datasets + return { + 'ga_report_installed': lambda: True, + 'most_popular_datasets': most_popular_datasets, + } def after_map(self, map): map.connect( --- 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.

  • --- /dev/null +++ b/ckanext/ga_report/templates/ga_report/publisher/popular.html @@ -1,1 +1,26 @@ + + +

    We do not currently have analytics data for ${publisher.title}

    +
    + + + + + + + + --- a/ckanext/ga_report/templates/ga_report/publisher/read.html +++ b/ckanext/ga_report/templates/ga_report/publisher/read.html @@ -6,6 +6,7 @@ Analytics for ${g.site_title} +
  • ${c.publisher.title}

    --- a/ckanext/ga_report/templates/ga_report/site/index.html +++ b/ckanext/ga_report/templates/ga_report/site/index.html @@ -9,6 +9,10 @@

  • Statistics

    It is possible to export the analytics data as a CSV file, which contains all of the information for ${c.month_desc}

    +
  • +
  • +

    Publisher statistics

    +

    You can view statistics about specific publishers at the Publisher Analytics page

  • @@ -50,6 +54,8 @@ + +

    * Values are rounded up to 2 decimal places.