64 lines
1.8 KiB
Python
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()
|