]> TLD Linux GIT Repositories - TLD.git/blob - pld-builder.new/PLD_Builder/wrap.py
b9809a3709f438e31684a6aad852e0c6378fcb96
[TLD.git] / pld-builder.new / PLD_Builder / wrap.py
1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
2
3 import sys
4 import log
5 import traceback
6 import StringIO
7 import os
8 import time
9
10 # this module, as it deals with internal error handling shouldn't
11 # import anything beside status
12 import status
13
14 try:
15     import mailer
16     def sendmail(trace):
17         m = mailer.Message()
18         m.set_headers(to = status.admin, cc = "%s, %s" % (status.email, status.builder_list), subject = "fatal python exception")
19         m.write("%s\n" % trace)
20         m.write("during: %s\n" % status.get())
21         m.send()
22 except:
23     def sendmail(trace):
24         # don't use mailer.py; it safer this way
25         f = os.popen("/usr/sbin/sendmail -i -t", "w")
26         f.write("""Subject: builder failure
27 To: %s
28 Cc: %s, %s
29 Date: %s
30 X-PLD-Builder: fatal error report
31
32 %s
33
34 during: %s
35 """ % (status.admin, status.email, status.builder_list,
36              time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()),
37              trace, status))
38         f.close()
39
40 def wrap(main):
41     try:
42         main()
43     except:
44         exctype, value = sys.exc_info()[:2]
45         if exctype == SystemExit:
46             sys.exit(value)
47         s = StringIO.StringIO()
48         traceback.print_exc(file = s, limit = 20)
49
50         log.alert("fatal python exception")
51         log.alert(s.getvalue())
52         log.alert("during: %s" % status.get())
53
54         sendmail(s.getvalue())
55
56         sys.exit(1)