ha-sys-mon-agent/sys-mon-agent.py
2024-05-01 13:25:07 +03:00

64 lines
1.8 KiB
Python

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()