2022-05-06 20:50:26 +02:00
|
|
|
from __future__ import absolute_import
|
|
|
|
|
|
|
|
import ckan.plugins.toolkit as tk
|
|
|
|
from ckan.logic import validate
|
|
|
|
|
|
|
|
from . import schema
|
2022-09-09 16:47:05 +02:00
|
|
|
from .. import utils, config
|
2022-05-06 20:50:26 +02:00
|
|
|
from ..model import PackageStats, ResourceStats
|
2022-05-07 00:59:15 +02:00
|
|
|
from ..ga_auth import init_service, get_profile_id
|
2022-05-06 20:50:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
def get_actions():
|
|
|
|
return dict(
|
2022-05-07 00:59:15 +02:00
|
|
|
googleanalytics_package_stats_show=package_stats_show,
|
|
|
|
googleanalytics_resource_stats_show=resource_stats_show,
|
|
|
|
googleanalytics_event_report=event_report,
|
2022-05-06 20:50:26 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2022-05-07 00:59:15 +02:00
|
|
|
@validate(schema.package_stats_show)
|
2022-05-06 20:50:26 +02:00
|
|
|
@tk.side_effect_free
|
2022-05-07 00:59:15 +02:00
|
|
|
def package_stats_show(context, data_dict):
|
2022-05-06 20:50:26 +02:00
|
|
|
tk.check_access("googleanalytics_package_stats_show", context, data_dict)
|
|
|
|
rec = (
|
|
|
|
context["session"]
|
|
|
|
.query(PackageStats)
|
|
|
|
.filter(PackageStats.package_id == data_dict["id"])
|
|
|
|
.one_or_none()
|
|
|
|
)
|
|
|
|
|
|
|
|
if not rec:
|
|
|
|
raise tk.ObjectNotFound()
|
|
|
|
|
|
|
|
return rec.for_json(context)
|
|
|
|
|
|
|
|
|
2022-05-07 00:59:15 +02:00
|
|
|
@validate(schema.resource_stats_show)
|
2022-05-06 20:50:26 +02:00
|
|
|
@tk.side_effect_free
|
2022-05-07 00:59:15 +02:00
|
|
|
def resource_stats_show(context, data_dict):
|
2022-05-06 20:50:26 +02:00
|
|
|
tk.check_access("googleanalytics_resource_stats_show", context, data_dict)
|
|
|
|
rec = (
|
|
|
|
context["session"]
|
|
|
|
.query(ResourceStats)
|
|
|
|
.filter(ResourceStats.resource_id == data_dict["id"])
|
|
|
|
.one_or_none()
|
|
|
|
)
|
|
|
|
|
|
|
|
if not rec:
|
|
|
|
raise tk.ObjectNotFound()
|
|
|
|
|
|
|
|
return rec.for_json(context)
|
2022-05-07 00:59:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
@validate(schema.event_report)
|
|
|
|
@tk.side_effect_free
|
|
|
|
def event_report(context, data_dict):
|
|
|
|
tk.check_access("sysadmin", context, data_dict)
|
|
|
|
|
2022-09-09 16:47:05 +02:00
|
|
|
se = init_service(config.credentials())
|
2022-05-07 01:07:23 +02:00
|
|
|
filters = []
|
|
|
|
if "action" in data_dict:
|
|
|
|
filters.append(
|
|
|
|
"ga:eventAction=={action}".format(action=data_dict["action"])
|
|
|
|
)
|
|
|
|
|
|
|
|
if "category" in data_dict:
|
|
|
|
filters.append(
|
|
|
|
"ga:eventCategory=={category}".format(
|
|
|
|
category=data_dict["category"]
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
2022-05-07 00:59:15 +02:00
|
|
|
if "label" in data_dict:
|
2022-05-07 01:07:23 +02:00
|
|
|
filters.append(
|
|
|
|
"ga:eventLabel=={label}".format(label=data_dict["label"])
|
|
|
|
)
|
2022-05-07 00:59:15 +02:00
|
|
|
|
|
|
|
report = (
|
|
|
|
se.data()
|
|
|
|
.ga()
|
|
|
|
.get(
|
|
|
|
ids="ga:{id}".format(id=get_profile_id(se)),
|
|
|
|
dimensions=",".join(data_dict["dimensions"]),
|
|
|
|
metrics=",".join(data_dict["metrics"]),
|
|
|
|
start_date=data_dict["start_date"].date().isoformat(),
|
|
|
|
end_date=data_dict["end_date"].date().isoformat(),
|
2022-05-07 01:07:23 +02:00
|
|
|
filters=";".join(filters) or None,
|
2022-05-07 00:59:15 +02:00
|
|
|
)
|
|
|
|
.execute()
|
|
|
|
)
|
|
|
|
|
|
|
|
return {
|
|
|
|
"headers": [h["name"] for h in report["columnHeaders"]],
|
2022-05-08 03:22:12 +02:00
|
|
|
"rows": report.get("rows", []),
|
2022-05-07 00:59:15 +02:00
|
|
|
}
|