Add base and tracking queries

This commit is contained in:
Alejandro Avilés 2014-10-08 13:56:56 +02:00
parent 6b7288814f
commit 16ea361e18
3 changed files with 91 additions and 2 deletions

View File

@ -22,6 +22,8 @@ class PiwikPlugin(IndicoPlugin):
"""
settings_form = SettingsForm
report_script = 'index.php'
track_script = 'piwik.php'
default_settings = {
'enabled': True,
@ -86,8 +88,8 @@ class PiwikPlugin(IndicoPlugin):
tracker = PiwikQueryTrackDownload()
resource_url = request.url if isinstance(resource, LocalFile) else resource.getURL()
resource_title = resource.getFileName() if isinstance(resource, LocalFile) else resource.getURL()
log_title = 'Download - {}'.format(resource_title)
tracker.trackDownload(resource_url, log_title)
resource_title = 'Download - {}'.format(resource_title)
tracker.call(resource_url, resource_title)
blueprint = IndicoPluginBlueprint('piwik', __name__)

View File

@ -0,0 +1,57 @@
from indico_piwik import PiwikPlugin
from indico_piwik.piwik import PiwikRequest
class PiwikQueryBase(object):
"""Base Piwik query"""
def __init__(self, query_script):
self.request = PiwikRequest(server_url=PiwikPlugin.settings.get('server_api_url'),
site_id=PiwikPlugin.settings.get('site_id_events'),
query_script=query_script)
def call(self, **query_params):
return self.request.call(**query_params)
class PiwikQueryReportBase(PiwikQueryBase):
"""Base Piwik query to request reports"""
def __init__(self):
super(PiwikQueryReportBase, self).__init__(query_script=PiwikPlugin.report_script)
def call(self, date=('last7',), period='day', **query_params):
date = date[0] if len(date) == 1 else ','.join(date)
query_params.update(self.get_type_params)
return super(PiwikQueryReportBase, self).call(date=date, period=period, **query_params)
class PiwikQueryReportEventBase(PiwikQueryReportBase):
"""Base Piwik query to request reports of events and contributions"""
def __init__(self, start_date, end_date, event_id, contrib_id=None):
super(PiwikQueryReportEventBase, self).__init__()
self.start_date = start_date
self.end_date = end_date
self.conf_id = event_id
self.contrib_id = contrib_id
def call(self, **query_params):
return super(PiwikQueryReportEventBase, self).call(module='API', date=[self.start_date, self.end_date],
segmentation=self.get_segmentation(), **query_params)
def get_segmentation(self):
segmentation = {'customVariablePageName1': ('==', 'Conference'),
'customVariablePageValue1': ('==', self.event_id)}
if self.contrib_id:
segmentation['customVariablePageName2'] = ('==', 'Contribution')
segmentation['customVariablePageValue2'] = ('==', self.contrib_id)
segments = set()
for name, (equality, value) in segmentation.iteritems():
if isinstance(value, list):
value = ','.join(value)
segment = '{}{}{}'.format(name, equality, value)
segments.add(segment)
return ';'.join(segments)

View File

@ -0,0 +1,30 @@
from datetime import datetime
from urllib2 import quote
from . import PiwikQueryBase
from indico_piwik import PiwikPlugin
class PiwikQueryTrackBase(PiwikQueryBase):
"""Base class for action-tracking queries"""
def __init__(self):
super(PiwikQueryTrackBase, self).__init__(query_script=PiwikPlugin.track_script)
def call(self, action_url, action_name, **query_params):
"""Track an action in Piwik"""
dt = datetime.now()
query_params.update({'h': dt.hour, 'm': dt.minute, 's': dt.second})
super(PiwikQueryTrackBase, self).call(idsite=self.request.site_id, rec=1, url=quote(action_url),
action_name=quote(action_name), **query_params)
class PiwikQueryTrackDownload(PiwikQueryTrackBase):
def call(self, download_url, download_title):
"""Track a download in Piwik"""
if not download_url:
raise ValueError("download_url can't be empty")
if not download_title:
raise ValueError("download_title can't be empty")
super(PiwikQueryTrackDownload, self).call(action_url=download_url, action_name=download_title,
download=quote(download_url))