diff --git a/common/djangoapps/track/admin.py b/common/djangoapps/track/admin.py deleted file mode 100644 index 1b2d92006502c385f43690275377bc30b7930d8e..0000000000000000000000000000000000000000 --- a/common/djangoapps/track/admin.py +++ /dev/null @@ -1,10 +0,0 @@ -''' -django admin pages for courseware model -''' - - -from django.contrib import admin - -from track.models import TrackingLog - -admin.site.register(TrackingLog) diff --git a/common/djangoapps/track/backends/django.py b/common/djangoapps/track/backends/django.py deleted file mode 100644 index bb155f50456da29e83eb2ed9d9d635da5bdbc627..0000000000000000000000000000000000000000 --- a/common/djangoapps/track/backends/django.py +++ /dev/null @@ -1,89 +0,0 @@ -""" -Event tracker backend that saves events to a Django database. - -""" - -# TODO: this module is very specific to the event schema, and is only -# brought here for legacy support. It should be updated when the -# schema changes or eventually deprecated. - - -import logging - -from django.db import models -from django.utils.encoding import python_2_unicode_compatible - -from track.backends import BaseBackend - -log = logging.getLogger('track.backends.django') - - -LOGFIELDS = [ - 'username', - 'ip', - 'event_source', - 'event_type', - 'event', - 'agent', - 'page', - 'time', - 'host', -] - - -@python_2_unicode_compatible -class TrackingLog(models.Model): - """ - Defines the fields that are stored in the tracking log database. - - .. pii: Stores a great deal of PII as it is an event tracker of browsing history, unused and empty on edx.org - .. pii_types: username, ip, other - .. pii_retirement: retained - """ - - dtcreated = models.DateTimeField(u'creation date', auto_now_add=True) - username = models.CharField(max_length=32, blank=True) - ip = models.CharField(max_length=32, blank=True) - event_source = models.CharField(max_length=32) - event_type = models.CharField(max_length=512, blank=True) - event = models.TextField(blank=True) - agent = models.CharField(max_length=256, blank=True) - page = models.CharField(max_length=512, blank=True, null=True) - time = models.DateTimeField(u'event time') - host = models.CharField(max_length=64, blank=True) - - class Meta(object): - app_label = 'track' - db_table = 'track_trackinglog' - - def __str__(self): - fmt = ( - u"[{self.time}] {self.username}@{self.ip}: " - u"{self.event_source}| {self.event_type} | " - u"{self.page} | {self.event}" - ) - return fmt.format(self=self) - - -class DjangoBackend(BaseBackend): - """Event tracker backend that saves to a Django database""" - def __init__(self, name='default', **options): - """ - Configure database used by the backend. - - :Parameters: - - - `name` is the name of the database as specified in the project - settings. - - """ - super(DjangoBackend, self).__init__(**options) - self.name = name - - def send(self, event): - field_values = {x: event.get(x, '') for x in LOGFIELDS} - tldat = TrackingLog(**field_values) - try: - tldat.save(using=self.name) - except Exception as e: # pylint: disable=broad-except - log.exception(e) diff --git a/common/djangoapps/track/backends/tests/test_django.py b/common/djangoapps/track/backends/tests/test_django.py deleted file mode 100644 index dac6368c5e624d7a66e28e1df4324d22d48fd42e..0000000000000000000000000000000000000000 --- a/common/djangoapps/track/backends/tests/test_django.py +++ /dev/null @@ -1,26 +0,0 @@ - - -from django.test import TestCase - -from track.backends.django import DjangoBackend, TrackingLog - - -class TestDjangoBackend(TestCase): - def setUp(self): - super(TestDjangoBackend, self).setUp() - self.backend = DjangoBackend() - - def test_django_backend(self): - event = { - 'username': 'test', - 'time': '2013-01-01T12:01:00-05:00' - } - self.backend.send(event) - - results = list(TrackingLog.objects.all()) - - self.assertEqual(len(results), 1) - self.assertEqual(results[0].username, 'test') - - # Check if time is stored in UTC - self.assertEqual(str(results[0].time), '2013-01-01 17:01:00+00:00') diff --git a/common/djangoapps/track/models.py b/common/djangoapps/track/models.py deleted file mode 100644 index 0aad04eaac1fd0719d282ed04c5264b892011ce6..0000000000000000000000000000000000000000 --- a/common/djangoapps/track/models.py +++ /dev/null @@ -1,4 +0,0 @@ -# pylint: disable=unused-import, missing-docstring - - -from track.backends.django import TrackingLog diff --git a/common/djangoapps/track/tests/test_logs.py b/common/djangoapps/track/tests/test_logs.py deleted file mode 100644 index 87c8af2bb9eb39f8d1d08b03436f8f3243e0bbfc..0000000000000000000000000000000000000000 --- a/common/djangoapps/track/tests/test_logs.py +++ /dev/null @@ -1,61 +0,0 @@ -"""Tests that tracking data are successfully logged""" - - -import unittest - -import mock -from django.conf import settings -from django.test import TestCase -from django.urls import reverse -from six import unichr - -from track.models import TrackingLog -from track.views import user_track - - -@unittest.skip("TODO: these tests were not being run before, and now that they are they're failing") -@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') -class TrackingTest(TestCase): - """ - Tests that tracking logs correctly handle events - """ - - def test_post_answers_to_log(self): - """ - Checks that student answer requests submitted to track.views via POST - are correctly logged in the TrackingLog db table - """ - requests = [ - {"event": "my_event", "event_type": "my_event_type", "page": "my_page"}, - {"event": "{'json': 'object'}", "event_type": unichr(512), "page": "my_page"} - ] - with mock.patch.dict('django.conf.settings.FEATURES', {'ENABLE_SQL_TRACKING_LOGS': True}): - for request_params in requests: - response = self.client.post(reverse(user_track), request_params) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.content, 'success') - tracking_logs = TrackingLog.objects.order_by('-dtcreated') - log = tracking_logs[0] - self.assertEqual(log.event, request_params["event"]) - self.assertEqual(log.event_type, request_params["event_type"]) - self.assertEqual(log.page, request_params["page"]) - - def test_get_answers_to_log(self): - """ - Checks that student answer requests submitted to track.views via GET - are correctly logged in the TrackingLog db table - """ - requests = [ - {"event": "my_event", "event_type": "my_event_type", "page": "my_page"}, - {"event": "{'json': 'object'}", "event_type": unichr(512), "page": "my_page"} - ] - with mock.patch.dict('django.conf.settings.FEATURES', {'ENABLE_SQL_TRACKING_LOGS': True}): - for request_params in requests: - response = self.client.get(reverse(user_track), request_params) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.content, 'success') - tracking_logs = TrackingLog.objects.order_by('-dtcreated') - log = tracking_logs[0] - self.assertEqual(log.event, request_params["event"]) - self.assertEqual(log.event_type, request_params["event_type"]) - self.assertEqual(log.page, request_params["page"]) diff --git a/common/djangoapps/track/views/__init__.py b/common/djangoapps/track/views/__init__.py index ddfced072366adf9c7230092a19c1601304165e1..a434a1dc43b598a4f99719ee1f78129342f2ca8d 100644 --- a/common/djangoapps/track/views/__init__.py +++ b/common/djangoapps/track/views/__init__.py @@ -15,7 +15,6 @@ from ipware.ip import get_ip from edxmako.shortcuts import render_to_response from track import contexts, shim, tracker -from track.models import TrackingLog def log_event(event): @@ -159,8 +158,7 @@ def task_track(request_info, task_info, event_type, event, page=None): # about the task in which it is running. full_event = dict(event, **task_info) - # All fields must be specified, in case the tracking information is - # also saved to the TrackingLog model. Get values from the task-level + # Get values from the task-level # information, or just add placeholder values. with eventtracker.get_tracker().context('edx.course.task', contexts.course_context_from_url(page)): event = { @@ -177,31 +175,3 @@ def task_track(request_info, task_info, event_type, event, page=None): } log_event(event) - - -@login_required -@ensure_csrf_cookie -def view_tracking_log(request, args=''): - """View to output contents of TrackingLog model. For staff use only.""" - if not request.user.is_staff: - return redirect('/') - nlen = 100 - username = '' - if args: - for arg in args.split('/'): - if arg.isdigit(): - nlen = int(arg) - if arg.startswith('username='): - username = arg[9:] - - record_instances = TrackingLog.objects.all().order_by('-time') - if username: - record_instances = record_instances.filter(username=username) - record_instances = record_instances[0:nlen] - - # fix dtstamp - fmt = '%a %d-%b-%y %H:%M:%S' # "%Y-%m-%d %H:%M:%S %Z%z" - for rinst in record_instances: - rinst.dtstr = rinst.time.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('US/Eastern')).strftime(fmt) - - return render_to_response('tracking_log.html', {'records': record_instances}) diff --git a/common/djangoapps/util/tests/test_db.py b/common/djangoapps/util/tests/test_db.py index 8fdcf40b9f06c0de2176359fc7df0a18c8ae5afc..b64e69768a1a8648f1f90b861c5fb14d1b3e800b 100644 --- a/common/djangoapps/util/tests/test_db.py +++ b/common/djangoapps/util/tests/test_db.py @@ -223,6 +223,7 @@ class MigrationTests(TestCase): """ @unittest.skip("Need to skip as part of renaming a field in schedules app. This will be unskipped in DE-1825") + @unittest.skip("This is also being skipped as part of the dropping of tracking tables for DEPR-57") @override_settings(MIGRATION_MODULES={}) def test_migrations_are_in_sync(self): """