Ejemplo n.º 1
0
def check_local_package():
    request_data = request.json
    required_parameters = ['dir']
    check_config(request_data, required_parameters)
    if os.path.exists(request_data['dir']) and os.path.exists(os.path.join(request_data['dir'], 'roles')):
        # get package module version
        var_fp = os.path.join(request_data['dir'], 'example', 'var_files', 'exp', 'fate_init')
        versions = {}
        if os.path.exists(var_fp):
            with open(var_fp, 'r') as fin:
                versions = yaml.safe_load(fin.read()).get('versions', {})
        output = getoutput(f"du -d 1 -h {os.path.join(request_data['dir'], 'roles')}").split('\n')
        result = []
        for s in output:
            items = s.split()
            module_name = os.path.basename(items[1])
            if module_name != 'roles':
                result.append({
                    'module': module_name,
                    'size': items[0],
                    'time': datetime.fromtimestamp(os.path.getctime(items[1])).strftime('%Y%m%d'),
                    'description': module_name if not versions.get(module_name) else f"{module_name} {versions.get(module_name)}",
                    'version': versions.get(module_name, None)
                })
        return get_json_result(data={'version': versions.get('fate_flow'), 'list': result})
    return get_json_result(retcode=100, retmsg='package dir not exists.')
Ejemplo n.º 2
0
def download_package():
    request_data = request.json
    required_parameters = ['version', 'url']
    check_config(request_data, required_parameters)
    if not request_data['url']:
        raise Exception(f"illegal url {request_data['url']}")
    if not request_data['version']:
        raise Exception(f"illegal url {request_data['version']}")

    os.makedirs(os.path.join(get_project_base_directory(), 'packages'), exist_ok=True)
    package_dir = get_package_dir_by_version(request_data.get('version'))
    if os.path.exists(package_dir):
        return get_json_result(retcode=100,
                               retmsg=f"Downloading mirror with version {request_data.get('version')} failed, "
                                      f"package dir {package_dir} already exists.")

    package_instance = Package.get_or_none(Package.f_version == request_data['version'],
                                           Package.f_status == 'success')
    if package_instance:
        return get_json_result(retcode=100,
                               retmsg=f"Downloading mirror with version {request_data.get('version')} failed, "
                                      f"version info has been stored in database.")

    request_data['dir'] = package_dir
    p = Process(target=do_download, args=(request_data, ))
    p.start()
    return get_json_result(retmsg=f"Start downloading mirror from url: {request_data.get('url')}.",
                           data= {'version': request_data.get('version')})
Ejemplo n.º 3
0
def query_package():
    request_data = request.json
    required_paramters = ['version']
    check_config(request_data, required_paramters)
    p = get_package_download_record(request_data['version'])
    if p:
        return get_json_result(data=p.to_json())
    return get_json_result(retcode=100, retmsg=f"can not found version {request_data['version']} record")
Ejemplo n.º 4
0
def submit_job():
    config = request.json
    job_id, job_conf_path = JobController.submit_job(job_data=config)
    if not job_id and not job_conf_path:
        return get_json_result(retcode=100, retmsg=f"Submit job failed.")
    else:
        data = {'job_id': job_id, 'conf_path': job_conf_path}
        return get_json_result(retcode=0,
                               retmsg=f"Submit job success",
                               data=data)
Ejemplo n.º 5
0
def query_task():
    tasks = JobSaver.query_task(**request.json)
    if not tasks:
        return get_json_result(retcode=101,
                               retmsg='Query task failed, no task found.')
    task_filters = [
        'play_id', 'task_id', 'task_name', 'role', 'create_time', 'start_time',
        'end_time', 'status', 'elapsed'
    ]
    return get_json_result(retmsg="Query task successfully.",
                           data=tasks[0].to_json(task_filters))
