--- /dev/null
+# 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-TLD-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)