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")
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)
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)
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)
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)
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)
def default_thread_pool_callback(worker): worker_exception = worker.exception() if worker_exception: log.exception("Thread return exception: {}".format(worker_exception))