From 3ea9d647ec35c4d30dcaa5b58e9471b775a4716c Mon Sep 17 00:00:00 2001 From: Alexandru DAMIAN Date: Mon, 17 Jun 2013 12:11:51 +0100 Subject: bitbake: knotty, xmlrpc: add observer-only mode I add an observer only mode for the knotty UI and the XMLRPC server that will allow the UI to register a callback with a server in order to receive events. The observer-UI is able to send read-only commands to the server, and also is able to register as an event handler. Read-only commands are the commands that do not change the state of the server and have been marked as such in the command module. The observer can switch to a full client if it calls addClient at any time, and the server has no other client running. (Bitbake rev: 4de9ee21f1fa4d04937cc7430fb1fc8b7a8f61e2) Signed-off-by: Alexandru DAMIAN Signed-off-by: Richard Purdie --- bitbake/lib/bb/ui/knotty.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'bitbake/lib/bb/ui/knotty.py') diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 389c3cc64d..c6a1d3f98a 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -216,21 +216,25 @@ class TerminalFilter(object): fd = sys.stdin.fileno() self.termios.tcsetattr(fd, self.termios.TCSADRAIN, self.stdinbackup) -def main(server, eventHandler, params, tf = TerminalFilter): - +def _log_settings_from_server(server): # Get values of variables which control our output includelogs, error = server.runCommand(["getVariable", "BBINCLUDELOGS"]) if error: logger.error("Unable to get the value of BBINCLUDELOGS variable: %s" % error) - return 1 + raise BaseException(error) loglines, error = server.runCommand(["getVariable", "BBINCLUDELOGS_LINES"]) if error: logger.error("Unable to get the value of BBINCLUDELOGS_LINES variable: %s" % error) - return 1 + raise BaseException(error) consolelogfile, error = server.runCommand(["getVariable", "BB_CONSOLELOG"]) if error: logger.error("Unable to get the value of BB_CONSOLELOG variable: %s" % error) - return 1 + raise BaseException(error) + return includelogs, loglines, consolelogfile + +def main(server, eventHandler, params, tf = TerminalFilter): + + includelogs, loglines, consolelogfile = _log_settings_from_server(server) if sys.stdin.isatty() and sys.stdout.isatty(): log_exec_tty = True @@ -254,7 +258,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): consolelog.setFormatter(conlogformat) logger.addHandler(consolelog) - try: + if not params.observe_only: params.updateFromServer(server) cmdline = params.parseActions() if not cmdline: @@ -271,9 +275,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): elif ret != True: logger.error("Command '%s' failed: returned %s" % (cmdline, ret)) return 1 - except xmlrpclib.Fault as x: - logger.error("XMLRPC Fault getting commandline:\n %s" % x) - return 1 + parseprogress = None cacheprogress = None @@ -320,7 +322,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): elif event.levelno == format.WARNING: warnings = warnings + 1 # For "normal" logging conditions, don't show note logs from tasks - # but do show them if the user has changed the default log level to + # but do show them if the user has changed the default log level to # include verbose/debug messages if event.taskpid != 0 and event.levelno <= format.NOTE: continue @@ -469,12 +471,15 @@ def main(server, eventHandler, params, tf = TerminalFilter): pass except KeyboardInterrupt: termfilter.clearFooter() - if main.shutdown == 1: + if params.observe_only: + print("\nKeyboard Interrupt, exiting observer...") + main.shutdown = 2 + if not params.observe_only and main.shutdown == 1: print("\nSecond Keyboard Interrupt, stopping...\n") _, error = server.runCommand(["stateStop"]) if error: logger.error("Unable to cleanly stop: %s" % error) - if main.shutdown == 0: + if not params.observe_only and main.shutdown == 0: print("\nKeyboard Interrupt, closing down...\n") interrupted = True _, error = server.runCommand(["stateShutdown"]) -- cgit v1.2.3-54-g00ecf