extras-buildsys/server PackageJob.py,1.8,1.9
Daniel Williams (dcbw)
fedora-extras-commits at redhat.com
Sat Jul 16 14:57:39 UTC 2005
Author: dcbw
Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv8987/server
Modified Files:
PackageJob.py
Log Message:
2005-07-16 Dan Williams <dcbw at redhat.com>
* server/PackageJob.py
- Include last 20 lines of relevant log file for failed build jobs
Index: PackageJob.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/PackageJob.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- PackageJob.py 14 Jul 2005 19:25:22 -0000 1.8
+++ PackageJob.py 16 Jul 2005 14:57:37 -0000 1.9
@@ -58,11 +58,12 @@
return self.args
class BuildError(exceptions.Exception):
- def __init__(self, args=None):
+ def __init__(self, msg, arch):
exceptions.Exception.__init__(self)
- self.args = args
+ self.msg = msg
+ self.arch = arch
def __str__(self):
- return self.args
+ return self.msg
class PackageJobController(threading.Thread):
@@ -464,7 +465,9 @@
self._failed()
except BuildError, e:
subj = 'Build Error (Job %s): %s on %s' % (self.uid, self.cvs_tag, self.target)
- msg = "%s\n\n Build logs may be found at %s" % (e.args, self._make_log_url())
+ msg = "%s\n\n Build logs may be found at %s\n\n" % (e.msg, self._make_log_url())
+ logtail = self._get_log_tail(e.arch)
+ msg = "%s\n-------------------------------------------------\n\n%s\n" % (msg, logtail)
self.email_result(resultstring=msg, subject=subj)
# Kill remaining jobs on other arches
self._archjobs_lock.acquire()
@@ -493,7 +496,7 @@
if job.builder_failed():
msg = "Job failed on arch %s\n" % (job.arch)
self._archjobs_lock.release()
- raise BuildError(msg)
+ raise BuildError(msg, job.arch)
else:
completed_jobs = completed_jobs + 1
self._archjobs_lock.release()
@@ -542,9 +545,6 @@
self._set_cur_stage('repodone')
self.wake()
- def _make_log_url(self, arch=None):
- return "%s/%s/%s-%s-%s-%s/" % (config_opts['log_url'], self.target, self.uid, self.name, self.ver, self.release)
-
def _succeeded(self):
self._set_cur_stage('needsign')
resultstring = """ %s (%s): Build on target %s succeeded.
@@ -554,6 +554,53 @@
self.email_result(resultstring)
self.bm.notify_job_done(self)
+ def _make_log_url(self, arch=None):
+ return "%s/%s/%s-%s-%s-%s/" % (config_opts['log_url'], self.target, self.uid, self.name, self.ver, self.release)
+
+ def _get_log_tail(self, arch):
+ """ Returns the last 20 lines of the most relevant log file """
+
+ pkg_dir = "%s-%s-%s-%s" % (self.uid, self.name, self.ver, self.release)
+ log_dir = os.path.join(config_opts['server_work_dir'], self.target, pkg_dir, arch)
+ final_log = None
+ build_log = "%s/%s" % (log_dir, "build.log")
+ root_log = "%s/%s" % (log_dir, "root.log")
+ builder_log = "%s/%s" % (log_dir, "builder.log")
+
+ # Try the most relevant log file first
+ if os.path.exists(build_log) and os.path.getsize(build_log) > 0:
+ final_log = build_log
+ elif os.path.exists(root_log) and os.path.getsize(root_log) > 0:
+ final_log = root_log
+ elif os.path.exists(builder_log) and os.path.getsize(builder_log) > 0:
+ final_log = builder_log
+
+ if not final_log:
+ return ""
+
+ seek_pos = os.path.getsize(final_log) - 4096
+ f = open(final_log, "r", 4096);
+ if seek_pos > 0:
+ f.seek(seek_pos)
+ try:
+ # throw away the rest of the line
+ t = f.next()
+ except:
+ pass
+ lines = []
+ # Grab the last 20 lines from the file
+ while True:
+ try:
+ line = f.next()
+ except StopIteration:
+ break
+ lines.append(line)
+ if len(lines) > 20: # only want last 20 lines
+ del lines[0]
+
+ f.close()
+ return "".join(lines)
+
def email_result(self, resultstring, subject=None):
"""send 'resultstring' to self.email from self.email_from"""
More information about the scm-commits
mailing list