Пример #1
0
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
Пример #2
0
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)}
Пример #3
0
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]
Пример #4
0
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()
Пример #5
0
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}
Пример #6
0
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