Ejemplo n.º 1
0
def main():
    global_parser = ArgumentParser()
    global_parser.add_argument("--debug",
                               action='store_true',
                               help="Enable debug mode")
    global_parser.add_argument("-h",
                               "--help",
                               action='store_true',
                               help="Show this message and exit")

    parser = ArgumentParser(prog='maro',
                            description=MARO_BANNER,
                            parents=[global_parser])
    parser.set_defaults(func=_help_func(parser=parser))
    parser.add_argument('--version',
                        action='store_true',
                        help='Get version info')
    subparsers = parser.add_subparsers()

    # maro env
    parser_env = subparsers.add_parser(
        'env',
        help=
        ('Get all environment-related information, '
         'such as the supported scenarios, topologies. \n'
         'And it is also responsible to generate data to the specific environment, '
         'which has external data dependency.'),
        parents=[global_parser])
    parser_env.set_defaults(func=_help_func(parser=parser_env))
    load_parser_env(parser_env, global_parser)

    # maro data
    parser_data = subparsers.add_parser(
        'data',
        help="Data processing tools for MARO binary format.",
        parents=[global_parser])
    parser_data.set_defaults(func=_help_func(parser=parser_data))
    load_parser_data(prev_parser=parser_data, global_parser=global_parser)

    # maro meta
    parser_meta = subparsers.add_parser('meta',
                                        help="Manage the meta files for MARO.",
                                        parents=[global_parser])
    parser_meta.set_defaults(func=_help_func(parser=parser_meta))
    load_parser_meta(prev_parser=parser_meta, global_parser=global_parser)

    # maro grass
    parser_grass = subparsers.add_parser(
        "grass",
        help=
        "Manage distributed cluster with native virtual machines (for development only).",
        parents=[global_parser])
    parser_grass.set_defaults(func=_help_func(parser=parser_grass))
    load_parser_grass(prev_parser=parser_grass, global_parser=global_parser)

    # maro k8s
    parser_k8s = subparsers.add_parser(
        "k8s",
        help="Manage distributed cluster with Kubernetes.",
        parents=[global_parser])
    parser_k8s.set_defaults(func=_help_func(parser=parser_k8s))
    load_parser_k8s(prev_parser=parser_k8s, global_parser=global_parser)

    # maro inspector
    parser_inspector = subparsers.add_parser(
        'inspector',
        help=("Display visualization of experimental data."),
        parents=[global_parser])
    parser_inspector.set_defaults(func=_help_func(parser=parser_inspector))
    load_parser_inspector(parser_inspector, global_parser)

    # maro process
    parser_process = subparsers.add_parser(
        "process",
        help="Run application by mulit-process to simulate distributed mode.")
    parser_process.set_defaults(func=_help_func(parser=parser_process))
    load_parser_process(prev_parser=parser_process,
                        global_parser=global_parser)

    # maro project
    parser_project = subparsers.add_parser("project",
                                           help="Manage maro projects.")

    parser_project.set_defaults(func=_help_func(parser=load_parser_project))
    load_parser_project(prev_parser=parser_project,
                        global_parser=global_parser)

    args = None
    try:
        # Get args and parse global arguments
        args = parser.parse_args()
        if args.debug:
            GlobalParams.LOG_LEVEL = logging.DEBUG
        else:
            GlobalParams.LOG_LEVEL = logging.INFO
        if args.version:
            logger.info(f'{__version__}')
            return

        actual_args = _get_actual_args(namespace=args)

        # WARNING: We cannot assign any argument like 'func' in the CLI
        args.func(**actual_args)
    except CommandNotFoundError as e:
        logger.error_red(f"{e.__class__.__name__}: {e.get_message()}")
        logger.info(f"{e.usage}")
    except CliError as e:
        if args is None or args.debug:
            logger.error_red(
                f"{e.__class__.__name__}: {e.get_message()}\n{traceback.format_exc()}"
            )
        else:
            logger.error_red(f"{e.__class__.__name__}: {e.get_message()}")
Ejemplo n.º 2
0
Archivo: maro.py Proyecto: zhawan/maro
def main():
    global_parser = ArgumentParser()
    global_parser.add_argument("--debug",
                               action='store_true',
                               help="Enable debug mode")
    global_parser.add_argument("-h",
                               "--help",
                               action='store_true',
                               help="Show this message and exit")

    parser = ArgumentParser(prog='maro',
                            description=MARO_BANNER,
                            parents=[global_parser])
    parser.set_defaults(func=_help_func(parser=parser))
    parser.add_argument('--version',
                        action='store_true',
                        help='Get version info')
    subparsers = parser.add_subparsers()

    # maro env
    parser_env = subparsers.add_parser(
        'env',
        help=
        'Get all environment-related information, such as the supported scenarios, topologies. And it is also responsible to generate data to the specific environment, which has external data dependency.',
        parents=[global_parser])
    parser_env.set_defaults(func=_help_func(parser=parser_env))
    load_parser_env(parser_env, global_parser)

    # maro data
    parser_data = subparsers.add_parser(
        'data',
        help="Data processing tools for MARO binary format.",
        parents=[global_parser])
    parser_data.set_defaults(func=_help_func(parser=parser_data))
    load_parser_data(prev_parser=parser_data, global_parser=global_parser)

    # maro meta
    parser_meta = subparsers.add_parser('meta',
                                        help="Manage the meta files for MARO.",
                                        parents=[global_parser])
    parser_meta.set_defaults(func=_help_func(parser=parser_meta))
    load_parser_meta(prev_parser=parser_meta, global_parser=global_parser)

    # maro grass
    parser_grass = subparsers.add_parser(
        'grass',
        help=
        "Manage distributed cluster with native virtual machines (for development only).",
        parents=[global_parser])
    parser_grass.set_defaults(func=_help_func(parser=parser_grass))
    load_parser_grass(prev_parser=parser_grass, global_parser=global_parser)

    # maro k8s
    parser_k8s = subparsers.add_parser(
        'k8s',
        help="Manage distributed cluster with Kubernetes.",
        parents=[global_parser])
    parser_k8s.set_defaults(func=_help_func(parser=parser_k8s))
    load_parser_k8s(prev_parser=parser_k8s, global_parser=global_parser)

    # Get args and parse global arguments
    args = parser.parse_args()
    if args.debug:
        GlobalParams.LOG_LEVEL = logging.DEBUG
    else:
        GlobalParams.LOG_LEVEL = logging.INFO
    if args.version:
        logger.info(f'{__version__}')
        return

    actual_args = _get_actual_args(namespace=args)

    # WARNING: We cannot assign any argument like 'func' in the CLI
    try:
        args.func(**actual_args)
    except CliException as e:
        if args.debug:
            logger.error_red(f"{e.get_message()}\n{traceback.format_exc()}")
        else:
            logger.error_red(e.get_message())