-# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
-
-import sys
-import log
-import traceback
-import StringIO
-import os
-import time
-
-# this module, as it deals with internal error handling shouldn't
-# import anything beside status
-import status
-
-try:
- import mailer
- def sendmail(trace):
- m = mailer.Message()
- m.set_headers(to = status.admin, cc = "%s, %s" % (status.email, status.builder_list), subject = "fatal python exception")
- m.write("%s\n" % trace)
- m.write("during: %s\n" % status.get())
- m.send()
-except:
- def sendmail(trace):
- # don't use mailer.py; it safer this way
- f = os.popen("/usr/sbin/sendmail -i -t", "w")
- f.write("""Subject: builder failure
-To: %s
-Cc: %s, %s
-Date: %s
-X-PLD-Builder: fatal error report
-
-%s
-
-during: %s
-""" % (status.admin, status.email, status.builder_list,
- time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()),
- trace, status))
- f.close()
-
-def wrap(main):
- try:
- main()
- except:
- exctype, value = sys.exc_info()[:2]
- if exctype == SystemExit:
- sys.exit(value)
- s = StringIO.StringIO()
- traceback.print_exc(file = s, limit = 20)
-
- log.alert("fatal python exception")
- log.alert(s.getvalue())
- log.alert("during: %s" % status.get())
-
- sendmail(s.getvalue())
-
- sys.exit(1)