mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
oe-selftest: Implement console 'keepalive' output
Similar to bitbake, implement a 'keepalive' output to the console to ensure CI systems do not kill the process. The default timeout for bitbake is 5000s. (From OE-Core rev: 77939cca96fa5467c88eafa3ac0db2db4aef09d6) Signed-off-by: Nathan Rossi <nathan@nathanrossi.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
ecfa7aaea3
commit
4364a26db1
|
@ -16,12 +16,51 @@ import string
|
|||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import threading
|
||||
import importlib
|
||||
from importlib import machinery
|
||||
|
||||
def logger_create(name, stream=None):
|
||||
class KeepAliveStreamHandler(logging.StreamHandler):
|
||||
def __init__(self, keepalive=True, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
if keepalive is True:
|
||||
keepalive = 5000 # default timeout
|
||||
self._timeout = threading.Condition()
|
||||
self._stop = False
|
||||
|
||||
# background thread waits on condition, if the condition does not
|
||||
# happen emit a keep alive message
|
||||
def thread():
|
||||
while not self._stop:
|
||||
with self._timeout:
|
||||
if not self._timeout.wait(keepalive):
|
||||
self.emit(logging.LogRecord("keepalive", logging.INFO,
|
||||
None, None, "Keepalive message", None, None))
|
||||
|
||||
self._thread = threading.Thread(target = thread, daemon = True)
|
||||
self._thread.start()
|
||||
|
||||
def close(self):
|
||||
# mark the thread to stop and notify it
|
||||
self._stop = True
|
||||
with self._timeout:
|
||||
self._timeout.notify()
|
||||
# wait for it to join
|
||||
self._thread.join()
|
||||
super().close()
|
||||
|
||||
def emit(self, record):
|
||||
super().emit(record)
|
||||
# trigger timer reset
|
||||
with self._timeout:
|
||||
self._timeout.notify()
|
||||
|
||||
def logger_create(name, stream=None, keepalive=None):
|
||||
logger = logging.getLogger(name)
|
||||
loggerhandler = logging.StreamHandler(stream=stream)
|
||||
if keepalive is not None:
|
||||
loggerhandler = KeepAliveStreamHandler(stream=stream, keepalive=keepalive)
|
||||
else:
|
||||
loggerhandler = logging.StreamHandler(stream=stream)
|
||||
loggerhandler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
|
||||
logger.addHandler(loggerhandler)
|
||||
logger.setLevel(logging.INFO)
|
||||
|
|
|
@ -33,7 +33,7 @@ scriptpath.add_bitbake_lib_path()
|
|||
from oeqa.utils import load_test_components
|
||||
from oeqa.core.exception import OEQAPreRun
|
||||
|
||||
logger = scriptutils.logger_create('oe-selftest', stream=sys.stdout)
|
||||
logger = scriptutils.logger_create('oe-selftest', stream=sys.stdout, keepalive=True)
|
||||
|
||||
def main():
|
||||
description = "Script that runs unit tests against bitbake and other Yocto related tools. The goal is to validate tools functionality and metadata integrity. Refer to https://wiki.yoctoproject.org/wiki/Oe-selftest for more information."
|
||||
|
|
Loading…
Reference in New Issue
Block a user