2019-11-22 16:02:26 +01:00
|
|
|
from __future__ import absolute_import
|
2020-11-13 01:12:34 +01:00
|
|
|
|
2011-04-04 18:44:39 +02:00
|
|
|
import logging
|
2014-11-05 02:43:24 +01:00
|
|
|
from ckan.lib.base import BaseController, c, render, request
|
2019-11-22 16:02:26 +01:00
|
|
|
from . import dbutil
|
2011-02-11 12:21:19 +01:00
|
|
|
|
2013-10-19 17:04:28 +02:00
|
|
|
import hashlib
|
2019-11-22 16:02:26 +01:00
|
|
|
from . import plugin
|
2013-10-19 17:04:28 +02:00
|
|
|
|
|
|
|
from paste.util.multidict import MultiDict
|
|
|
|
|
|
|
|
from ckan.controllers.api import ApiController
|
|
|
|
|
2020-11-13 01:12:34 +01:00
|
|
|
import ckan.plugins.toolkit as tk
|
2022-09-09 16:47:05 +02:00
|
|
|
from ckanext.googleanalytics import config
|
2021-08-13 11:25:03 +02:00
|
|
|
|
2020-11-13 01:12:34 +01:00
|
|
|
|
2019-11-22 15:59:22 +01:00
|
|
|
log = logging.getLogger("ckanext.googleanalytics")
|
2011-02-11 12:21:19 +01:00
|
|
|
|
2014-11-05 02:43:24 +01:00
|
|
|
|
2011-02-11 12:21:19 +01:00
|
|
|
class GAController(BaseController):
|
|
|
|
def view(self):
|
|
|
|
# get package objects corresponding to popular GA content
|
2011-04-05 11:38:25 +02:00
|
|
|
c.top_resources = dbutil.get_top_resources(limit=10)
|
2019-11-22 15:59:22 +01:00
|
|
|
return render("summary.html")
|
2013-10-19 17:04:28 +02:00
|
|
|
|
2014-11-05 02:43:24 +01:00
|
|
|
|
2013-10-19 17:04:28 +02:00
|
|
|
class GAApiController(ApiController):
|
|
|
|
# intercept API calls to record via google analytics
|
2014-11-05 02:43:24 +01:00
|
|
|
def _post_analytics(
|
2019-11-22 15:59:22 +01:00
|
|
|
self, user, request_obj_type, request_function, request_id
|
|
|
|
):
|
2022-05-06 18:01:29 +02:00
|
|
|
data_dict = {
|
|
|
|
"v": 1,
|
2022-09-09 16:47:05 +02:00
|
|
|
"tid": config.tracking_id(),
|
2022-05-06 18:01:29 +02:00
|
|
|
"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.GoogleAnalyticsPlugin.analytics_queue.put(data_dict)
|
2013-10-19 17:04:28 +02:00
|
|
|
|
|
|
|
def action(self, logic_function, ver=None):
|
|
|
|
try:
|
2022-05-30 10:12:52 +02:00
|
|
|
function = tk.get_action(logic_function)
|
2019-11-22 15:59:22 +01:00
|
|
|
side_effect_free = getattr(function, "side_effect_free", False)
|
2014-11-05 02:43:24 +01:00
|
|
|
request_data = self._get_request_data(
|
2019-11-22 15:59:22 +01:00
|
|
|
try_url_params=side_effect_free
|
|
|
|
)
|
2014-11-05 02:43:24 +01:00
|
|
|
if isinstance(request_data, dict):
|
2019-11-22 15:59:22 +01:00
|
|
|
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)
|
2019-11-22 16:02:26 +01:00
|
|
|
except Exception as e:
|
2014-11-05 02:43:24 +01:00
|
|
|
log.debug(e)
|
|
|
|
pass
|
|
|
|
return ApiController.action(self, logic_function, ver)
|
|
|
|
|
2019-11-22 15:59:22 +01:00
|
|
|
def list(self, ver=None, register=None, subregister=None, id=None):
|
|
|
|
self._post_analytics(
|
|
|
|
c.user,
|
|
|
|
register + ("_" + str(subregister) if subregister else ""),
|
|
|
|
"list",
|
|
|
|
id,
|
|
|
|
)
|
2014-11-05 02:43:24 +01:00
|
|
|
return ApiController.list(self, ver, register, subregister, id)
|
|
|
|
|
2019-11-22 15:59:22 +01:00
|
|
|
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,
|
|
|
|
)
|
2014-11-05 02:43:24 +01:00
|
|
|
return ApiController.show(self, ver, register, subregister, id, id2)
|
|
|
|
|
2019-11-22 15:59:22 +01:00
|
|
|
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,
|
|
|
|
)
|
2014-11-05 02:43:24 +01:00
|
|
|
return ApiController.update(self, ver, register, subregister, id, id2)
|
|
|
|
|
2019-11-22 15:59:22 +01:00
|
|
|
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,
|
|
|
|
)
|
2014-11-05 02:43:24 +01:00
|
|
|
return ApiController.delete(self, ver, register, subregister, id, id2)
|
|
|
|
|
2013-10-19 17:04:28 +02:00
|
|
|
def search(self, ver=None, register=None):
|
|
|
|
id = None
|
|
|
|
try:
|
|
|
|
params = MultiDict(self._get_search_params(request.params))
|
2019-11-22 16:02:26 +01:00
|
|
|
if "q" in list(params.keys()):
|
2019-11-22 15:59:22 +01:00
|
|
|
id = params["q"]
|
2019-11-22 16:02:26 +01:00
|
|
|
if "query" in list(params.keys()):
|
2019-11-22 15:59:22 +01:00
|
|
|
id = params["query"]
|
2019-11-22 16:02:26 +01:00
|
|
|
except ValueError as e:
|
2014-11-05 02:43:24 +01:00
|
|
|
log.debug(str(e))
|
2013-10-19 17:04:28 +02:00
|
|
|
pass
|
2014-11-05 02:43:24 +01:00
|
|
|
self._post_analytics(c.user, register, "search", id)
|
2015-11-16 01:09:55 +01:00
|
|
|
|
2015-11-20 14:25:39 +01:00
|
|
|
return ApiController.search(self, ver, register)
|