import os
import settings
LOG_NAME = 'bugzscout'
class BugzScout(object):
def __init__(self, parent=None):
import logging
if parent:
self.logger = logging.getLogger('%s.%s' % (parent, LOG_NAME))
else:
self.logger = logging.getLogger(LOG_NAME)
if not self.logger.handlers:
try:
self.logger.addHandler(logging.FileHandler(filename=os.path.join(settings.KILN_REPOSITORY_ROOT, 'errors.txt')))
except IOError, e:
# Can't open that file.
try:
# Try putting one in the current directory.
self.logger.addHandler(logging.FileHandler(filename='errors.txt'))
self.logger.error(e)
except IOError, e:
# OK, files aren't an option. Go to stderr.
self.logger.addHandler(logging.StreamHandler())
self.logger.error(e)
def report_exception(self, e, extra='', project='Kiln', area='Backend'):
def get_stack_trace():
import traceback, sys
return '\n'.join(traceback.format_exception(*sys.exc_info()))
if extra:
extra += '\n\n'
extra += get_stack_trace()
self.report_error(str(e), extra, project, area)
def report_error(self, error_msg, extra='', project='Kiln', area='Backend'):
from socket import gethostname
if extra:
extra = 'Host: %s\n\n%s' % (gethostname(), extra)
description = str(error_msg)
bug = {'ScoutUserName': 'BugzScout',
'ScoutProject': project,
'ScoutArea': area,
'Description': description,
'Extra': extra}
self.logger.error(description)
if extra:
self.logger.error('Extra info:\n%s', extra)
if settings.HOSTED:
self.send_bug(bug)
def send_bug(self, bug):
import urllib, urllib2
try:
urllib2.urlopen('http://our.fogbugz.com/scoutSubmit.asp', urllib.urlencode(bug))
except Exception, e:
self.logger.critical('Error reporting bug to BugzScout\n%s', bug)
self.logger.critical('Exception: %s', e)
def report_exception(*args, **kwargs):
return BugzScout().report_exception(*args, **kwargs)
def report_error(*args, **kwargs):
return BugzScout().report_error(*args, **kwargs)
|
Loading...