|
| 1 | +import argparse |
| 2 | +import asyncio |
| 3 | +import logging |
| 4 | + |
| 5 | +from amqp_fabric.amq_broker_connector import AmqBrokerConnector |
| 6 | + |
| 7 | +from data_agent import __version__ |
| 8 | +from data_agent.broker.instr_exec import cli_exec |
| 9 | +from data_agent.broker.instr_list_services import cli_list_services |
| 10 | +from data_agent.config_manager import component_config_view, init_configuration |
| 11 | +from data_agent.config_template import CONFIG_SECTION_BROKER, CONFIG_SECTION_SERVICE |
| 12 | + |
| 13 | +# logging.basicConfig(level=os.environ.get("LOGLEVEL", "DEBUG")) |
| 14 | +# logging.getLogger().addHandler(logging.StreamHandler()) |
| 15 | + |
| 16 | +log = logging.getLogger(__name__) |
| 17 | + |
| 18 | + |
| 19 | +async def create_amq_broker_connector(config, keep_alive_listen): |
| 20 | + config_broker = component_config_view(config, CONFIG_SECTION_BROKER) |
| 21 | + config_service = component_config_view(config, CONFIG_SECTION_SERVICE) |
| 22 | + |
| 23 | + amq = AmqBrokerConnector( |
| 24 | + amqp_uri=config_broker.uri, |
| 25 | + service_domain=config_service.domain, |
| 26 | + service_id=config_service.id, |
| 27 | + service_type=config_service.type, |
| 28 | + keep_alive_listen=keep_alive_listen, |
| 29 | + ) |
| 30 | + await amq.open(timeout=config_broker.timeout) |
| 31 | + return amq |
| 32 | + |
| 33 | + |
| 34 | +def run(): |
| 35 | + loop = asyncio.get_event_loop() |
| 36 | + |
| 37 | + parser = argparse.ArgumentParser(description="Broker Connected Data Agent CLI") |
| 38 | + subparsers = parser.add_subparsers(dest="instruction", help="Execute API call") |
| 39 | + subparsers.add_parser("exec") |
| 40 | + subparsers.add_parser("list_services") |
| 41 | + |
| 42 | + config, unrecognized_args = init_configuration( |
| 43 | + loop=loop, is_service=False, parser=parser |
| 44 | + ) |
| 45 | + known_args, _ = parser.parse_known_args() |
| 46 | + |
| 47 | + config_service = component_config_view(config, CONFIG_SECTION_SERVICE) |
| 48 | + |
| 49 | + log.info( |
| 50 | + '***** Broker Connected Agent CLI: "{}", Instruction: "{}", Ver: {} ******'.format( |
| 51 | + config_service["id"], known_args.instruction, __version__ |
| 52 | + ) |
| 53 | + ) |
| 54 | + |
| 55 | + broker = loop.run_until_complete( |
| 56 | + create_amq_broker_connector( |
| 57 | + config=config, keep_alive_listen=(known_args.instruction == "list_services") |
| 58 | + ) |
| 59 | + ) |
| 60 | + |
| 61 | + task = None |
| 62 | + |
| 63 | + if known_args.instruction == "exec": |
| 64 | + task = cli_exec(broker, config, unrecognized_args) |
| 65 | + elif known_args.instruction == "list_services": |
| 66 | + task = cli_list_services(broker, config, unrecognized_args) |
| 67 | + else: |
| 68 | + raise Exception("Unknown instruction") |
| 69 | + |
| 70 | + loop.run_until_complete(task) |
| 71 | + |
| 72 | + loop.run_until_complete(broker.close()) |
| 73 | + loop.run_until_complete(loop.shutdown_asyncgens()) |
| 74 | + loop.close() |
| 75 | + |
| 76 | + |
| 77 | +if __name__ == "__main__": |
| 78 | + run() |
0 commit comments