mirror of
https://github.com/lucaspalomodevelop/indico-plugins.git
synced 2026-03-20 02:26:12 +00:00
Add base and tracking queries
This commit is contained in:
parent
6b7288814f
commit
16ea361e18
@ -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__)
|
||||
|
||||
57
piwik/indico_piwik/queries/__init__.py
Normal file
57
piwik/indico_piwik/queries/__init__.py
Normal 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)
|
||||
30
piwik/indico_piwik/queries/tracking.py
Normal file
30
piwik/indico_piwik/queries/tracking.py
Normal 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))
|
||||
Loading…
x
Reference in New Issue
Block a user