示例#1
0
    def action(self, logic_function, ver=None):
        try:
            function = logic.get_action(logic_function)
            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", False)
                resource_id = request_data.get("resource_id", False)
                package_id = request_data.get("resource", {}).get("package_id", False)
                package_id = request_data.get("package_id", package_id)

                if "q" in request_data:
                    id = request_data["q"]
                if "sql" in request_data:
                    id = request_data["sql"]
                if "query" in request_data:
                    id = request_data["query"]
                self._post_analytics(c.user, logic_function, "", [
                                     id, resource_id, package_id])
        except Exception as e:
            log.debug(e)
            pass
        return ApiController.action(self, logic_function, ver)
示例#2
0
    def action(self, api_action, ver=None):
        try:
            request_data = self._get_action_request_data(api_action)
            parameter_value = self._get_parameter_value(request_data)
            capture_api_actions = ga_api_actions.GoogleAnalyticsPlugin.capture_api_actions
            event_action = ''
            event_label = ''

            # Only send api actions if it is in the capture_api_actions dictionary
            if api_action in capture_api_actions:
                capture_api_action = capture_api_actions.get(api_action)
                event_action = capture_api_action['action'].format(api_action)
                event_label = capture_api_action['label'].format(
                    parameter_value)
            # If catch_all_api_actions is True send api action
            elif ga_api_actions.GoogleAnalyticsPlugin.catch_all_api_actions:
                event_action = api_action
                event_label = parameter_value

            # Only send to google analytics if event_action is set to reduce noise
            if event_action:
                self._post_analytics(c.user, event_action, event_label)

        except Exception as e:
            log.debug(e)
            pass

        return ApiController.action(self, api_action, ver)
 def action(self, logic_function, ver=None):
     if c.environ['SERVER_NAME'] not in ('localhost', '127.0.0.1', '::1'):
         request_query = c.environ.get('paste.parsed_dict_querystring', ({},))[0]
         request_id = request_query.get('query', request_query.get('q', ''))
         request_description = "CKAN API Request"
         _post_analytics(c.user or 'anonymous', 'action', logic_function, request_description, request_id)
     return ApiController.action(self, logic_function, ver)
示例#4
0
    def action(self, api_action, ver=None):
        try:
            function = toolkit.get_action(api_action)
            side_effect_free = getattr(function, 'side_effect_free', False)
            request_data = self._get_request_data(
                try_url_params=side_effect_free)

            capture_api_actions = plugin.GoogleAnalyticsPlugin.capture_api_actions

            # Only send api actions if it is in the capture_api_actions dictionary
            if api_action in capture_api_actions and isinstance(
                    request_data, dict):
                api_action_label = capture_api_actions.get(api_action)

                parameter_value = request_data.get('id', '')
                if parameter_value == '' and 'resource_id' in request_data:
                    parameter_value = request_data['resource_id']
                if parameter_value == '' and 'q' in request_data:
                    parameter_value = request_data['q']
                if parameter_value == '' and 'query' in request_data:
                    parameter_value = request_data['query']
                if parameter_value == '' and 'sql' in request_data:
                    parameter_value = self._alter_sql(request_data['sql'])

                event_action = "{0} - {1}".format(
                    api_action, c.environ['PATH_INFO'].replace('/api/3/', ''))
                event_label = api_action_label.format(parameter_value)
                self._post_analytics(c.user, event_action, event_label,
                                     request_data)
        except Exception as e:
            log.debug(e)
            pass

        return ApiController.action(self, api_action, ver)
 def action(self, logic_function, ver=None):
     #Create the normal CKAN API Controller
     apiController = CKANApiController()
     #Calls function "action" of the CKAN controller and gets the result
     res = apiController.action(logic_function, ver)
     #Patch the JSON so we remove the urls
     toolkit.response.content_type = 'application/json'
     return pathJSON(res)
示例#6
0
 def action(self, logic_function, ver=None):
     #Create the normal CKAN API Controller
     apiController = CKANApiController()
     #Calls function "action" of the CKAN controller and gets the result
     res = apiController.action(logic_function,ver)
     #Patch the JSON so we remove the urls
     toolkit.response.content_type = 'application/json'
     return pathJSON(res)
class GAApiController(ApiController):
    # 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 API Request",
                "ea": request_obj_type + request_function,
                "el": request_id,
            }

            try:
                if converters.asbool(
                        config.get('googleanalytics.activities_tracker',
                                   False)) == True:
                    context = {
                        'model': model,
                        'session': model.Session,
                        'user': c.user
                    }
                    data = {
                        'resource_id': request_id,
                        'event': request_function,
                        'obj_type': request_obj_type,
                    }
                    logic.get_action('resource_tracker_create')(context, data)
            except:
                pass
            plugin.GoogleAnalyticsPlugin.analytics_queue.put(data_dict)

    def action(self, logic_function, ver=None):
        try:
            function = logic.get_action(logic_function)
            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:
                    id = request_data['q']
                if 'query' in request_data:
                    id = request_data['query']
                self._post_analytics(c.user, logic_function, '', id)
        except Exception, e:
            log.debug(e)
            pass

        return ApiController.action(self, logic_function, ver)
示例#8
0
class CscGAApiController(ApiController):
    # 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 API Request",
                "ea": request_obj_type + request_function,
                "el": request_id,
            }
            plugin.CscGAPlugin.analytics_queue.put(data_dict)

    def action(self, logic_function, ver=None):
        try:
            function = get_action(logic_function)
            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:
                    id = request_data['q']
                if 'query' in request_data:
                    id = request_data['query']
                self._post_analytics(c.user, logic_function, '', id)
        except Exception, e:
            log.debug(e)
            pass

        return ApiController.action(self, logic_function, ver)