diff --git a/courseware/capa_module.py b/courseware/capa_module.py index 15c19432cd..b94ffac537 100644 --- a/courseware/capa_module.py +++ b/courseware/capa_module.py @@ -245,6 +245,10 @@ class LoncapaModule(XModule): correct_map = self.lcp.grade_answers(answers) except: self.lcp = LoncapaProblem(filename, id=lcp_id, state=old_state) + print {'error':sys.exc_info(), + 'answers':answers, + 'seed':self.lcp.seed, + 'filename':self.lcp.filename} return json.dumps({'success':'syntax'}) self.attempts = self.attempts + 1 diff --git a/settings.py b/settings.py index 9abff2f6ca..be214e5987 100644 --- a/settings.py +++ b/settings.py @@ -125,7 +125,12 @@ LOGGING = { } } -TRACK_DIR = None +#TRACK_DIR = None +DEBUG_TRACK_LOG = False +# Maximum length of a tracking string. We don't want e.g. a file upload in our log +TRACK_MAX_EVENT = 1000 +# Maximum length of log file before starting a new one. +MAXLOG = 500 execfile("../settings.py") diff --git a/track/views.py b/track/views.py index d793bf8911..2a368b3188 100644 --- a/track/views.py +++ b/track/views.py @@ -14,7 +14,6 @@ else: logfile = None file_index = 0 log_index = 0 -MAXLOG = 5 filename = None def make_file(): @@ -31,20 +30,28 @@ def make_file(): def log_event(event): global logfile, log_index + event_str = json.dumps(event) if settings.TRACK_DIR == None: # print event return - if logfile == None or log_index >= MAXLOG: + if logfile == None or log_index >= settings.MAXLOG: make_file() - event_str = json.dumps(event) - logfile.write(event_str+'\n') + logfile.write(event_str[:settings.TRACK_MAX_EVENT]+'\n') + if settings.DEBUG_TRACK_LOG: + print event_str log_index = log_index + 1 def user_track(request): + try: # TODO: Do the same for many of the optional META parameters + username = request.user.username + except: + username = "anonymous" + + # TODO: Move a bunch of this into log_event event = { - "username" : request.user.username, + "username" : username, "session" : request.META['HTTP_COOKIE'], "ip" : request.META['REMOTE_ADDR'], "event_source" : "browser", @@ -57,8 +64,13 @@ def user_track(request): return HttpResponse('success') def server_track(request, event_type, event, page=None): + try: + username = request.user.username + except: + username = "anonymous" + event = { - "username" : request.user.username, + "username" : username, "ip" : request.META['REMOTE_ADDR'], "event_source" : "server", "event_type" : event_type, diff --git a/util/views.py b/util/views.py index 4b6254b047..f61edf040e 100644 --- a/util/views.py +++ b/util/views.py @@ -10,6 +10,8 @@ import courseware.capa.calc from django.core.mail import send_mail from django.conf import settings import datetime +import sys +import track.views def calculate(request): # if not request.user.is_authenticated(): @@ -18,6 +20,9 @@ def calculate(request): try: result = courseware.capa.calc.evaluator({}, {}, equation) except: + event = {'error':map(str,sys.exc_info()), + 'equation':equation} + track.views.server_track(request, 'error:calc', event, page='calc') return HttpResponse(json.dumps({'result':'Invalid syntax'})) return HttpResponse(json.dumps({'result':result}))