Exemplo n.º 1
0
def main(conf):
    # 启动调度器
    scheduler = Scheduler(conf)
    scheduler.start()
    # 启动输入流程
    scheduler_server = SchedulerServer(conf, scheduler)
    scheduler_server.start()

    def signal_handler(signalnum, frame):
        conf['log'].info("received a signal:%s" % signalnum)
        scheduler_server.stop("stops")
        exit(1)

    signal.signal(signal.SIGTERM, signal_handler)
    signal.signal(signal.SIGINT, signal_handler)
    signal.signal(signal.SIGUSR1, lambda a, b: profiling_signal_handler("scheduler", a, b))

    try:
        handler = ScheduleHandler(scheduler)
        processor = SchedulerService.Processor(handler)
        transport = TSocket.TServerSocket(port=conf['server']['port'])
        tfactory = TTransport.TBufferedTransportFactory()
        pfactory = TBinaryProtocol.TBinaryProtocolFactory()
        server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory, daemon=True)
        server.setNumThreads(conf['server']['server_thread_num'])
        server.serve()
    except Exception as e:
        log.error("调度器启动失败...")
        log.exception(e)
        conf['log'].error(str(traceback.format_exc()))
        scheduler_server.stop("fail")
    scheduler_server.stop("success")
Exemplo n.º 2
0
 def serveThread(self):
     while self.running:
         try:
             client = self.clients.get()
             if client == STOP_TOKEN:
                 break
             self.serveClient(client)
         except Exception as x:
             logger.exception(x)
Exemplo n.º 3
0
    def create_table(self, name):
        mongo_collection = self.db[name]

        # 因为是唯一索引,所以要确保不会出错
        try:
            mongo_collection.ensure_index(MongoBackend.MONGO_ROW_KEY,
                                          background=True,
                                          unique=True)
        except Exception as e:
            log.warn("索引好像已经创建,引起了重建异常:")
            log.exception(e)
Exemplo n.º 4
0
    def test_register_success(self, case):
        allure.dynamic()
        with allure.step("第一步:准备数据"):
            with allure.step("接口地址"):
                url = conf.get("env", "host") + case["url"]
                allure.attach(
                    body=url,
                    name="接口请求地址")  # , extension=allure.attachment_type.TEXT
            with allure.step("请求方法"):
                method = case["method"]
                allure.attach(body=method,
                              name="接口请求方法",
                              extension=allure.attachment_type.TEXT)
                headers = eval(conf.get("env", "headers"))
            with allure.step("请求数据"):
                case["data"] = replace_data(case["data"])
                json = case["data"]
                allure.attach(body=json,
                              name="用例数据",
                              extension=allure.attachment_type.JSON)
            with allure.step("预期结果"):
                expected = eval(case["expected"])
                allure.attach(body=case["expected"],
                              name="预期结果",
                              extension=allure.attachment_type.TEXT)
            row = case["case_id"] + 1
            # 发送请求

        with allure.step("第二步:获取响应结果"):
            response = self.request.send_request(url=url,
                                                 method=method,
                                                 headers=headers,
                                                 json=eval(json))
            allure.attach(str(response.json()), "响应结果",
                          allure.attachment_type.JSON)
        res = response.json()
        with allure.step("第三步:测试结果"):
            try:
                assert expected["code"] == res["code"]
                assert expected["msg"] == res["msg"]
            except AssertionError as e:
                self.excel1.write_data(row=None, column=8, value="未通过")
                log.error(f"用例{case['title']},测试未通过")
                log.exception(e)
                raise e
            else:
                self.excel1.write_data(row=row, column=8, value="通过")
                log.info(f"用例{case['title']},测试通过")
                allure.attach(f"{case['title']}用例测试通过", "测试结果",
                              allure.attachment_type.TEXT)
Exemplo n.º 5
0
    def serve(self):
        # modify the original routine to break on interrupt, in order to exit gracefully.

        threads = []
        self.running = True
        for i in range(self.threads):
            try:
                t = threading.Thread(target=self.serveThread)
                t.setDaemon(self.daemon)
                t.start()
                threads.append(t)
            except Exception as x:
                logger.exception(x)

        # Pump the socket for clients
        self.serverTransport.listen()
        while True:
            try:
                client = self.serverTransport.accept()
                if not client:
                    continue
                self.clients.put(client)
            except error as e:
                if e.errno == 4:
                    logger.info(
                        "Thrift server interrupted, shutdown listen socket...")
                    self.serverTransport.close()
                    self.running = False
                    logger.info("Telling thrift workers to die... count = %d" %
                                len(threads))
                    for t in threads:
                        self.clients.put(STOP_TOKEN)
                    logger.info(
                        "Waiting for thrift threads to die... count = %d" %
                        len(threads))
                    for t in threads:
                        t.join()
                    logger.info("Thrift threads all stopped. count = %d" %
                                len(threads))
                    break
            except Exception as x:
                logger.exception(x)
Exemplo n.º 6
0

if __name__ == '__main__':
    try:
        file_path = './scheduler.toml'
        opt, args = getopt.getopt(sys.argv[1:], 'f:', ['help'])
        for name, value in opt:
            if name == "-f":
                file_path = value
            elif name in ("-h", "--help"):
                usage()
                sys.exit()
            else:
                assert False, "unhandled option"

        with open(file_path, 'rb') as config:
            conf = pytoml.load(config)

        log.init_log(conf, level=conf['logger']['level'], console_out=conf['logger']['console'],
                     name=conf['server']['name'] + str(conf['server']['port']))
        conf['log'] = log

        main(conf)
        exit(0)

    except Exception, e:
        log.error("调度器启动失败...")
        log.exception(e)
        print traceback.format_exc()
        sys.exit(1)
Exemplo n.º 7
0
def default_thread_pool_callback(worker):
    worker_exception = worker.exception()
    if worker_exception:
        log.exception("Thread return exception: {}".format(worker_exception))