Move API google analytics and AGLS metadata to seperate extensions
[ckanext-datagovau.git] / ckanext / datagovau / controller.py
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
83
84
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
from webob.multidict import UnicodeMultiDict
from paste.util.multidict import MultiDict
 
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)