#!/usr/bin/env python3

"""
实现自动配置 MGR
"""

import sys
import logging
import argparse
from dbma.gather import cpu_cores
from dbma.mysqlops import MySQLMGRInstaller
import dbma.common as common
import dbma.checkings as checkings


def parser_cmd_args():
    """
    实现命令行参数的处理
    """
    def _cores(c: int = 0) -> int:
        if c == 0:
            return cpu_cores().counts
        try:
            return int(c)
        except TypeError:
            logging.error(
                f"{c} convert to int fail !!! reset cores to {cpu_cores().counts}")
        return cpu_cores().counts

    parser = argparse.ArgumentParser(__name__)
    parser.add_argument('--port', type=int, default=3306, help="instance port")
    parser.add_argument('--pkg', type=str,
                        default="mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz", help="mysql install package")
    parser.add_argument('--max-mem', type=int, default=1024,
                        help="the max memory mysql instances can use")
    parser.add_argument('--cores', type=_cores,
                        default=0, help='cpu logic cores')
    parser.add_argument('--log', type=str, default='info',
                        choices=['debug', 'info', 'warning', 'error'])
    parser.add_argument('--members', type=str,
                        help="member ip list(comma sep)")
    args = parser.parse_args()
    return args


def main():
    # config logger
    args = parser_cmd_args()

    level = getattr(logging, args.log.upper())
    logger = logging.getLogger('dbm-agent')
    logger.setLevel(level)
    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(threadName)s - %(levelname)s - %(message)s')
    stream_handler.setFormatter(formatter)
    logger.addHandler(stream_handler)
    # 创建 MGR 安装器
    installer = MySQLMGRInstaller.from_members(port=args.port, pkg=args.pkg,
                                               max_mem=args.max_mem, cores=args.cores,
                                               members=args.members)
    installer.install()


if __name__ == "__main__":
    main()
