Commit 3f899676 by Gabe Mulley

Merge pull request #1478 from mulby/gabe/track-user-id

add user_id to tracking context
parents e587817c 86bb952f
...@@ -92,4 +92,5 @@ Felipe Montoya <felipe.montoya@edunext.co> ...@@ -92,4 +92,5 @@ Felipe Montoya <felipe.montoya@edunext.co>
Julia Hansbrough <julia@edx.org> Julia Hansbrough <julia@edx.org>
Pavel Yushchenko <pavelyushchenko@gmail.com> Pavel Yushchenko <pavelyushchenko@gmail.com>
Nicolas Chevalier <nicolas.chevalier@epitech.eu> Nicolas Chevalier <nicolas.chevalier@epitech.eu>
Gabe Mulley <gabe@edx.org>
Iain Dunning <idunning@mit.edu> Iain Dunning <idunning@mit.edu>
import json import json
import re import re
import logging
from django.conf import settings from django.conf import settings
...@@ -8,13 +9,20 @@ from track import contexts ...@@ -8,13 +9,20 @@ from track import contexts
from eventtracking import tracker from eventtracking import tracker
COURSE_CONTEXT_NAME = 'edx.course' log = logging.getLogger(__name__)
CONTEXT_NAME = 'edx.request'
class TrackMiddleware(object): class TrackMiddleware(object):
"""
Tracks all requests made, as well as setting up context for other server
emitted events.
"""
def process_request(self, request): def process_request(self, request):
try: try:
self.enter_course_context(request) self.enter_request_context(request)
if not self.should_process_request(request): if not self.should_process_request(request):
return return
...@@ -66,20 +74,29 @@ class TrackMiddleware(object): ...@@ -66,20 +74,29 @@ class TrackMiddleware(object):
return False return False
return True 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 Extract information from the request and add it to the tracking
tracking context. 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( tracker.get_tracker().enter_context(
COURSE_CONTEXT_NAME, CONTEXT_NAME,
contexts.course_context_from_url(request.build_absolute_uri()) context
) )
def process_response(self, request, response): # pylint: disable=unused-argument def process_response(self, request, response): # pylint: disable=unused-argument
"""Exit the course context if it exists.""" """Exit the context if it exists."""
try: try:
tracker.get_tracker().exit_context(COURSE_CONTEXT_NAME) tracker.get_tracker().exit_context(CONTEXT_NAME)
except: # pylint: disable=bare-except except: # pylint: disable=bare-except
pass pass
......
...@@ -2,6 +2,7 @@ import re ...@@ -2,6 +2,7 @@ import re
from mock import patch from mock import patch
from django.contrib.auth.models import User
from django.test import TestCase from django.test import TestCase
from django.test.client import RequestFactory from django.test.client import RequestFactory
from django.test.utils import override_settings from django.test.utils import override_settings
...@@ -52,15 +53,32 @@ class TrackMiddlewareTestCase(TestCase): ...@@ -52,15 +53,32 @@ class TrackMiddlewareTestCase(TestCase):
def test_request_in_course_context(self): def test_request_in_course_context(self):
request = self.request_factory.get('/courses/test_org/test_course/test_run/foo') request = self.request_factory.get('/courses/test_org/test_course/test_run/foo')
self.track_middleware.process_request(request) self.track_middleware.process_request(request)
captured_context = tracker.get_tracker().resolve_context()
self.track_middleware.process_response(request, None)
self.assertEquals( self.assertEquals(
tracker.get_tracker().resolve_context(), captured_context,
{ {
'course_id': 'test_org/test_course/test_run', '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( self.assertEquals(
tracker.get_tracker().resolve_context(), 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
}
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment