Files
edx-platform/common/djangoapps/track/backends/django.py
2013-09-11 10:02:16 -04:00

84 lines
2.2 KiB
Python

"""
Event tracker backend that saves events to a Django database.
"""
# TODO: this module is very specific to the event schema, and is only
# brought here for legacy support. It should be updated when the
# schema changes or eventually deprecated.
from __future__ import absolute_import
import logging
from django.db import models
from track.backends import BaseBackend
log = logging.getLogger('track.backends.django')
LOGFIELDS = [
'username',
'ip',
'event_source',
'event_type',
'event',
'agent',
'page',
'time',
'host'
]
class TrackingLog(models.Model):
"""Defines the fields that are stored in the tracking log database."""
dtcreated = models.DateTimeField('creation date', auto_now_add=True)
username = models.CharField(max_length=32, blank=True)
ip = models.CharField(max_length=32, blank=True)
event_source = models.CharField(max_length=32)
event_type = models.CharField(max_length=512, blank=True)
event = models.TextField(blank=True)
agent = models.CharField(max_length=256, blank=True)
page = models.CharField(max_length=512, blank=True, null=True)
time = models.DateTimeField('event time')
host = models.CharField(max_length=64, blank=True)
class Meta:
app_label = 'track'
db_table = 'track_trackinglog'
def __unicode__(self):
fmt = (
u"[{self.time}] {self.username}@{self.ip}: "
u"{self.event_source}| {self.event_type} | "
u"{self.page} | {self.event}"
)
return fmt.format(self=self)
class DjangoBackend(BaseBackend):
"""Event tracker backend that saves to a Django database"""
def __init__(self, name='default', **options):
"""
Configure database used by the backend.
:Parameters:
- `name` is the name of the database as specified in the project
settings.
"""
super(DjangoBackend, self).__init__(**options)
self.name = name
def send(self, event):
field_values = {x: event.get(x, '') for x in LOGFIELDS}
tldat = TrackingLog(**field_values)
try:
tldat.save(using=self.name)
except Exception as e: # pylint: disable=broad-except
log.exception(e)