]> TLD Linux GIT Repositories - tld-builder.git/blob - TLD_Builder/report.py
c6e629427af3900fc764bdbc5556561b64201b75
[tld-builder.git] / TLD_Builder / report.py
1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
2
3 import string
4 import path
5
6 import ftp
7 import stopwatch
8 import mailer
9 from config import config
10
11 def unpackaged_files(b):
12     msg = "warning: Installed (but unpackaged) file(s) found:\n"
13     f = open(b.logfile)
14     copy_mode = 0
15     out = []
16     for l in f.xreadlines():
17         if l == msg:
18             copy_mode = 1
19             out.append(l)
20         elif copy_mode:
21             if l[0] != ' ' and l[0] != '\t':
22                 copy_mode = 0
23             else:
24                 out.append(l)
25     return out
26
27 def add_tld_builder_info(b):
28     l = open(b.logfile, "a")
29     l.write("Begin-TLD-Builder-Info\n")
30     l.write("Build-Time: %s\n\n" % b.build_time)
31     st = ftp.status()
32     if st != "":
33         l.write("Files queued for ftp:\n%s\n" % st)
34     ftp.clear_status()
35     l.writelines(unpackaged_files(b))
36     l.write("End-TLD-Builder-Info\n")
37
38 def info_from_log(b, target):
39     beg = "Begin-TLD-Builder-Info\n"
40     end = "End-TLD-Builder-Info\n"
41     f = open(b.logfile)
42     copy_mode = 0
43     need_header = 1
44     for l in f.xreadlines():
45         if l == beg:
46             if need_header:
47                 need_header = 0
48                 target.write("\n--- %s:%s:\n" % (b.spec, b.branch))
49             copy_mode = 1
50         elif copy_mode:
51             if l == end:
52                 copy_mode = 0
53             else:
54                 target.write(l)
55
56 def send_report(r, is_src = False):
57     s_failed = ' '.join([b.spec for b in r.batches if b.build_failed])
58     s_ok = ' '.join([b.spec for b in r.batches if not b.build_failed])
59     upgrades_status = [b.upgraded for b in r.batches]
60
61     if s_failed: s_failed = "ERRORS: %s" % s_failed
62     if s_ok: s_ok = "OK: %s" % s_ok
63
64     subject = ''
65
66     if 'test-build' in r.flags:
67         subject = 'TEST build '
68
69     if not is_src and 'upgrade' in r.flags and False in upgrades_status:
70         subject = 'upgrade failed '
71
72     subject += ' '.join((s_failed, s_ok)).strip()
73
74     m = mailer.Message()
75
76     m.write("Request by: %s\n\n" % r.requester_email)
77     for b in r.batches:
78         if b.build_failed and b.logfile == None:
79             info = b.skip_reason
80         elif b.build_failed:
81             info = "FAILED"
82         else:
83             info = "OK"
84         m.write("%s (%s): %s\n" % (b.spec, b.branch, info))
85
86     for b in r.batches:
87         if b.logfile != None:
88             info_from_log(b, m)
89
90     for b in r.batches:
91         if (b.is_command () or b.build_failed) and b.logfile != None:
92             m.write("\n\n*** buildlog for %s\n" % b.spec)
93             m.append_log(b.logfile)
94             m.write("\n\n")
95
96     m.set_headers(to = r.requester_email,
97                   subject = subject[0:100])
98     if is_src:
99         m.set_header("Message-ID", "<req-%s@tld.src.builder>" % r.id)
100     else:
101         m.set_header("References", "<req-%s@tld.src.builder>" % r.id)
102         m.set_header("In-Reply-To", "<req-%s@tld.src.builder>" % r.id)
103     m.send()
104
105     m.remove_header("To")
106     m.remove_header("Cc")
107     m.set_header("To", config.builder_list)
108     # reset Message-ID
109     m.set_std_headers()
110     if is_src:
111         m.set_header("Message-ID", "<%s@tld.src.builder>" % r.id)
112     else:
113         m.set_header("References", "<%s@tld.src.builder>" % r.id)
114         m.set_header("In-Reply-To", "<%s@tld.src.builder>" % r.id)
115     m.send()
116
117 def send_cia_report(r, is_src = False):
118
119     subject = 'DeliverXML'
120
121     m = mailer.Message()
122     if (len(config.bot_email) == 0):
123         return
124
125     m.set_headers(to = config.bot_email,
126                   subject = subject)
127     m.set_header("Message-ID", "<%s@tld.src.builder>" % r.id)
128     m.set_header("X-mailer", "$Id$")
129     m.set_header("X-builder", "TLD")
130
131     # get header of xml message from file
132     f = open(path.root_dir + '/TLD_Builder/cia-head.xml')
133     m.write(f.read())
134     f.close()
135
136     # write in iteration list and status of all processed files
137     for b in r.batches:
138         m.write('<package name="%s" arch="%s">\n' % (b.spec, b.branch))
139         if b.build_failed:
140             m.write('<failed/>\n')
141         else:
142             m.write('<success/>\n')
143         m.write('</package>\n')
144
145     # get footer of xml message from file
146     f = open(path.root_dir + '/TLD_Builder/cia-foot.xml')
147     m.write(f.read())
148     f.close()
149
150     # send the e-mail
151     m.send()