log viewer

This commit is contained in:
j 2011-11-01 17:08:09 +01:00
commit a0cf082dcf
10 changed files with 573 additions and 53 deletions

View file

@ -1,63 +0,0 @@
# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
from __future__ import division, with_statement
import logging
import sys
class ErrorHandler(logging.Handler):
def __init__(self):
logging.Handler.__init__(self)
"""An exception log handler that log entries into log database.
If the request is passed as the first argument to the log record,
request data will be provided in the
"""
def emit(self, record):
import traceback
from django.views.debug import ExceptionReporter
from django.conf import settings
import models
user = None
line = 0
text = ''
url = ''
try:
if sys.version_info < (2,5):
# A nasty workaround required because Python 2.4's logging
# module doesn't support passing in extra context.
# For this handler, the only extra data we need is the
# request, and that's in the top stack frame.
request = record.exc_info[2].tb_frame.f_locals['request']
else:
request = record.request
request_repr = repr(request)
if request.user.is_authenticated():
user = request.user
url = request.META.get('PATH_INFO', '')
except:
request = None
request_repr = "%s %s\n\nRequest repr() unavailable" % (record.levelname, record.msg)
if record.exc_info:
stack_trace = '\n'.join(traceback.format_exception(*record.exc_info))
stack_info = traceback.extract_tb(record.exc_info[2])
if stack_info:
url = stack_info[-1][0]
line = stack_info[-1][1]
else:
stack_trace = 'No stack trace available'
text = "%s\n\n%s" % (stack_trace, request_repr)
if text:
l = models.Log(
text=text,
line=line,
url=url
)
if user:
l.user = user
l.save()

View file

@ -3,7 +3,6 @@
from __future__ import division, with_statement
from django.db import models
from django.contrib.auth.models import User
class Page(models.Model):
@ -15,22 +14,3 @@ class Page(models.Model):
def __unicode__(self):
return self.name
class Log(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User, default=None, blank=True, null=True)
url = models.CharField(max_length=1000, default='')
line = models.IntegerField(default=0)
text = models.TextField(blank=True)
def __unicode__(self):
return u"%s" % self.id
def json(self):
return {
'created': self.created,
'modified': self.modified,
'user': self.user and self.user.username or '',
'type': self.type,
'message': self.message,
}

View file

@ -92,35 +92,3 @@ def redirect_url(request, url):
else:
return HttpResponse('<script>document.location.href=%s;</script>'%json.dumps(url))
def log(request):
'''
param data {
url: url
line: line
text: text
}
return {
status: ...
data: {
name:
body:
}
}
'''
data = json.loads(request.POST['data'])
if request.user.is_authenticated():
user = request.user
else:
user = None
if 'text' in data:
l = models.Log(
text=data['text'],
line=int(data.get('line', 0)),
url=data.get('url', '')
)
if user:
l.user = user
l.save()
response = json_response()
return render_to_json_response(response)
actions.register(log)