[admin] use logger from qommon

git-svn-id: svn://localhost/lasso-conform/trunk@41 2a3a78c3-912c-0410-af21-e1fb2d1df599
This commit is contained in:
bdauvergne 2010-10-08 12:53:58 +00:00
parent 7ded0be538
commit 5c884401b5
3 changed files with 4 additions and 169 deletions

View File

@ -1,165 +0,0 @@
import random
from quixote import get_publisher, get_request, get_response, redirect
from quixote.directory import Directory
from menu import *
import lcs
from qommon import logger
from qommon import misc
from qommon.form import *
from lcs.users import User
from qommon import template
class ByUserDirectory(Directory):
def _q_lookup(self, component):
return ByUserPages(component)
class LoggerDirectory(Directory):
_q_exports = ['', 'download', 'by_user']
by_user = ByUserDirectory()
def _q_index [html] (self):
get_response().breadcrumb.append( ('logger/', _('Logs')) )
html_top('logger', title = _('Logs'))
request = get_request()
logfile = request.get_field('logfile', 'lcs.log')
if not logfile.startswith(str('lcs.log')) or str('/') in str(logfile):
return template.error_page(_('Bad log file: %s') % logfile)
logfilename = str(os.path.join(get_publisher().app_dir, logfile))
if not os.path.exists(logfilename):
_('Nothing to show')
else:
if logfile:
'<a href="download?logfile=%s">%s</a>' % (logfile, _('Download Raw Log File'))
else:
'<a href="download">%s</a>' % _('Download Raw Log File')
user_color_keys = {}
last_date = None
'<table id="logs">\n'
'<thead> <tr>'
' <th>%s</th>' % _('Time')
' <th>%s</th>' % _('User')
' <th>%s</th>' % _('Message')
'<tr></thead>\n'
'<tbody>\n'
i = 1
for line in file(logfilename):
d = logger.readline(line)
if not d:
continue
user_color_key = d['user_id']
if user_color_key == 'anonymous':
user_color_key += d['ip']
if not user_color_keys.has_key(user_color_key):
user_color_keys[user_color_key] = ''.join(
['%x' % random.randint(0xc, 0xf) for x in range(3)])
'<tr class="level-%s" style="background: #%s;">' % (
d['level'].lower(), user_color_keys[user_color_key])
if (last_date != d['date']):
' <td class="time">%s&nbsp;%s</td>' % (d['date'], d['hour'][:-4])
last_date = d['date']
else:
' <td class="time">%s</td>' % (d['hour'][:-4])
if d['user_id'] == 'anonymous':
userlabel = _('Anonymous')
ip = d['ip']
' <td class="userlabel"><span title="%s">%s</span></td>' % (ip, userlabel)
elif d['user_id'] == 'unlogged':
userlabel = _('Unlogged')
ip = d['ip']
' <td class="userlabel"><span title="%s">%s</span></td>' % (ip, userlabel)
else:
try:
user = User.get(d['user_id'])
except KeyError:
userlabel = _('Unknown')
else:
userlabel = htmltext(user.name.replace(str(' '), str('&nbsp;')))
' <td class="userlabel">%s</td>' % userlabel
' <td class="message">%s</td>' % d['message']
'</tr>\n'
'</tbody>\n'
'</table>\n'
logfiles = [x for x in os.listdir(get_publisher().app_dir) if x.startswith(str('lcs.log'))]
if len(logfiles) > 1:
options = []
for lfile in logfiles:
firstline = file(os.path.join(get_publisher().app_dir, lfile)).readline()
d = logger.readline(firstline)
if not d:
continue
if logfile == lfile:
selected = 'selected="selected" '
else:
selected = ''
options.append({'selected': selected, 'lfile': lfile,
'date': '%s %s' % (d['date'], d['hour'])})
'<form id="other-log-select">'
_('Select another logfile:')
'<select name="logfile">'
options.sort(lambda x,y: cmp(x['date'], y['date']))
options.reverse()
for option in options:
option['since'] = str(_('Since: %s') % option['date'])[:-4]
'<option value="%(lfile)s"%(selected)s>%(since)s</option>' % option
'</select>'
'<input type="submit" value="%s" />' % _('Submit')
def download(self):
request = get_request()
logfile = request.get_field('logfile', 'lcs.log')
if not logfile.startswith(str('lcs.log')) or str('/') in logfile:
return template.error_page(_('Bad log file: %s') % logfile)
logfilename = os.path.join(get_publisher().app_dir, logfile)
response = get_response()
response.set_content_type('text/x-log', 'iso-8859-1')
response.set_header('content-disposition', 'attachment; filename=%s' % logfile)
return open(logfilename).read()
class ByUserPages(Directory):
_q_exports = ['']
def __init__(self, component):
try:
self.user = User.get(component)
except KeyError:
raise TraversalError()
def _q_index [html] (self):
html_top('logger', title = _('Logs'))
'<h2>%s - %s</h2>' % (_('User'), self.user.name)
last_date = None
'<table id="logs">'
'<thead> <tr>'
' <th>%s</th>' % _('Time')
' <th>%s</th>' % _('Message')
'<tr></thead>'
'<tbody>'
if os.path.exists(logger.logfile):
for line in file(logger.logfile):
d = logger.readline(line)
if not d or d['user_id'] != str(self.user.id):
continue
'<tr>'
if (last_date != d['date']):
' <td class="time">%s&nbsp;%s</td>' % (d['date'], d['hour'][:-4])
last_date = d['date']
else:
' <td class="time">%s</td>' % (d['hour'][:-4])
' <td><a href="%s">%s</a></td>' % (d['url'], d['message'])
'</tr>'
'</tbody>'
'</table>'

View File

@ -5,7 +5,7 @@ from quixote.directory import Directory, AccessControlled
import settings
import users
import logger
from qommon.admin import logger
from qommon import errors

View File

@ -13,7 +13,7 @@ import liberty
from qommon import saml2
from qommon import errors
from qommon import logger
from qommon import get_logger
from qommon import get_cfg
from qommon import template
from qommon.form import *
@ -71,7 +71,7 @@ class LoginDirectory(Directory):
_q_exports = ['']
def _q_index [html] (self):
logger.info('login')
get_logger().info('login')
ident_methods = get_cfg('identification', {}).get('methods', [])
if len(ident_methods) == 0:
@ -389,7 +389,7 @@ class RootDirectory(Directory):
def logout(self):
logger.info('logout')
get_logger().info('logout')
session = get_session()
if not session:
return redirect('/')