]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake: knotty: Implement console 'keepalive' output
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 26 Apr 2019 17:02:27 +0000 (18:02 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 1 May 2019 22:09:08 +0000 (23:09 +0100)
CI systems like jenkins and buildbot will timeout applications which haven't had console output
in some period of time. Add 'keepalive' output to knotty which gives output every 5000s if not
other output was made and tasks are still running. This reduces some problems encountered
with our CI testing.

(Bitbake rev: aa4f31e5741dd98acec73f16f6028e52f4c22d6f)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/bb/ui/knotty.py

index f362c23afc5225923c365da1570adc83d8460299..4567c148c8d639a31974babba964c1ef5c2db0a9 100644 (file)
@@ -234,6 +234,11 @@ class TerminalFilter(object):
         else:
             return "%ds" % (sec)
 
+    def keepAlive(self, t):
+        if not self.cuu:
+            print("Bitbake still alive (%ds)" % t)
+            sys.stdout.flush()
+
     def updateFooter(self):
         if not self.cuu:
             return
@@ -467,11 +472,17 @@ def main(server, eventHandler, params, tf = TerminalFilter):
     warnings = 0
     taskfailures = []
 
+    printinterval = 5000
+    lastprint = time.time()
+
     termfilter = tf(main, helper, console, errconsole, format, params.options.quiet)
     atexit.register(termfilter.finish)
 
     while True:
         try:
+            if (lastprint + printinterval) <= time.time():
+                termfilter.keepAlive(printinterval)
+                printinterval += 5000
             event = eventHandler.waitEvent(0)
             if event is None:
                 if main.shutdown > 1:
@@ -500,6 +511,8 @@ def main(server, eventHandler, params, tf = TerminalFilter):
                 continue
 
             if isinstance(event, logging.LogRecord):
+                lastprint = time.time()
+                printinterval = 5000
                 if event.levelno >= format.ERROR:
                     errors = errors + 1
                     return_value = 1