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>
Julia Hansbrough <julia@edx.org>
Pavel Yushchenko <pavelyushchenko@gmail.com>
Nicolas Chevalier <nicolas.chevalier@epitech.eu>
Gabe Mulley <gabe@edx.org>
Iain Dunning <idunning@mit.edu>
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
}
)
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