#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
import time
import stat
import datetime
from gluon.utils import md5_hash
from gluon.restricted import RestrictedError
SLEEP_MINUTES = 5
DB_URI = 'sqlite://tickets.db'
ALLOW_DUPLICATES = True
path = os.path.join(request.folder, 'errors')
db = SQLDB(DB_URI)
db.define_table('ticket', SQLField('app'), SQLField('name'),
SQLField('date_saved', 'datetime'), SQLField('layer'),
SQLField('traceback', 'text'), SQLField('code', 'text'))
hashes = {}
while 1:
for file in os.listdir(path):
filename = os.path.join(path, file)
if not ALLOW_DUPLICATES:
fileobj = open(filename, 'r')
try:
file_data = fileobj.read()
finally:
fileobj.close()
key = md5_hash(file_data)
if key in hashes:
continue
hashes[key] = 1
error = RestrictedError()
error.load(request, request.application, filename)
modified_time = os.stat(filename)[stat.ST_MTIME]
modified_time = datetime.datetime.fromtimestamp(modified_time)
db.ticket.insert(app=request.application,
date_saved=modified_time,
name=file,
layer=error.layer,
traceback=error.traceback,
code=error.code)
os.unlink(filename)
db.commit()
time.sleep(SLEEP_MINUTES * 60)