main.py 5.1 KB
Newer Older
J
JinHai-CN 已提交
1 2 3 4 5 6
import os
import sys
import time
import pdb
import argparse
import logging
7
import traceback
J
JinHai-CN 已提交
8
from logging import handlers
9 10

from yaml import full_load, dump
J
JinHai-CN 已提交
11 12 13
from parser import operations_parser
from local_runner import LocalRunner
from docker_runner import DockerRunner
14
from k8s_runner import K8sRunner
J
JinHai-CN 已提交
15 16

DEFAULT_IMAGE = "milvusdb/milvus:latest"
17 18 19 20 21 22 23 24 25 26 27 28 29 30
LOG_FOLDER = "logs"

# formatter = logging.Formatter('[%(asctime)s] [%(levelname)-4s] [%(pathname)s:%(lineno)d] %(message)s')
# if not os.path.exists(LOG_FOLDER):
#     os.system('mkdir -p %s' % LOG_FOLDER)
# fileTimeHandler = handlers.TimedRotatingFileHandler(os.path.join(LOG_FOLDER, 'milvus_benchmark'), "D", 1, 10)
# fileTimeHandler.suffix = "%Y%m%d.log"
# fileTimeHandler.setFormatter(formatter)
# logging.basicConfig(level=logging.DEBUG)
# fileTimeHandler.setFormatter(formatter)
# logger.addHandler(fileTimeHandler)
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
    datefmt='%Y-%m-%d:%H:%M:%S',
    level=logging.DEBUG)
J
JinHai-CN 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
logger = logging.getLogger("milvus_benchmark")


def positive_int(s):
    i = None
    try:
        i = int(s)
    except ValueError:
        pass
    if not i or i < 1:
        raise argparse.ArgumentTypeError("%r is not a positive integer" % s)
    return i


# # link random_data if not exists
# def init_env():
#     if not os.path.islink(BINARY_DATA_FOLDER):
#         try:
#             os.symlink(SRC_BINARY_DATA_FOLDER, BINARY_DATA_FOLDER)
#         except Exception as e:
#             logger.error("Create link failed: %s" % str(e))
#             sys.exit()


def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument(
59 60 61
        "--hostname",
        default="eros",
        help="server host name")
J
JinHai-CN 已提交
62
    parser.add_argument(
63 64 65
        "--image-tag",
        default="",
        help="image tag")
J
JinHai-CN 已提交
66
    parser.add_argument(
67 68 69 70 71 72 73 74 75 76 77 78 79
        "--image-type",
        default="",
        help="image type")
    # parser.add_argument(
    #     "--run-count",
    #     default=1,
    #     type=positive_int,
    #     help="run times for each test")
    # # performance / stability / accuracy test
    # parser.add_argument(
    #     "--run-type",
    #     default="search_performance",
    #     help="run type, default performance")
J
JinHai-CN 已提交
80
    parser.add_argument(
81
        '--suite',
J
JinHai-CN 已提交
82
        metavar='FILE',
83 84
        help='load test suite from FILE',
        default='suites/suite.yaml')
J
JinHai-CN 已提交
85
    parser.add_argument(
86 87 88 89 90 91
        '--local',
        action='store_true',
        help='use local milvus server')
    parser.add_argument(
        '--host',
        help='server host ip param for local mode',
J
JinHai-CN 已提交
92 93 94 95 96 97 98 99 100
        default='127.0.0.1')
    parser.add_argument(
        '--port',
        help='server port param for local mode',
        default='19530')

    args = parser.parse_args()

    # Get all benchmark test suites
101 102 103
    if args.suite:
        with open(args.suite) as f:
            suite_dict = full_load(f)
J
JinHai-CN 已提交
104 105
            f.close()
        # With definition order
106
        run_type, run_params = operations_parser(suite_dict)
J
JinHai-CN 已提交
107 108

    # init_env()
109
    # run_params = {"run_count": args.run_count}
J
JinHai-CN 已提交
110

111 112 113
    if args.image_tag:
        namespace = "milvus"
        logger.debug(args)
J
JinHai-CN 已提交
114 115
        # for docker mode
        if args.local:
116
            logger.error("Local mode and docker mode are incompatible")
J
JinHai-CN 已提交
117 118
            sys.exit(-1)
        # Docker pull image
119 120
        # if not utils.pull_image(args.image):
        #     raise Exception('Image %s pull failed' % image)
J
JinHai-CN 已提交
121
        # TODO: Check milvus server port is available
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
        # logger.info("Init: remove all containers created with image: %s" % args.image)
        # utils.remove_all_containers(args.image)
        # runner = DockerRunner(args)
        tables = run_params["tables"]
        for table in tables:
            # run tests
            server_config = table["server"]
            logger.debug(server_config)
            runner = K8sRunner()
            if runner.init_env(server_config, args):
                logger.debug("Start run tests")
                try:
                    runner.run(run_type, table)
                except Exception as e:
                    logger.error(str(e))
                    logger.error(traceback.format_exc())
                finally:
                    runner.clean_up()
            else:
                logger.error("Runner init failed")
        # for operation_type in operations:
        #     logger.info("Start run test, test type: %s" % operation_type)
        #     run_params["params"] = operations[operation_type]
        #     runner.run({operation_type: run_params}, run_type=args.run_type)
        #     logger.info("Run params: %s" % str(run_params))
J
JinHai-CN 已提交
147 148 149

    if args.local:
        # for local mode
150
        host = args.host
J
JinHai-CN 已提交
151 152
        port = args.port

153
        runner = LocalRunner(host, port)
J
JinHai-CN 已提交
154 155 156 157 158 159 160 161 162
        for operation_type in operations:
            logger.info("Start run local mode test, test type: %s" % operation_type)
            run_params["params"] = operations[operation_type]
            runner.run({operation_type: run_params}, run_type=args.run_type)
            logger.info("Run params: %s" % str(run_params))


if __name__ == "__main__":
    main()