Adding site analytics at /data/analytics
[ckanext-ga-report.git] / ckanext / ga_report / controller.py
blob:a/ckanext/ga_report/controller.py -> blob:b/ckanext/ga_report/controller.py
--- a/ckanext/ga_report/controller.py
+++ b/ckanext/ga_report/controller.py
@@ -10,10 +10,10 @@
 log = logging.getLogger('ckanext.ga-report')
 
 
-def _get_month_name(str):
+def _get_month_name(strdate):
     import calendar
     from time import strptime
-    d = strptime('2012-10', '%Y-%m')
+    d = strptime(strdate, '%Y-%m')
     return '%s %s' % (calendar.month_name[d.tm_mon], d.tm_year)
 
 
@@ -21,7 +21,7 @@
     months = []
     vals = model.Session.query(cls.period_name).distinct().all()
     for m in vals:
-        months.append( (m[0], _get_month_name(m)))
+        months.append( (m[0], _get_month_name(m[0])))
     return sorted(months, key=operator.itemgetter(0), reverse=True)
 
 
@@ -58,7 +58,8 @@
 
         entries = model.Session.query(GA_Stat).\
             filter(GA_Stat.stat_name=='Totals').\
-            filter(GA_Stat.period_name==c.month).all()
+            filter(GA_Stat.period_name==c.month).\
+            order_by('ga_stat.key').all()
         c.global_totals = [(s.key, s.value) for s in entries ]
 
         keys = {
@@ -87,28 +88,30 @@
     """
 
     def index(self):
-        # Get the month details by fetching distinct values and determining the
-        # month names from the values.
-        c.months = _month_details(GA_Url)
+        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])
+            # 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 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]))
-
+            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
         return render('ga_report/publisher/index.html')