def stop_process(program_id): program = operate.get_program(program_id=program_id) if program.status == STATUS.STOPPED: logger.warning("程序%s已停止,无需重复停止" % program.id) raise exceptions.AlreadyStopException() if program.status not in CAN_STOP_STATUS: logger.warning("程序%s不是运行状态,无法停止" % program.name) raise exceptions.StopException() machine = program.machine if not operate.change_status(program.id, CAN_STOP_STATUS, STATUS.STOPPING): logger.error("程序%s修改状态失败" % program.id) raise exceptions.StopException() ret = agent.stop_process(program.id, machine) if not ret: logger.error("程序%s停止失败" % program.id) operate.change_status(program.id, STATUS.STOPPING, STATUS.RUNNING) raise exceptions.StopException() ret = operate.change_status(program.id, STATUS.STOPPING, STATUS.STOPPED) if not ret: logger.error("程序%s修改状态失败" % program.id) raise exceptions.StopException() return program.id
def stop(request_info): program_id = request_info.get('program_id') program_name = request_info.get('program_name') if program_id is None and program_name is None: raise exceptions.LackParamException("参数program_id和program_name至少存在一个") program = operate.get_program(program_id=program_id, program_name=program_name) return {"program_id": stop_process(program.id)}
def status(request_info): program_id = request_info.get('program_id') program_name = request_info.get('program_name') _status = request_info.get('status') if program_id or program_name: program = operate.get_program(program_id=program_id, program_name=program_name, status=_status) return model_to_dict(program, recurse=False) else: programs = operate.get_programs() return [model_to_dict(program, recurse=False) for program in programs]
def create_process(program_id, program_name, command, machines, directory, environment, auto_start, auto_restart, touch_timeout, max_fail_count, stdout_logfile, stderr_logfile): try: program = operate.get_program(program_name=program_name) except exceptions.ProgramNotExistInDB: return operate.create_program(program_id, program_name, command, machines, directory, environment, auto_start, auto_restart, touch_timeout, max_fail_count, stdout_logfile, stderr_logfile) if program.status not in CAN_CREATE_STATUS: msg = "程序%s所处状态,无法重新创建" % program_name logger.error(msg) raise exceptions.AlreadExistsException(msg) if operate.update_program(program.id, id=program_id, command=command, machines=machines, directory=directory, environment=environment, auto_start=auto_start, auto_restart=auto_restart, touch_timeout=touch_timeout, max_fail_count=max_fail_count, stdout_logfile=stdout_logfile, stderr_logfile=stderr_logfile, machine="", status=STATUS.STOPPED, fail_count=0, timeout_timestamp=0x7FFFFFFF): return operate.get_program(program_id=program_id) else: logger.error("程序创建失败") raise exceptions.CreateException()
def restart(request_info): program_id = request_info.get('program_id') program_name = request_info.get('program_name') if program_id is None and program_name is None: raise exceptions.LackParamException("参数program_id和program_name至少存在一个") program = operate.get_program(program_id=program_id, program_name=program_name) if program.status in CAN_STOP_STATUS: stop_process(program.id) and start_process(program.id) elif program.status in CAN_START_STATUS: start_process(program.id) else: raise exceptions.RestartException() return {"program_id": program.id}
def start_process(program_id): program = operate.get_program(program_id=program_id) if program.status == STATUS.RUNNING: logger.warning("程序%s运行中,无需重复启动" % program.id) raise exceptions.AlreadyStartException() if program.status not in CAN_START_STATUS: logger.warning("程序%s所处状态无法启动" % program.name) raise exceptions.StartException() machine = get_best_machine(program.machines) if not operate.change_status(program.id, CAN_START_STATUS, STATUS.STARTING): logger.error("程序%s修改状态失败" % program.id) raise exceptions.StartException() ret = agent.start_process(program.id, machine) if not ret: logger.error("程序%s启动失败" % program.id) operate.change_status(program.id, STATUS.STARTING, STATUS.STOPPED) raise exceptions.StartException() fields = dict(machine=machine, fail_count=0, timeout_timestamp=0x7fffffff) if operate.update_program(program_id=program.id, **fields): ret = operate.change_status(program.id, STATUS.STARTING, STATUS.RUNNING) else: logger.error("程序%s更新数据库失败" % program.id) ret = operate.change_status(program.id, STATUS.STARTING, STATUS.STOPPED) if not ret: logger.error("程序%s修改状态失败" % program.id) raise exceptions.StartException() return program.id