Ejemplo n.º 6
0
def stop_job():
    request_data = request.json
    final_status, stop_result = JobController.stop_job(
        request_data.get('job_id'))
    if final_status:
        return get_json_result(
            retmsg=f"Stop job {request_data.get('job_id')} successfully.")
    return get_json_result(
        retcode=100,
        retmsg=f"Stop job {request_data.get('job_id')} failed.",
        data=stop_result)
Ejemplo n.º 7
0
def get_job_log():
    data = request.json
    if not data.get('job_id'):
        return get_json_result(retcode=100, retmsg='job id is required')
    log_dir = utils.file_utils.get_job_log_directory(job_id=data.get('job_id'))
    if os.path.exists(log_dir):
        with open(os.path.join(log_dir, 'schedule.log')) as f:
            log_data = f.read()
    return get_json_result(
        retcode=0,
        retmsg=f"Query log of job {data.get('job_id')} successfully",
        data=log_data)
Ejemplo n.º 8
0
def toy_test():
    request_data = request.json
    required_parameters = [
        'host', 'guest_party_id', 'host_party_id', 'work_mode'
    ]
    check_config(request_data, required_parameters)
    retcode, retmsg = status_utils.toy_test(**request_data)
    return get_json_result(retcode=retcode, retmsg=retmsg)
Ejemplo n.º 9
0
def query_play():
    plays = JobSaver.query_play(**request.json)
    if not plays:
        return get_json_result(retcode=101,
                               retmsg='Query play failed, no play found.')
    play_filters = [
        'job_id', 'play_id', 'create_time', 'start_time', 'end_time', 'status',
        'elapsed'
    ]
    data = plays[0].to_json(filters=play_filters)
    tasks = JobSaver.query_task(reverse=False, **request.json)
    if tasks:
        task_filters = [
            'play_id', 'task_id', 'task_name', 'role', 'create_time',
            'start_time', 'end_time', 'status', 'elapsed'
        ]
        data['f_tasks'] = [task.to_json(task_filters) for task in tasks]
    return get_json_result(retmsg="Query play successfully.", data=data)
Ejemplo n.º 10
0
def fast_test():
    request_data = request.json
    required_parameters = [
        'host', 'guest_party_id', 'host_party_id', 'arbiter_party_id'
    ]
    check_config(request_data, required_parameters)
    request_data['test_type'] = 'fast'
    retcode, retmsg = status_utils.min_test(**request_data)
    return get_json_result(retcode=retcode, retmsg=retmsg)
Ejemplo n.º 11
0
def query_job():
    jobs = JobSaver.query_job(**request.json)
    if not jobs:
        return get_json_result(retcode=101,
                               retmsg='Query job failed, no job found.')
    data = jobs[0].to_json(filters=[
        'job_id', 'create_time', 'start_time', 'end_time', 'status', 'elapsed'
    ])
    plays = JobSaver.query_play(reverse=False,
                                order_by='play_id',
                                **request.json)
    if plays:
        play_filters = [
            'job_id', 'play_id', 'create_time', 'start_time', 'end_time',
            'status', 'elapsed'
        ]
        data['f_plays'] = [
            play.to_json(filters=play_filters) for play in plays
        ]
    return get_json_result(retmsg="Query job successfully.", data=data)
Ejemplo n.º 12
0
def retry_play():
    request_data = request.json
    required_parameters = ['job_id', 'play_id']
    check_config(request_data, required_parameters)
    retcode, retmsg = PlayController.retry_play(
        job_id=request_data['job_id'],
        play_id=request_data['play_id'],
        test_mode=TEST_MODE)
    return get_json_result(retcode=retcode,
                           retmsg=retmsg,
                           data={'play_id': request_data['play_id']})
Ejemplo n.º 13
0
def get_host_log():
    '''
    :arg host
    :arg job_id
    :arg limit [OPTIONAL]
    :return:
    '''
    data = request.json
    if data.get('limit'):
        retcode, log_data = job_utils.get_host_log(job_id=data.get('job_id'),
                                                   host=data.get('host'),
                                                   limit=data.get('limit'))
    else:
        retcode, log_data = job_utils.get_host_log(job_id=data.get('job_id'),
                                                   host=data.get('host'))
    if retcode == 0:
        return get_json_result(retcode=retcode,
                               retmsg='Query host log successfully',
                               data=log_data)
    return get_json_result(retcode=retcode,
                           retmsg='Query host log failed, no log files found.')
