Commit 7e31c95c by Brian Wilson

Modify server_track to handle being called without a request.

parent dd591a4c
...@@ -78,6 +78,24 @@ class TestTrackViews(TestCase): ...@@ -78,6 +78,24 @@ class TestTrackViews(TestCase):
} }
self.mock_tracker.send.assert_called_once_with(expected_event) self.mock_tracker.send.assert_called_once_with(expected_event)
def test_server_track_with_no_request(self):
request = None
views.server_track(request, str(sentinel.event_type), '{}')
expected_event = {
'username': 'anonymous',
'ip': '',
'event_source': 'server',
'event_type': str(sentinel.event_type),
'event': '{}',
'agent': '',
'page': None,
'time': self._expected_timestamp,
'host': '',
'context': {},
}
self.mock_tracker.send.assert_called_once_with(expected_event)
def test_task_track(self): def test_task_track(self):
request_info = { request_info = {
'username': 'anonymous', 'username': 'anonymous',
......
import datetime import datetime
import pytz
from pytz import UTC from pytz import UTC
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
...@@ -22,6 +21,14 @@ def log_event(event): ...@@ -22,6 +21,14 @@ def log_event(event):
tracker.send(event) tracker.send(event)
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 user_track(request): def user_track(request):
""" """
Log when POST call to "event" URL is made by a user. Uses request.REQUEST Log when POST call to "event" URL is made by a user. Uses request.REQUEST
...@@ -40,25 +47,20 @@ def user_track(request): ...@@ -40,25 +47,20 @@ def user_track(request):
except: except:
scookie = "" scookie = ""
try:
agent = request.META['HTTP_USER_AGENT']
except:
agent = ''
page = request.REQUEST['page'] page = request.REQUEST['page']
with eventtracker.get_tracker().context('edx.course.browser', contexts.course_context_from_url(page)): with eventtracker.get_tracker().context('edx.course.browser', contexts.course_context_from_url(page)):
event = { event = {
"username": username, "username": username,
"session": scookie, "session": scookie,
"ip": request.META['REMOTE_ADDR'], "ip": _get_request_header(request, 'REMOTE_ADDR'),
"event_source": "browser", "event_source": "browser",
"event_type": request.REQUEST['event_type'], "event_type": request.REQUEST['event_type'],
"event": request.REQUEST['event'], "event": request.REQUEST['event'],
"agent": agent, "agent": _get_request_header(request, 'HTTP_USER_AGENT'),
"page": page, "page": page,
"time": datetime.datetime.now(UTC), "time": datetime.datetime.now(UTC),
"host": request.META['SERVER_NAME'], "host": _get_request_header(request, 'SERVER_NAME'),
"context": eventtracker.get_tracker().resolve_context(), "context": eventtracker.get_tracker().resolve_context(),
} }
...@@ -68,33 +70,33 @@ def user_track(request): ...@@ -68,33 +70,33 @@ def user_track(request):
def server_track(request, event_type, event, page=None): def server_track(request, event_type, event, page=None):
"""Log events related to server requests.""" """
Log events related to server requests.
Handle the situation where the request may be NULL, as may happen with management commands.
"""
if event_type.startswith("/event_logs") and request.user.is_staff:
return # don't log
try: try:
username = request.user.username username = request.user.username
except: except:
username = "anonymous" username = "anonymous"
try: # define output:
agent = request.META['HTTP_USER_AGENT']
except:
agent = ''
event = { event = {
"username": username, "username": username,
"ip": request.META['REMOTE_ADDR'], "ip": _get_request_header(request, 'REMOTE_ADDR'),
"event_source": "server", "event_source": "server",
"event_type": event_type, "event_type": event_type,
"event": event, "event": event,
"agent": agent, "agent": _get_request_header(request, 'HTTP_USER_AGENT'),
"page": page, "page": page,
"time": datetime.datetime.now(UTC), "time": datetime.datetime.now(UTC),
"host": request.META['SERVER_NAME'], "host": _get_request_header(request, 'SERVER_NAME'),
"context": eventtracker.get_tracker().resolve_context(), "context": eventtracker.get_tracker().resolve_context(),
} }
if event_type.startswith("/event_logs") and request.user.is_staff:
return # don't log
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