1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | import urllib import json from pprint import pprint import logging import ckan.logic as logic import hashlib import threading from ckan.common import _, c, request, response from pylons import config log = logging.getLogger(__name__) from ckan.controllers.api import ApiController class DGAApiController(ApiController): def _post_analytics(self,user,request_obj_type,request_function,request_id): if (config.get('googleanalytics.id') != None): data = urllib.urlencode({ "v":1, "tid":config.get('googleanalytics.id'), "cid":hashlib.md5(user).hexdigest(), "t":"event", "dh":c.environ['HTTP_HOST'], "dp":c.environ['PATH_INFO'], "dr":c.environ.get('HTTP_REFERER',''), "ec":"CKAN API Request", "ea":request_obj_type+request_function, "el":request_id, }) log.debug("Sending API Analytics Data: "+data) # send analytics asynchronously threading.Thread(target=urllib.urlopen,args=("http://www.google-analytics.com/collect", data)).start() def action(self, logic_function, ver=None): try: function = logic.get_action(logic_function) except Exception,e: log.debug(e) pass try: side_effect_free = getattr(function, 'side_effect_free', False) request_data = self._get_request_data(try_url_params=side_effect_free) if isinstance(request_data, dict): id = request_data.get('id','') if 'q' in request_data.keys(): id = request_data['q'] if 'query' in request_data.keys(): id = request_data['query'] self._post_analytics(c.user,logic_function,'', id) except Exception,e: print log.debug(e) pass return ApiController.action(self,logic_function, ver) def list(self, ver=None, register=None, subregister=None, id=None): self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"list",id) return ApiController.list(self,ver, register, subregister, id) def show(self, ver=None, register=None, subregister=None, id=None, id2=None): self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"show",id) return ApiController.show(self,ver, register, subregister, id,id2) def update(self, ver=None, register=None, subregister=None, id=None, id2=None): self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"update",id) return ApiController.update(self,ver, register, subregister, id,id2) def delete(self, ver=None, register=None, subregister=None, id=None, id2=None): self._post_analytics(c.user,register+("_"+str(subregister) if subregister else ""),"delete",id) return ApiController.delete(self,ver, register, subregister, id,id2) def search(self, ver=None, register=None): id = None try: params = MultiDict(self._get_search_params(request.params)) if 'q' in params.keys(): id = params['q'] if 'query' in params.keys(): id = params['query'] except ValueError, e: print str(e) pass self._post_analytics(c.user,register,"search",id) |