Ejemplo n.º 14
0
def status_check():
    request_data = request.json
    required_parameters = ['party_id']
    check_config(request_data, required_parameters)
    if request_data.get('module_name'):
        retcode, retmsg, data = do_status_check(
            party_id=request_data['party_id'],
            module_name=request_data['module_name'])
    else:
        retcode, retmsg, data = do_status_check(
            party_id=request_data['party_id'])
    return get_json_result(retcode=retcode, retmsg=retmsg, data=data)
Ejemplo n.º 15
0
def check_ansible():
    request_data = request.json
    if request_data.get('party_id'):
        # TODO consider case that there are more than one records of specified party
        parties = JobSaver.query_party(party_id=request_data.get('party_id'))
        if parties:
            party_info = parties[0].to_json(
                filters=['modules', 'version', 'role'])
            modules = party_info.get('f_modules', {}).get('data', [])
            status = {}
            host = None
            for module in modules:
                if module.get('name') == 'supervisor':
                    host = module.get('ips')[0]
                    break
            if host:
                result = distribute_status_check_task(host=host)
                if result and result.get('list'):
                    for item in result.get('list'):
                        status[item['name']] = item['status']
            if status:
                for module in modules:
                    module['status'] = status.get(module['name'], None)
            return get_json_result(retmsg='Query party info successfully',
                                   data={
                                       'party_id':
                                       request_data.get('party_id'),
                                       'list': modules,
                                       'fate_version':
                                       party_info.get('f_version'),
                                       "role": party_info.get('f_role')
                                   })
        return get_json_result(
            retcode=0,
            retmsg=
            f"can not found info party {request_data.get('party_id')} in database."
        )
    return get_json_result(data={'status': 'success'})
Ejemplo n.º 16
0
def pre_check():
    data = request.json
    result = []
    for ip_addr in data.get('managerNode', []):
        if data.get('check_name'):
            check_name = data['check_name']
        else:
            check_name = 'check'
        if not status_utils.if_exists(
                host=ip_addr, fp=f'/data/projects/check/{check_name}.sh'):
            distribute_res = status_utils.distribute_pre_check_script(
                host=ip_addr)
            if not distribute_res:
                result.append({'ip': ip_addr, 'list': []})
                continue
        result.append(
            status_utils.distribute_pre_check_task(host=ip_addr,
                                                   task_name=check_name))
    return get_json_result(retmsg='pre check success', data=result)
Ejemplo n.º 17
0
def upload_data():
    request_data = request.json
    required_parameters = ['host']
    check_config(request_data, required_parameters)
    retcode, retmsg = status_utils.upload_data_for_min_test(**request_data)
    return get_json_result(retcode=retcode, retmsg=retmsg)
Ejemplo n.º 18
0
def single_test():
    request_data = request.json
    required_parameters = ['host', 'party_id']
    check_config(request_data, required_parameters)
    retcode, retmsg = status_utils.single_test(**request_data)
    return get_json_result(retcode=retcode, retmsg=retmsg)
Ejemplo n.º 19
0
def internal_server_error(e):
    stat_logger.exception(e)
    return get_json_result(retcode=100, retmsg=str(e))
Ejemplo n.º 20
0
def get_log():
    request_data = request.json
    retcode, retmsg, data = get_server_log(level=request_data.get('level'))
    return get_json_result(retcode=retcode, retmsg=retmsg, data=data)
Ejemplo n.º 21
0
def query_log():
    request_data = request.json
    required_parameters = ['host', 'test_type']
    check_config(request_data, required_parameters)
    retcode, retmsg, data = status_utils.get_test_log(**request_data)
    return get_json_result(retcode=retcode, retmsg=retmsg, data=data)