Merge pull request #332 from spametki/master

admin app: enhanced ticket support for gae
This commit is contained in:
mdipierro
2013-12-18 11:50:45 -08:00
+37 -33
View File
@@ -1093,11 +1093,12 @@ def design():
#Get crontab #Get crontab
cronfolder = apath('%s/cron' % app, r=request) cronfolder = apath('%s/cron' % app, r=request)
if not os.path.exists(cronfolder):
os.mkdir(cronfolder)
crontab = apath('%s/cron/crontab' % app, r=request) crontab = apath('%s/cron/crontab' % app, r=request)
if not os.path.exists(crontab): if not is_gae:
safe_write(crontab, '#crontab') if not os.path.exists(cronfolder):
os.mkdir(cronfolder)
if not os.path.exists(crontab):
safe_write(crontab, '#crontab')
plugins = [] plugins = []
@@ -1505,8 +1506,11 @@ def errors():
import hashlib import hashlib
app = get_app() app = get_app()
if is_gae:
method = request.args(1) or 'new' if not is_gae else "dbnew" method = 'dbold' if ('old' in
(request.args(1) or '')) else 'dbnew'
else:
method = request.args(1) or 'new'
db_ready = {} db_ready = {}
db_ready['status'] = get_ticket_storage(app) db_ready['status'] = get_ticket_storage(app)
db_ready['errmessage'] = T( db_ready['errmessage'] = T(
@@ -1573,32 +1577,30 @@ def errors():
for fn in tk_db(tk_table.id > 0).select(): for fn in tk_db(tk_table.id > 0).select():
try: try:
error = pickle.loads(fn.ticket_data) error = pickle.loads(fn.ticket_data)
except AttributeError: hash = hashlib.md5(error['traceback']).hexdigest()
if hash in delete_hashes:
tk_db(tk_table.id == fn.id).delete()
tk_db.commit()
else:
try:
hash2error[hash]['count'] += 1
except KeyError:
error_lines = error['traceback'].split("\n")
last_line = error_lines[-2]
error_causer = os.path.split(error['layer'])[1]
hash2error[hash] = dict(count=1,
pickel=error, causer=error_causer,
last_line=last_line, hash=hash,
ticket=fn.ticket_id)
except AttributeError, e:
tk_db(tk_table.id == fn.id).delete() tk_db(tk_table.id == fn.id).delete()
tk_db.commit() tk_db.commit()
hash = hashlib.md5(error['traceback']).hexdigest()
if hash in delete_hashes:
tk_db(tk_table.id == fn.id).delete()
tk_db.commit()
else:
try:
hash2error['hash']['count'] += 1
except KeyError:
error_lines = error['traceback'].split("\n")
last_line = error_lines[-2]
error_causer = os.path.split(error['layer'])[1]
hash2error[hash] = dict(count=1, pickel=error,
causer=error_causer,
last_line=last_line,
hash=hash, ticket=fn.ticket_id)
decorated = [(x['count'], x) for x in hash2error.values()] decorated = [(x['count'], x) for x in hash2error.values()]
decorated.sort(key=operator.itemgetter(0), reverse=True) decorated.sort(key=operator.itemgetter(0), reverse=True)
return dict(errors=[x[1] for x in decorated], app=app,
return dict(errors=[x[1] for x in decorated], app=app, method=method, db_ready=db_ready) method=method, db_ready=db_ready)
elif method == 'dbold': elif method == 'dbold':
tk_db, tk_table = get_ticket_storage(app) tk_db, tk_table = get_ticket_storage(app)
@@ -1606,16 +1608,18 @@ def errors():
if item[:7] == 'delete_': if item[:7] == 'delete_':
tk_db(tk_table.ticket_id == item[7:]).delete() tk_db(tk_table.ticket_id == item[7:]).delete()
tk_db.commit() tk_db.commit()
tickets_ = tk_db(tk_table.id > 0).select(tk_table.ticket_id, tk_table.created_datetime, orderby=~tk_table.created_datetime) tickets_ = tk_db(tk_table.id > 0).select(tk_table.ticket_id,
tk_table.created_datetime,
orderby=~tk_table.created_datetime)
tickets = [row.ticket_id for row in tickets_] tickets = [row.ticket_id for row in tickets_]
times = dict( times = dict([(row.ticket_id, row.created_datetime) for
[(row.ticket_id, row.created_datetime) for row in tickets_]) row in tickets_])
return dict(app=app, tickets=tickets, method=method,
return dict(app=app, tickets=tickets, method=method, times=times, db_ready=db_ready) times=times, db_ready=db_ready)
else: else:
for item in request.vars: for item in request.vars:
# delete_all} rows doesn't contain any ticket # delete_all rows doesn't contain any ticket
# Remove anything else as requested # Remove anything else as requested
if item[:7] == 'delete_' and (not item == "delete_all}"): if item[:7] == 'delete_' and (not item == "delete_all}"):
os.unlink(apath('%s/errors/%s' % (app, item[7:]), r=request)) os.unlink(apath('%s/errors/%s' % (app, item[7:]), r=request))