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