Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2204)

Unified Diff: parallel_emerge

Issue 4318003: Print status messages in parallel_emerge about jobs that are longer than 2 mins. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git
Patch Set: s/full outputs/full output/ Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: parallel_emerge
diff --git a/parallel_emerge b/parallel_emerge
index acf17fb2d67493130f23a241ba5b8ccf76af4298..66b2334da64a8fa55118e4ab9389237b481ff62e 100755
--- a/parallel_emerge
+++ b/parallel_emerge
@@ -1235,8 +1235,9 @@ def PrintDepsMap(deps_map):
class EmergeJobState(object):
- __slots__ = ["done", "filename", "last_output_seek", "last_output_timestamp",
- "pkgname", "retcode", "start_timestamp", "target"]
+ __slots__ = ["done", "filename", "last_notify_timestamp", "last_output_seek",
+ "last_output_timestamp", "pkgname", "retcode", "start_timestamp",
+ "target"]
def __init__(self, target, pkgname, done, filename, start_timestamp,
retcode=None):
@@ -1254,6 +1255,11 @@ class EmergeJobState(object):
# The filename where output is currently stored.
self.filename = filename
+ # The timestamp of the last time we printed the name of the log file. We
+ # print this at the beginning of the job, so this starts at
+ # start_timestamp.
+ self.last_notify_timestamp = start_timestamp
+
# The location (in bytes) of the end of the last complete line we printed.
# This starts off at zero. We use this to jump to the right place when we
# print output from the same ebuild multiple times.
@@ -1549,26 +1555,43 @@ class EmergeQueue(object):
def _Status(self):
"""Print status."""
current_time = time.time()
- seconds = current_time - GLOBAL_START
- line = ("Pending %s, Ready %s, Running %s, Retrying %s, Total %s "
- "[Time %dm%.1fs Load %s]")
- qsize = self._emerge_queue.qsize()
- self._Print(line % (len(self._deps_map), qsize, len(self._jobs) - qsize,
- len(self._retry_queue), self._total_jobs,
- seconds / 60, seconds % 60, self._LoadAvg()))
+ no_output = True
# Print interim output every minute if --show-output is used. Otherwise,
- # only print output if a job has been running for 60 minutes or more.
+ # print notifications about running packages every 2 minutes, and print
+ # full output for jobs that have been running for 60 minutes or more.
if self._show_output:
interval = 60
+ notify_interval = 0
else:
interval = 60 * 60
+ notify_interval = 60 * 2
for target, job in self._jobs.iteritems():
if job:
last_timestamp = max(job.start_timestamp, job.last_output_timestamp)
if last_timestamp + interval < current_time:
self._print_queue.put(JobPrinter(job))
job.last_output_timestamp = current_time
+ no_output = False
+ elif (notify_interval and
+ job.last_notify_timestamp + notify_interval < current_time):
+ job_seconds = current_time - job.start_timestamp
+ args = (job.pkgname, job_seconds / 60, job_seconds % 60, job.filename)
+ info = "Still building %s (%dm%.1fs). Logs in %s" % args
+ job.last_notify_timestamp = current_time
+ self._Print(info)
+ no_output = False
+
+ # If we haven't printed any messages yet, print a general status message
+ # here.
+ if no_output:
+ seconds = current_time - GLOBAL_START
+ line = ("Pending %s, Ready %s, Running %s, Retrying %s, Total %s "
+ "[Time %dm%.1fs Load %s]")
+ qsize = self._emerge_queue.qsize()
+ self._Print(line % (len(self._deps_map), qsize, len(self._jobs) - qsize,
+ len(self._retry_queue), self._total_jobs,
+ seconds / 60, seconds % 60, self._LoadAvg()))
def _Finish(self, target):
"""Mark a target as completed and unblock dependecies."""
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698