From a5574792fbeb0a53000b08b9a87103562e857a0f Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Mon, 8 Feb 2016 17:13:21 -0500 Subject: [PATCH] Fix mobile Warning errors in tracking logs. --- common/djangoapps/track/views/segmentio.py | 31 +++++++++---------- .../track/views/tests/test_segmentio.py | 6 ++-- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/common/djangoapps/track/views/segmentio.py b/common/djangoapps/track/views/segmentio.py index 8e45ff0f43..9a4847085c 100644 --- a/common/djangoapps/track/views/segmentio.py +++ b/common/djangoapps/track/views/segmentio.py @@ -19,8 +19,6 @@ log = logging.getLogger(__name__) ERROR_UNAUTHORIZED = 'Unauthorized' -WARNING_IGNORED_SOURCE = 'Source ignored' -WARNING_IGNORED_TYPE = 'Type ignored' ERROR_MISSING_USER_ID = 'Required user_id missing from context' ERROR_USER_NOT_EXIST = 'Specified user does not exist' ERROR_INVALID_USER_ID = 'Unable to parse userId as an integer' @@ -67,7 +65,7 @@ def segmentio_event(request): try: track_segmentio_event(request) except EventValidationError as err: - log.warning( + log.debug( 'Unable to process event received from Segment: message="%s" event="%s"', str(err), request.body @@ -133,29 +131,30 @@ def track_segmentio_event(request): # pylint: disable=too-many-statements source_map = getattr(settings, 'TRACKING_SEGMENTIO_SOURCE_MAP', {}) event_source = source_map.get(library_name) if not event_source: - raise EventValidationError(WARNING_IGNORED_SOURCE) + return else: context['event_source'] = event_source + # Ignore event types that are unsupported + segment_event_type = full_segment_event.get('type') + allowed_types = [a.lower() for a in getattr(settings, 'TRACKING_SEGMENTIO_ALLOWED_TYPES', [])] + if not segment_event_type or (segment_event_type.lower() not in allowed_types): + return + if 'name' not in segment_properties: raise EventValidationError(ERROR_MISSING_NAME) - if 'data' not in segment_properties: - raise EventValidationError(ERROR_MISSING_DATA) - - # Ignore event types and names that are unsupported - segment_event_type = full_segment_event.get('type') + # Ignore event names that are unsupported segment_event_name = segment_properties['name'] - allowed_types = [a.lower() for a in getattr(settings, 'TRACKING_SEGMENTIO_ALLOWED_TYPES', [])] disallowed_substring_names = [ a.lower() for a in getattr(settings, 'TRACKING_SEGMENTIO_DISALLOWED_SUBSTRING_NAMES', []) ] - if ( - not segment_event_type or - (segment_event_type.lower() not in allowed_types) or - any(disallowed_subs_name in segment_event_name.lower() for disallowed_subs_name in disallowed_substring_names) - ): - raise EventValidationError(WARNING_IGNORED_TYPE) + + if any(disallowed_subs_name in segment_event_name.lower() for disallowed_subs_name in disallowed_substring_names): + return + + if 'data' not in segment_properties: + raise EventValidationError(ERROR_MISSING_DATA) # create and populate application field if it doesn't exist app_context = segment_properties.get('context', {}) diff --git a/common/djangoapps/track/views/tests/test_segmentio.py b/common/djangoapps/track/views/tests/test_segmentio.py index 9602536abc..2ee9641e80 100644 --- a/common/djangoapps/track/views/tests/test_segmentio.py +++ b/common/djangoapps/track/views/tests/test_segmentio.py @@ -96,14 +96,14 @@ class SegmentIOTrackingTestCase(EventTrackingTestCase): return request @data('identify', 'Group', 'Alias', 'Page', 'identify', 'screen') - @expect_failure_with_message(segmentio.WARNING_IGNORED_TYPE) def test_segmentio_ignore_actions(self, action): self.post_segmentio_event(action=action) + self.assert_no_events_emitted() @data('edx.bi.some_name', 'EDX.BI.CAPITAL_NAME') - @expect_failure_with_message(segmentio.WARNING_IGNORED_TYPE) def test_segmentio_ignore_names(self, name): self.post_segmentio_event(name=name) + self.assert_no_events_emitted() def post_segmentio_event(self, **kwargs): """Post a fake Segment event to the view that processes it""" @@ -161,9 +161,9 @@ class SegmentIOTrackingTestCase(EventTrackingTestCase): """Return a json string containing a fake Segment event""" return json.dumps(self.create_segmentio_event(**kwargs)) - @expect_failure_with_message(segmentio.WARNING_IGNORED_SOURCE) def test_segmentio_ignore_unknown_libraries(self): self.post_segmentio_event(library_name='foo') + self.assert_no_events_emitted() @expect_failure_with_message(segmentio.ERROR_USER_NOT_EXIST) def test_no_user_for_user_id(self):