add user_id to tracking context
AN-213
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import json
|
||||
import re
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
@@ -8,13 +9,20 @@ from track import contexts
|
||||
from eventtracking import tracker
|
||||
|
||||
|
||||
COURSE_CONTEXT_NAME = 'edx.course'
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
CONTEXT_NAME = 'edx.request'
|
||||
|
||||
|
||||
class TrackMiddleware(object):
|
||||
"""
|
||||
Tracks all requests made, as well as setting up context for other server
|
||||
emitted events.
|
||||
"""
|
||||
|
||||
def process_request(self, request):
|
||||
try:
|
||||
self.enter_course_context(request)
|
||||
self.enter_request_context(request)
|
||||
|
||||
if not self.should_process_request(request):
|
||||
return
|
||||
@@ -66,20 +74,29 @@ class TrackMiddleware(object):
|
||||
return False
|
||||
return True
|
||||
|
||||
def enter_course_context(self, request):
|
||||
def enter_request_context(self, request):
|
||||
"""
|
||||
Extract course information from the request and add it to the
|
||||
tracking context.
|
||||
Extract information from the request and add it to the tracking
|
||||
context.
|
||||
"""
|
||||
context = {}
|
||||
context.update(contexts.course_context_from_url(request.build_absolute_uri()))
|
||||
try:
|
||||
context['user_id'] = request.user.pk
|
||||
except AttributeError:
|
||||
context['user_id'] = ''
|
||||
if settings.DEBUG:
|
||||
log.error('Cannot determine primary key of logged in user.')
|
||||
|
||||
tracker.get_tracker().enter_context(
|
||||
COURSE_CONTEXT_NAME,
|
||||
contexts.course_context_from_url(request.build_absolute_uri())
|
||||
CONTEXT_NAME,
|
||||
context
|
||||
)
|
||||
|
||||
def process_response(self, request, response): # pylint: disable=unused-argument
|
||||
"""Exit the course context if it exists."""
|
||||
"""Exit the context if it exists."""
|
||||
try:
|
||||
tracker.get_tracker().exit_context(COURSE_CONTEXT_NAME)
|
||||
tracker.get_tracker().exit_context(CONTEXT_NAME)
|
||||
except: # pylint: disable=bare-except
|
||||
pass
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import re
|
||||
|
||||
from mock import patch
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.test import TestCase
|
||||
from django.test.client import RequestFactory
|
||||
from django.test.utils import override_settings
|
||||
@@ -52,15 +53,32 @@ class TrackMiddlewareTestCase(TestCase):
|
||||
def test_request_in_course_context(self):
|
||||
request = self.request_factory.get('/courses/test_org/test_course/test_run/foo')
|
||||
self.track_middleware.process_request(request)
|
||||
captured_context = tracker.get_tracker().resolve_context()
|
||||
self.track_middleware.process_response(request, None)
|
||||
|
||||
self.assertEquals(
|
||||
tracker.get_tracker().resolve_context(),
|
||||
captured_context,
|
||||
{
|
||||
'course_id': 'test_org/test_course/test_run',
|
||||
'org_id': 'test_org'
|
||||
'org_id': 'test_org',
|
||||
'user_id': ''
|
||||
}
|
||||
)
|
||||
self.track_middleware.process_response(request, None)
|
||||
self.assertEquals(
|
||||
tracker.get_tracker().resolve_context(),
|
||||
{}
|
||||
)
|
||||
|
||||
def test_request_with_user(self):
|
||||
request = self.request_factory.get('/courses/')
|
||||
request.user = User(pk=1)
|
||||
self.track_middleware.process_request(request)
|
||||
self.addCleanup(self.track_middleware.process_response, request, None)
|
||||
self.assertEquals(
|
||||
tracker.get_tracker().resolve_context(),
|
||||
{
|
||||
'course_id': '',
|
||||
'org_id': '',
|
||||
'user_id': 1
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user