Provide more context to calls to Segment.

Implementation for DE-1089.

Centralize the definition of context into a single method.  This is in
common/djangoapps/track because the context is originally set there by
middleware.
This commit is contained in:
Gabe Mulley
2018-11-15 16:13:14 -05:00
committed by Brian Wilson
26 changed files with 394 additions and 274 deletions

View File

@@ -102,8 +102,9 @@ class FieldOverrideProvider(object):
"""
__metaclass__ = ABCMeta
def __init__(self, user):
def __init__(self, user, fallback_field_data):
self.user = user
self.fallback_field_data = fallback_field_data
@abstractmethod
def get(self, block, name, default): # pragma no cover
@@ -196,7 +197,7 @@ class OverrideFieldData(FieldData):
def __init__(self, user, fallback, providers):
self.fallback = fallback
self.providers = tuple(provider(user) for provider in providers)
self.providers = tuple(provider(user, fallback) for provider in providers)
def get_override(self, block, name):
"""

View File

@@ -2191,9 +2191,9 @@ class GenerateUserCertTests(ModuleStoreTestCase):
def test_user_with_passing_grade(self, mock_is_course_passed):
# If user has above passing grading then json will return cert generating message and
# status valid code
# mocking xqueue and analytics
# mocking xqueue and Segment analytics
analytics_patcher = patch('courseware.views.views.analytics')
analytics_patcher = patch('courseware.views.views.segment')
mock_tracker = analytics_patcher.start()
self.addCleanup(analytics_patcher.stop)
@@ -2211,11 +2211,6 @@ class GenerateUserCertTests(ModuleStoreTestCase):
'category': 'certificates',
'label': unicode(self.course.id)
},
context={
'ip': '127.0.0.1',
'Google Analytics': {'clientId': None}
}
)
mock_tracker.reset_mock()

View File

@@ -7,7 +7,6 @@ import urllib
from collections import OrderedDict, namedtuple
from datetime import datetime
import analytics
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import AnonymousUser, User
@@ -98,6 +97,7 @@ from openedx.features.enterprise_support.api import data_sharing_consent_require
from openedx.features.journals.api import get_journals_context
from shoppingcart.utils import is_shopping_cart_enabled
from student.models import CourseEnrollment, UserTestGroup
from track import segment
from util.cache import cache, cache_if_anonymous
from util.db import outer_atomic
from util.milestones_helpers import get_prerequisite_courses_display
@@ -1429,24 +1429,11 @@ def _track_successful_certificate_generation(user_id, course_id):
None
"""
if settings.LMS_SEGMENT_KEY:
event_name = 'edx.bi.user.certificate.generate'
tracking_context = tracker.get_tracker().resolve_context()
analytics.track(
user_id,
event_name,
{
'category': 'certificates',
'label': text_type(course_id)
},
context={
'ip': tracking_context.get('ip'),
'Google Analytics': {
'clientId': tracking_context.get('client_id')
}
}
)
event_name = 'edx.bi.user.certificate.generate'
segment.track(user_id, event_name, {
'category': 'certificates',
'label': text_type(course_id)
})
@require_http_methods(["GET", "POST"])