Added a helper for generating a list of all time popular datasets
[ckanext-ga-report.git] / ckanext / ga_report / helpers.py
blob:a/ckanext/ga_report/helpers.py -> blob:b/ckanext/ga_report/helpers.py
--- a/ckanext/ga_report/helpers.py
+++ b/ckanext/ga_report/helpers.py
@@ -1,1 +1,40 @@
+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)
+