Commit ce727fc7 by Gabe Mulley

Merge pull request #4566 from mulby/remove-duplicate-context-fields

Remove duplicated data from legacy events
parents e3ac967b f7eb7df5
...@@ -18,9 +18,9 @@ class LegacyFieldMappingProcessor(object): ...@@ -18,9 +18,9 @@ class LegacyFieldMappingProcessor(object):
for field in CONTEXT_FIELDS_TO_INCLUDE: for field in CONTEXT_FIELDS_TO_INCLUDE:
if field in context: if field in context:
event[field] = context[field] event[field] = context[field]
del context[field]
else: else:
event[field] = '' event[field] = ''
remove_shim_context(event)
if 'event_type' in event.get('context', {}): if 'event_type' in event.get('context', {}):
event['event_type'] = event['context']['event_type'] event['event_type'] = event['context']['event_type']
...@@ -40,3 +40,11 @@ class LegacyFieldMappingProcessor(object): ...@@ -40,3 +40,11 @@ class LegacyFieldMappingProcessor(object):
event['event_source'] = 'server' event['event_source'] = 'server'
event['page'] = None event['page'] = None
def remove_shim_context(event):
if 'context' in event:
context = event['context']
for field in CONTEXT_FIELDS_TO_INCLUDE:
if field in context:
del context[field]
# pylint: disable=missing-docstring,maybe-no-member # pylint: disable=missing-docstring,maybe-no-member
from track import views from track import views
from track.middleware import TrackMiddleware
from mock import patch, sentinel from mock import patch, sentinel
from freezegun import freeze_time from freezegun import freeze_time
...@@ -53,12 +54,46 @@ class TestTrackViews(TestCase): ...@@ -53,12 +54,46 @@ class TestTrackViews(TestCase):
'context': { 'context': {
'course_id': 'foo/bar/baz', 'course_id': 'foo/bar/baz',
'org_id': 'foo', 'org_id': 'foo',
'session': sentinel.session,
}, },
} }
self.mock_tracker.send.assert_called_once_with(expected_event) self.mock_tracker.send.assert_called_once_with(expected_event)
@freeze_time(expected_time) @freeze_time(expected_time)
def test_user_track_with_middleware(self):
middleware = TrackMiddleware()
request = self.request_factory.get('/event', {
'page': self.url_with_course,
'event_type': sentinel.event_type,
'event': {}
})
middleware.process_request(request)
try:
views.user_track(request)
expected_event = {
'username': 'anonymous',
'session': '',
'ip': '127.0.0.1',
'event_source': 'browser',
'event_type': str(sentinel.event_type),
'event': '{}',
'agent': '',
'page': self.url_with_course,
'time': expected_time,
'host': 'testserver',
'context': {
'course_id': 'foo/bar/baz',
'org_id': 'foo',
'user_id': '',
'path': u'/event'
},
}
finally:
middleware.process_response(request, None)
self.mock_tracker.send.assert_called_once_with(expected_event)
@freeze_time(expected_time)
def test_server_track(self): def test_server_track(self):
request = self.request_factory.get(self.path_with_course) request = self.request_factory.get(self.path_with_course)
views.server_track(request, str(sentinel.event_type), '{}') views.server_track(request, str(sentinel.event_type), '{}')
...@@ -78,6 +113,38 @@ class TestTrackViews(TestCase): ...@@ -78,6 +113,38 @@ class TestTrackViews(TestCase):
self.mock_tracker.send.assert_called_once_with(expected_event) self.mock_tracker.send.assert_called_once_with(expected_event)
@freeze_time(expected_time) @freeze_time(expected_time)
def test_server_track_with_middleware(self):
middleware = TrackMiddleware()
request = self.request_factory.get(self.path_with_course)
middleware.process_request(request)
# The middleware emits an event, reset the mock to ignore it since we aren't testing that feature.
self.mock_tracker.reset_mock()
try:
views.server_track(request, str(sentinel.event_type), '{}')
expected_event = {
'username': 'anonymous',
'ip': '127.0.0.1',
'event_source': 'server',
'event_type': str(sentinel.event_type),
'event': '{}',
'agent': '',
'page': None,
'time': expected_time,
'host': 'testserver',
'context': {
'user_id': '',
'course_id': u'foo/bar/baz',
'org_id': 'foo',
'path': u'/courses/foo/bar/baz/xmod/'
},
}
finally:
middleware.process_response(request, None)
self.mock_tracker.send.assert_called_once_with(expected_event)
@freeze_time(expected_time)
def test_server_track_with_no_request(self): def test_server_track_with_no_request(self):
request = None request = None
views.server_track(request, str(sentinel.event_type), '{}') views.server_track(request, str(sentinel.event_type), '{}')
......
...@@ -12,6 +12,7 @@ from edxmako.shortcuts import render_to_response ...@@ -12,6 +12,7 @@ from edxmako.shortcuts import render_to_response
from track import tracker from track import tracker
from track import contexts from track import contexts
from track import shim
from track.models import TrackingLog from track.models import TrackingLog
from eventtracking import tracker as eventtracker from eventtracking import tracker as eventtracker
...@@ -59,6 +60,10 @@ def user_track(request): ...@@ -59,6 +60,10 @@ def user_track(request):
"context": context, "context": context,
} }
# Some duplicated fields are passed into event-tracking via the context by track.middleware.
# Remove them from the event here since they are captured elsewhere.
shim.remove_shim_context(event)
log_event(event) log_event(event)
return HttpResponse('success') return HttpResponse('success')
...@@ -92,6 +97,10 @@ def server_track(request, event_type, event, page=None): ...@@ -92,6 +97,10 @@ def server_track(request, event_type, event, page=None):
"context": eventtracker.get_tracker().resolve_context(), "context": eventtracker.get_tracker().resolve_context(),
} }
# Some duplicated fields are passed into event-tracking via the context by track.middleware.
# Remove them from the event here since they are captured elsewhere.
shim.remove_shim_context(event)
log_event(event) log_event(event)
......
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