import asyncio import argparse import logging import grpc import api from agent import AgentApi def get_arg_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( prog="sys-mon-agent", description="Launch the Home Assistant integrated system monitoring agent.") parser.add_argument("-p", "--port", type=int, default=8202) parser.add_argument("-a", "--address", type=str, default="[::]") parser.add_argument("--ssl-cert", type=argparse.FileType("rb"), dest="cert") parser.add_argument("--ssl-cert-key", type=argparse.FileType("rb"), dest="cert_key") return parser def configure_server_port(server: grpc.Server, arguments) -> grpc.Server: address_str = f"{arguments.address}:{arguments.port}" if arguments.cert and arguments.cert_key: cert_data = arguments.cert.read() cert_key_data = arguments.cert_key.read() credentials = grpc.ssl_server_credentials(((cert_data, cert_key_data))) logging.info("Listening to secure port on %s.", address_str) server.add_secure_port(address_str, credentials) else: logging.info("Listening to insecure port on %s.", address_str) server.add_insecure_port(address_str) return server async def main() -> None: args = get_arg_parser().parse_args() server = grpc.aio.server() api.add_AgentServicer_to_server(AgentApi(), server) server = configure_server_port(server, args) logging.info("Starting server...") await server.start() await server.wait_for_termination() if __name__ == "__main__": logging.basicConfig(level=logging.INFO) loop = asyncio.new_event_loop() try: loop.run_until_complete(main()) finally: loop.close()