From 0652beb2d08a3ee3fa25ddcfe695a18709703a48 Mon Sep 17 00:00:00 2001 From: joetsoi Date: Mon, 16 Nov 2015 00:09:55 +0000 Subject: [PATCH] add resource downloads --- ckanext/googleanalytics/controller.py | 27 +++++++++++++++++++++++++++ ckanext/googleanalytics/plugin.py | 6 ++++++ 2 files changed, 33 insertions(+) diff --git a/ckanext/googleanalytics/controller.py b/ckanext/googleanalytics/controller.py index e804054..93fb652 100644 --- a/ckanext/googleanalytics/controller.py +++ b/ckanext/googleanalytics/controller.py @@ -15,6 +15,7 @@ from webob.multidict import UnicodeMultiDict from paste.util.multidict import MultiDict from ckan.controllers.api import ApiController +from ckan.controolers.package import PackageController log = logging.getLogger('ckanext.googleanalytics') @@ -114,3 +115,29 @@ class GAApiController(ApiController): log.debug(str(e)) pass self._post_analytics(c.user, register, "search", id) + + +class GAResourceController(PackageController): + # intercept API calls to record via google analytics + def _post_analytics( + self, user, request_obj_type, request_function, request_id): + if config.get('googleanalytics.id'): + data_dict = { + "v": 1, + "tid": config.get('googleanalytics.id'), + "cid": hashlib.md5(user).hexdigest(), + # customer id should be obfuscated + "t": "event", + "dh": c.environ['HTTP_HOST'], + "dp": c.environ['PATH_INFO'], + "dr": c.environ.get('HTTP_REFERER', ''), + "ec": "CKAN Resource Download Request", + "ea": request_obj_type+request_function, + "el": request_id, + } + plugin.GoogleAnalyticsPlugin.analytics_queue.put(data_dict) + + def resource_download(self, id, resource_id, filename=None): + self._post_analytics(c.user, "Resource", "Download", resource_id) + return PackageController.resource_download(self, id, resource_id, + filename) diff --git a/ckanext/googleanalytics/plugin.py b/ckanext/googleanalytics/plugin.py index 7e9655d..5c3d6a1 100644 --- a/ckanext/googleanalytics/plugin.py +++ b/ckanext/googleanalytics/plugin.py @@ -155,6 +155,12 @@ class GoogleAnalyticsPlugin(p.SingletonPlugin): m.connect('/rest/{register}/{id}', action='update', conditions=POST) m.connect('/rest/{register}/{id}', action='delete', conditions=DELETE) + with SubMapper(map, controller='ckanext.googleanalytics.controller:GAResourceController') as m: + m.connect('/dataset/{id}/resource/{resource_id}/download', + action='resource_download') + m.connect('/dataset/{id}/resource/{resource_id}/download/{filename}', + action='resource_download') + return map def after_map(self, map):