From 2bf6e9a004577d78858b351d973c69711b728362 Mon Sep 17 00:00:00 2001 From: Tim Wendt Date: Tue, 8 Apr 2025 12:53:23 +0200 Subject: [PATCH] added host argument and new default for 0.0.0.0 --- flexbe_webui/webui_node.py | 8 +++++++- flexbe_webui/webui_server.py | 15 +++++++++++---- launch/flexbe_ocs.launch.py | 9 +++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/flexbe_webui/webui_node.py b/flexbe_webui/webui_node.py index 2dd9b98..cae4b7d 100644 --- a/flexbe_webui/webui_node.py +++ b/flexbe_webui/webui_node.py @@ -340,10 +340,16 @@ def main(args: List[str] = None): print(f' Invalid port = {args.port} - {exc}', flush=True) return + try: + host = str(args.host) + except Exception as exc: + print(f'\n Invalid host = {args.host} - {exc}', flush=True) + return + print('\nStarting FlexBE WebUI ROS node with server at ' f'port={port} logging={args.logging_level}...', flush=True) webui_node = WebuiNode(args) - server = threading.Thread(target=webui_node._server.run, args=(port, args.logging_level), daemon=True) + server = threading.Thread(target=webui_node._server.run, args=(port, host, args.logging_level), daemon=True) server.start() try: rclpy.spin(webui_node) diff --git a/flexbe_webui/webui_server.py b/flexbe_webui/webui_server.py index 67a3a09..ee8ce9d 100644 --- a/flexbe_webui/webui_server.py +++ b/flexbe_webui/webui_server.py @@ -620,10 +620,10 @@ async def behavior_manifest_generator(json_manifest_dict: Dict = Body(...)): print(traceback.format_exc().replace('%', '%%')) return False - def run(self, port: int = 8000, logging: str = 'warning'): + def run(self, port: int = 8000, host: str = '0.0.0.0', logging: str = 'warning'): """Run main web server loop.""" - print(f' Configure uvicorn port={port} logging={logging} ...', flush=True) - config = uvicorn.Config(self._app, port=port, log_level=logging) + print(f' Configure uvicorn port={port} host={host} logging={logging} ...', flush=True) + config = uvicorn.Config(self._app, host=host, port=port, log_level=logging) print(' Construct uvicorn server ...', flush=True) server = uvicorn.Server(config) print(' Run uvicorn server...', flush=True) @@ -636,6 +636,7 @@ def parse_args(args: List[str] = None): """Parse command line arguments for webui_server and webui_node.""" parser = argparse.ArgumentParser(description='FlexBE WebUI Server parameters') parser.add_argument('--port', type=str, default='8000', help="FlexBE WebUI Server port (default='8000')") + parser.add_argument('--host', type=str, default='0.0.0.0', help="IP address to bind the FlexBE WebUI server to (default: 0.0.0.0 — listen on all interfaces)") parser.add_argument('--config_folder', type=str, default='', help="FlexBE WebUI Server configuration file folder (default='' use 'flexbe_webui/config')") parser.add_argument('--config_file', type=str, default='', @@ -667,9 +668,15 @@ def main(args: List[str] = None): print(f'\n Invalid port = {args.port} - {exc}', flush=True) return + try: + host = str(args.host) + except Exception as exc: + print(f'\n Invalid host = {args.host} - {exc}', flush=True) + return + print(f'at port={port} logging={args.logging_level} ...', flush=True) webui_server = WebuiServer(args) - webui_server.run(port, args.logging_level) + webui_server.run(port, host, args.logging_level) print('shutdown FlexBE WebUI server!', flush=True) diff --git a/launch/flexbe_ocs.launch.py b/launch/flexbe_ocs.launch.py index fbf1b62..57a73d0 100644 --- a/launch/flexbe_ocs.launch.py +++ b/launch/flexbe_ocs.launch.py @@ -46,6 +46,10 @@ def generate_launch_description(): default_value='8000' ) + host = DeclareLaunchArgument('host', + description="IP address to bind the FlexBE WebUI server to (default: 0.0.0.0 — listen on all interfaces)", + default_value='0.0.0.0') + clear_cache = DeclareLaunchArgument('clear_cache', description='Clear existing package data cache and reprocess', default_value='false') @@ -62,12 +66,14 @@ def start_webui(context, *args, **kwargs): config_folder = LaunchConfiguration('config_folder').perform(context) config_file = LaunchConfiguration('config_file').perform(context) port = LaunchConfiguration('port').perform(context) + host = LaunchConfiguration('host').perform(context) clear_cache = LaunchConfiguration('clear_cache').perform(context) print('Setting up launch for FlexBE WebUI') print(f" offline : '{offline}'") print(f" config_folder: '{config_folder}'") print(f" config_file : '{config_file}'") print(f" port : '{port}'") + print(f" host : '{host}'") print(f" clear_cache : '{clear_cache}'") node_args = [] @@ -77,6 +83,8 @@ def start_webui(context, *args, **kwargs): node_args += ['--config_file', config_file] if port != '': node_args += ['--port', port] + if host != '': + node_args += ['--host', host] if clear_cache.lower() == 'true': node_args += ['--clear_cache', 'true'] @@ -117,6 +125,7 @@ def start_webui(context, *args, **kwargs): config_folder, config_file, port, + host, clear_cache, behavior_mirror, client_delay,