Get rid of all code related to the CDN Experiments.
These were very early experiments by the old performance team on using CDNs for videos and logging performance data. No one is looking at this data and it's just extra cruft on every page.
This commit is contained in:
@@ -1,135 +0,0 @@
|
||||
# pylint: disable=no-member
|
||||
"""
|
||||
Tests that performance data is successfully logged.
|
||||
"""
|
||||
import datetime
|
||||
import dateutil
|
||||
import json
|
||||
|
||||
import logging
|
||||
from StringIO import StringIO
|
||||
|
||||
from django.test import TestCase
|
||||
from django.test.client import RequestFactory
|
||||
from openedx.core.djangoapps.performance.views import performance_log
|
||||
|
||||
|
||||
class PerformanceTrackingTest(TestCase):
|
||||
"""
|
||||
Tests that performance logs correctly handle events
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(PerformanceTrackingTest, self).setUp()
|
||||
self.request_factory = RequestFactory()
|
||||
self.stream = StringIO()
|
||||
self.handler = logging.StreamHandler(self.stream)
|
||||
self.log = logging.getLogger()
|
||||
self.log.setLevel(logging.INFO)
|
||||
for handler in self.log.handlers:
|
||||
self.log.removeHandler(handler)
|
||||
self.log.addHandler(self.handler)
|
||||
self.addCleanup(self.log.removeHandler, self.handler)
|
||||
self.addCleanup(self.handler.close)
|
||||
|
||||
def test_empty_get(self):
|
||||
request = self.request_factory.get('/performance')
|
||||
pre_time = datetime.datetime.utcnow()
|
||||
performance_log(request)
|
||||
post_time = datetime.datetime.utcnow()
|
||||
self.handler.flush()
|
||||
logged_value = json.loads(self.stream.getvalue().strip())
|
||||
self.assertEqual(logged_value['accept_language'], '')
|
||||
self.assertEqual(logged_value['agent'], '')
|
||||
self.assertEqual(logged_value['event'], '')
|
||||
self.assertEqual(logged_value['event_source'], 'browser')
|
||||
self.assertEqual(logged_value['expgroup'], '')
|
||||
self.assertEqual(logged_value['id'], '')
|
||||
self.assertEqual(logged_value['page'], '')
|
||||
self.assertEqual(logged_value['referer'], '')
|
||||
self.assertEqual(logged_value['value'], '')
|
||||
logged_time = dateutil.parser.parse(logged_value['time']).replace(tzinfo=None)
|
||||
self.assertLessEqual(pre_time, logged_time)
|
||||
self.assertGreaterEqual(post_time, logged_time)
|
||||
|
||||
def test_empty_post(self):
|
||||
request = self.request_factory.post('/performance')
|
||||
pre_time = datetime.datetime.utcnow()
|
||||
performance_log(request)
|
||||
post_time = datetime.datetime.utcnow()
|
||||
self.handler.flush()
|
||||
logged_value = json.loads(self.stream.getvalue().strip())
|
||||
self.assertEqual(logged_value['accept_language'], '')
|
||||
self.assertEqual(logged_value['agent'], '')
|
||||
self.assertEqual(logged_value['event'], '')
|
||||
self.assertEqual(logged_value['event_source'], 'browser')
|
||||
self.assertEqual(logged_value['expgroup'], '')
|
||||
self.assertEqual(logged_value['id'], '')
|
||||
self.assertEqual(logged_value['page'], '')
|
||||
self.assertEqual(logged_value['referer'], '')
|
||||
self.assertEqual(logged_value['value'], '')
|
||||
logged_time = dateutil.parser.parse(logged_value['time']).replace(tzinfo=None)
|
||||
self.assertLessEqual(pre_time, logged_time)
|
||||
self.assertGreaterEqual(post_time, logged_time)
|
||||
|
||||
def test_populated_get(self):
|
||||
request = self.request_factory.get('/performance',
|
||||
{'event': "a_great_event",
|
||||
'id': "12345012345",
|
||||
'expgroup': "17", 'page': "atestpage",
|
||||
'value': "100234"})
|
||||
request.META['HTTP_ACCEPT_LANGUAGE'] = "en"
|
||||
request.META['HTTP_REFERER'] = "https://www.edx.org/evilpage"
|
||||
request.META['HTTP_USER_AGENT'] = "Mozilla/5.0"
|
||||
request.META['REMOTE_ADDR'] = "18.19.20.21"
|
||||
request.META['SERVER_NAME'] = "some-aws-server"
|
||||
pre_time = datetime.datetime.utcnow()
|
||||
performance_log(request)
|
||||
post_time = datetime.datetime.utcnow()
|
||||
self.handler.flush()
|
||||
logged_value = json.loads(self.stream.getvalue().strip())
|
||||
self.assertEqual(logged_value['accept_language'], 'en')
|
||||
self.assertEqual(logged_value['agent'], 'Mozilla/5.0')
|
||||
self.assertEqual(logged_value['event'], 'a_great_event')
|
||||
self.assertEqual(logged_value['event_source'], 'browser')
|
||||
self.assertEqual(logged_value['expgroup'], '17')
|
||||
self.assertEqual(logged_value['host'], 'some-aws-server')
|
||||
self.assertEqual(logged_value['id'], '12345012345')
|
||||
self.assertEqual(logged_value['ip'], '18.19.20.21')
|
||||
self.assertEqual(logged_value['page'], 'atestpage')
|
||||
self.assertEqual(logged_value['referer'], 'https://www.edx.org/evilpage')
|
||||
self.assertEqual(logged_value['value'], '100234')
|
||||
logged_time = dateutil.parser.parse(logged_value['time']).replace(tzinfo=None)
|
||||
self.assertLessEqual(pre_time, logged_time)
|
||||
self.assertGreaterEqual(post_time, logged_time)
|
||||
|
||||
def test_populated_post(self):
|
||||
request = self.request_factory.post('/performance',
|
||||
{'event': "a_great_event",
|
||||
'id': "12345012345",
|
||||
'expgroup': "17", 'page': "atestpage",
|
||||
'value': "100234"})
|
||||
request.META['HTTP_ACCEPT_LANGUAGE'] = "en"
|
||||
request.META['HTTP_REFERER'] = "https://www.edx.org/evilpage"
|
||||
request.META['HTTP_USER_AGENT'] = "Mozilla/5.0"
|
||||
request.META['REMOTE_ADDR'] = "18.19.20.21"
|
||||
request.META['SERVER_NAME'] = "some-aws-server"
|
||||
pre_time = datetime.datetime.utcnow()
|
||||
performance_log(request)
|
||||
post_time = datetime.datetime.utcnow()
|
||||
self.handler.flush()
|
||||
logged_value = json.loads(self.stream.getvalue().strip())
|
||||
self.assertEqual(logged_value['accept_language'], 'en')
|
||||
self.assertEqual(logged_value['agent'], 'Mozilla/5.0')
|
||||
self.assertEqual(logged_value['event'], 'a_great_event')
|
||||
self.assertEqual(logged_value['event_source'], 'browser')
|
||||
self.assertEqual(logged_value['expgroup'], '17')
|
||||
self.assertEqual(logged_value['host'], 'some-aws-server')
|
||||
self.assertEqual(logged_value['id'], '12345012345')
|
||||
self.assertEqual(logged_value['ip'], '18.19.20.21')
|
||||
self.assertEqual(logged_value['page'], 'atestpage')
|
||||
self.assertEqual(logged_value['referer'], 'https://www.edx.org/evilpage')
|
||||
self.assertEqual(logged_value['value'], '100234')
|
||||
logged_time = dateutil.parser.parse(logged_value['time']).replace(tzinfo=None)
|
||||
self.assertLessEqual(pre_time, logged_time)
|
||||
self.assertGreaterEqual(post_time, logged_time)
|
||||
@@ -1,11 +0,0 @@
|
||||
"""
|
||||
URLs for performance app
|
||||
"""
|
||||
|
||||
from django.conf.urls import url
|
||||
|
||||
from openedx.core.djangoapps.performance.views import performance_log
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^performance$', performance_log),
|
||||
]
|
||||
@@ -1,44 +0,0 @@
|
||||
"""
|
||||
Common utilities for performance testing.
|
||||
"""
|
||||
from contextlib import contextmanager
|
||||
|
||||
|
||||
def collect_profile_func(file_prefix, enabled=False):
|
||||
"""
|
||||
Method decorator for collecting profile.
|
||||
"""
|
||||
import functools
|
||||
|
||||
def _outer(func):
|
||||
"""
|
||||
Outer function decorator.
|
||||
"""
|
||||
@functools.wraps(func)
|
||||
def _inner(self, *args, **kwargs):
|
||||
"""
|
||||
Inner wrapper function.
|
||||
"""
|
||||
if enabled:
|
||||
with collect_profile(file_prefix):
|
||||
return func(self, *args, **kwargs)
|
||||
else:
|
||||
return func(self, *args, **kwargs)
|
||||
return _inner
|
||||
return _outer
|
||||
|
||||
|
||||
@contextmanager
|
||||
def collect_profile(file_prefix):
|
||||
"""
|
||||
Context manager to collect profile information.
|
||||
"""
|
||||
import cProfile
|
||||
import uuid
|
||||
profiler = cProfile.Profile()
|
||||
profiler.enable()
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
profiler.disable()
|
||||
profiler.dump_stats("{0}_{1}_master.profile".format(file_prefix, uuid.uuid4()))
|
||||
@@ -1,57 +0,0 @@
|
||||
"""
|
||||
Views for logging performance data.
|
||||
"""
|
||||
import datetime
|
||||
import json
|
||||
import logging
|
||||
|
||||
from django.http import HttpResponse
|
||||
|
||||
from track.utils import DateTimeJSONEncoder
|
||||
|
||||
|
||||
log = logging.getLogger("perflog")
|
||||
|
||||
|
||||
def _get_request_header(request, header_name, default=''):
|
||||
"""Helper method to get header values from a request's META dict, if present."""
|
||||
if request is not None and hasattr(request, 'META') and header_name in request.META:
|
||||
return request.META[header_name]
|
||||
else:
|
||||
return default
|
||||
|
||||
|
||||
def _get_request_value(request, value_name, default=''):
|
||||
"""Helper method to get header values from a request's GET or POST dicts, if present."""
|
||||
if request is not None and hasattr(request, 'GET') and value_name in request.GET:
|
||||
return request.GET[value_name]
|
||||
elif request is not None and hasattr(request, 'POST') and value_name in request.POST:
|
||||
return request.POST[value_name]
|
||||
else:
|
||||
return default
|
||||
|
||||
|
||||
def performance_log(request):
|
||||
"""
|
||||
Log when POST call to "performance" URL is made by a user.
|
||||
Request should provide "event" and "page" arguments.
|
||||
"""
|
||||
|
||||
event = {
|
||||
"ip": _get_request_header(request, 'REMOTE_ADDR'),
|
||||
"referer": _get_request_header(request, 'HTTP_REFERER'),
|
||||
"accept_language": _get_request_header(request, 'HTTP_ACCEPT_LANGUAGE'),
|
||||
"event_source": "browser",
|
||||
"event": _get_request_value(request, 'event'),
|
||||
"agent": _get_request_header(request, 'HTTP_USER_AGENT'),
|
||||
"page": _get_request_value(request, 'page'),
|
||||
"id": _get_request_value(request, 'id'),
|
||||
"expgroup": _get_request_value(request, 'expgroup'),
|
||||
"value": _get_request_value(request, 'value'),
|
||||
"time": datetime.datetime.utcnow(),
|
||||
"host": _get_request_header(request, 'SERVER_NAME'),
|
||||
}
|
||||
|
||||
log.info(json.dumps(event, cls=DateTimeJSONEncoder))
|
||||
|
||||
return HttpResponse(status=204)
|
||||
Reference in New Issue
Block a user