mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01: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:
committed by
Richard Purdie
parent
ecfa7aaea3
commit
4364a26db1
@@ -16,12 +16,51 @@ import string
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import threading
|
||||||
import importlib
|
import importlib
|
||||||
from importlib import machinery
|
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)
|
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"))
|
loggerhandler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
|
||||||
logger.addHandler(loggerhandler)
|
logger.addHandler(loggerhandler)
|
||||||
logger.setLevel(logging.INFO)
|
logger.setLevel(logging.INFO)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ scriptpath.add_bitbake_lib_path()
|
|||||||
from oeqa.utils import load_test_components
|
from oeqa.utils import load_test_components
|
||||||
from oeqa.core.exception import OEQAPreRun
|
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():
|
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."
|
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."
|
||||||
|
|||||||
Reference in New Issue
Block a user