#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import os
import time
import collections
import sys
import logging
import datetime
import math
import json
from unicodedata import name
import requests
from git import Repo
import chinese_calendar
from config import *
import random
import hashlib
logger = logging.getLogger(__name__)
logger.setLevel(level=logging.DEBUG)
# StreamHandler
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setLevel(level=logging.INFO)
formatter = logging.Formatter(fmt='%(asctime)s line:%(lineno)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
# FileHandler
log_file_name = 'batman_' + time.strftime('%Y%m%d%H%M%S', time.localtime()) + '.log'
file_handler = logging.FileHandler('logs\\' + log_file_name)
file_handler.setLevel(level=logging.DEBUG)
formatter = logging.Formatter(fmt='%(asctime)s-%(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
RUN_ENV = "online" # pre | online
def split_http(params):
param_list = list(params.items())
# print(params)
param_list = sorted(param_list, key=lambda x:x[0])
s = ""
for param in param_list:
s += param[0] + param[1]
secret = "3c8c291f4de3e01381a2ec37b852eb6c"
s = secret + s + secret
sign = hashlib.md5(s.encode("utf-8")).hexdigest().upper()
params["sign"] = sign
if RUN_ENV == "pre":
http = "http://140.205.164.4/top/router/rest?method=" + params["method"] + "&"
elif RUN_ENV == "online":
http = "http://gw.api.taobao.com/router/rest?method=" + params["method"] + "&"
else:
logger.error("请输入正确的运行环境(pre | online)")
del params["method"]
for param in params:
http += param + "=" + params[param] + "&"
http = http.strip("&")
# print(http)
return http
def request_run_task_new(config_id, commit_sha, car_type,dockerNameAsim_value,multi_module_commit_id_map):
"""
func: 运行任务接口aliyun.adlab.adsim.runrecord.run
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "aliyun.adlab.adsim.runrecord.run"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["config_id_list"] = ','.join((str(x) for x in config_id)) #列表转换成拼接的字符串
params["is_new_framework"] = "true"
params["map_use_type"] = "map_id_newest"
params["vehicle_type"] = car_type
params["test_car_type"] = car_type
params["had_planning_commit_id"] = str(commit_sha)
# params["docker_name_asim"] = str(dockerNameAsim_value)
params["multi_module_commit_id_map"] = json.dumps({"prediction":multi_module_commit_id_map[car_type]})
http = split_http(params)
print(http)
try:
response = requests.get(url=http)
except Exception as e:
logger.exception('Request run task Error!')
else:
logger.error(response.text)
response_content = json.loads(response.text)
project_id = 0 #给project_id默认值
run_record_id = -1
# print(response_content)
if response_content["aliyun_adlab_adsim_runrecord_run_response"]["result"]["success"]:
run_record_id = response_content["aliyun_adlab_adsim_runrecord_run_response"]["result"]["data"]["run_record_id"]
project_id = response_content["aliyun_adlab_adsim_runrecord_run_response"]["result"]["data"]["run_record_res_v_o_list"]["run_record_res_vo_list"][0]["project_id"]
logger.error('task run_record_id: %s', run_record_id)
else:
logger.error('request run task failed: %s', response_content.get('message'))
return (project_id,run_record_id,)
def request_cancel_task(run_record_id):
"""
func: 取消任务接口aliyun.adlab.adsim.runrecord.cancel
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "aliyun.adlab.adsim.runrecord.cancel"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["run_record_id"] = str(run_record_id)
http = split_http(params)
try:
response = requests.get(url=http)
except:
logger.exception('Request cancel task Error!')
else:
logger.debug(response.text)
def request_query_task(run_record_id):
"""
func: 查询任务接口aliyun.adlab.adsim.runrecord.detail.get
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "aliyun.adlab.adsim.runrecord.detail.get"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["run_record_id"] = str(run_record_id)
http = split_http(params)
try:
response = requests.get(url=http)
except:
logger.exception('Request query task error!')
else:
logger.debug(response.text)
return response.json()
def request_add_comments(run_record_id, comments):
"""
func: 修改运行记录接口aliyun.adlab.adsim.runrecord.info.update
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "aliyun.adlab.adsim.runrecord.info.update"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["request_dto"] = str({"run_record_id":run_record_id,"comments":comments})
# params["name"] = "Adsim release szl"
http = split_http(params)
try:
response = requests.get(url=http)
except Exception as e:
logger.exception('Request add comments error! %s' % e)
else:
res = json.loads(response.text)
logger.debug(res)
def get_prediction_version():
# 默认版本
ver_default = {'A1': 'v5.1.9.2', "GX": 'v4.5.6.2', 'B1': 'v5.1.9.2'}
# 获取 XG 和A1 预测最新版本
car_type_emu = {'GX': 'GX-4.5', 'A1': 'A1-5.1', 'B1': 'A1-5.1'}
for k, v in car_type_emu.items():
resp = requests.get(r'https://cota.cainiao-inc.com/skynet/getNewestVersion?carType={}'
r'&module=prediction'.format(v))
if resp.status_code == 200:
ver_default[k] = resp.text
ver_default['A1'] = 'release-v5.1.9.x'
ver_default['GX'] = 'feature-v4.5.22.x'
ver_default['B1'] = 'release-v5.1.9.x'
return ver_default
def start_simulation_task(commit_sha, comments='test', config_id_list=None,dockerNameAsim_value=""):
logger.info('----------------------------------------------------------------------')
run_record_id_dict = {}
for config_id in config_id_list:
logger.debug('commit id:{} config_id:{}'.format(commit_sha, config_id))
# 阶梯运行 区分车型
a1_all_config_list = [config for config_list in A1_FULL_CONFIG_LIST for config in config_list]
b1_all_config_list = [config for config_list in B1_FULL_CONFIG_LIST for config in config_list]
for a1_short_config in A1_SHORT_CONFIG_LIST:
a1_all_config_list.append(a1_short_config)
if int(config_id) in a1_all_config_list:
car_type = "A1"
elif int(config_id) in b1_all_config_list:
car_type = "B1"
else:
car_type = "GX"
multi_module_commit_id_map = get_prediction_version()
run_record_id = request_run_task_new(config_id, commit_sha, car_type,dockerNameAsim_value,multi_module_commit_id_map)
if run_record_id and run_record_id != -1:
request_add_comments(run_record_id, comments)
run_record_id_dict[config_id] = run_record_id
logger.info('run_record_id_dict:' + str(run_record_id_dict))
# request_cancel_task(run_record_id)
return run_record_id_dict
# 已弃用
def send_notification_bydingding(message):
headers = {
'Content-Type': 'application/json',
}
params = (
# ('access_token', '79920332f3507bdeef87632b05b2523448d4e3d339414c9125eb3947c3bf143b'),
('access_token', 'e682c0fda908839df0f76a74d881acb5f93f7d847d4d9152ce0021dd0aff460e'),
)
content = '"content": "[MR]:{}"'.format(message)
content = '{' + content + '}'
at_msg = '"atMobiles": ["18358102120"],"isAtAll": false'
at_msg = '{' + at_msg + '}'
at_msg = '{}'
data = '"msgtype": "text","text": {},"at": {}'.format(content, at_msg)
data = '{' + data + '}'
#data = data.encode('utf-8')
logger.info(data)
try:
response = requests.post('https://oapi.dingtalk.com/robot/send', headers=headers, params=params,data=data)
logger.info(response)
logger.info(response.text)
except:
logger.exception('Send notification error!')
else:
logger.debug(response.text)
def send_notification_by_ding_talk(msg, phone_list=[], user_ids=[], msg_type='text'):
"""
func: 钉钉发送消息
[仿真]3D全链路发版: https://oapi.dingtalk.com/robot/send?access_token=e68da3c585f9da3e6c354a6245254dfe0e4765694c7f6a7a3653467fcd82d360
"""
# 测试
# access_token = '7c9796141ac00910178fd6f317e0393eb53b81de272a8369b9232ad6b5402250'
# 正式发版群,关键字:PDC发版
# access_token = '75a8a510ffd1022fd7d6edf57dca89747a9aa26159c3cee9ab99384e3871eb74'
#3D全链路发版
access_token = 'e68da3c585f9da3e6c354a6245254dfe0e4765694c7f6a7a3653467fcd82d360'
test_url = r'https://oapi.dingtalk.com/robot/send?access_token=%s' % access_token
header = {
'Content-Type': 'application/json',
}
is_at_all = 'false' if phone_list or user_ids else 'true'
post_msg = '''
{
"at": {
"atMobiles": "%s",
"atUserIds": "%s",
"isAtAll": "%s"
},
"text": {
"content": "[仿真]3D全链路发版提醒: %s"
},
"msgtype": "%s"
}''' % (phone_list, user_ids, is_at_all, msg, msg_type)
rep = requests.post(test_url, headers=header, data=post_msg)
if rep.json() and int(rep.json()['errcode']) == 0:
logger.info("send dingtalk msg success")
return True
else:
return False
def send_ding_talk_notification_on_workday(msg):
is_workday = chinese_calendar.is_workday(datetime.datetime.now())
rep = None
if is_workday:
rep = send_notification_by_ding_talk(msg)
logger.info("send timer msg success")
def autotest_by_commit_id(comments, commit_sha, CONFIG_ID_DICT,dockerNameAsim_value=""):
config_id_list = list(CONFIG_ID_DICT.keys())
logger.info('start simulation tasks...'+str(config_id_list))
# exit(1)
run_record_id_dict = start_simulation_task(commit_sha, comments, config_id_list,dockerNameAsim_value)
if len(run_record_id_dict) == 0:
logger.error('start simulation task failed!')
return
logger.info('waiting for simulation finished...')
pass_rate_dict = collections.OrderedDict()
run_time = 0.0
run_record_id_list = []
while True:
time.sleep(30)
run_time += 0.5
# 开始查询仿真任务的运行结果
for config_id in config_id_list:
task_id = run_record_id_dict[config_id]
if task_id not in run_record_id_list:
run_record_id_list.append(task_id)
logger.info(str(run_record_id_list)+' '+str(comments))
task_info = request_query_task(task_id)
if task_info is None:
break
# logger.info("task_info:"+json.dumps(task_info))
task_status = task_info.get('data').get('runRecordStatus')
task_pass_rate = task_info.get('data').get('runRecordCountVO').get('passRate')
task_progress_rate = task_info.get('data').get('runRecordCountVO').get('progressRate')
logger.info(
'[Query task] task_id:{}, config:{}, run status:{}, progress rate:{}, run time:{}'.format(
task_id, config_id, task_status, task_progress_rate, run_time))
if task_status != 'finish':
break
pass_rate_dict[CONFIG_ID_DICT[config_id]] = task_pass_rate
else:
logger.info('All simulation config are done!')
break
file_name = './run_records/'+str(datetime.datetime.now()) +'|'+ str(comments)
file = open(file_name, 'w')
file.write(str(run_record_id_list))
file.close()
logger.info(pass_rate_dict)
return pass_rate_dict
def automerge_by_branch_list(repo, comments, MR_BRANCH_NAME_LIST, check_branch=None):
git = repo.git
mr_branch_seq = 0
for MR_BRANCH in MR_BRANCH_NAME_LIST:
mr_branch_seq += 1
# 开始尝试合并该MR分支
logger.info('fetch branch {}: {}'.format(mr_branch_seq, MR_BRANCH))
git.fetch('origin', '{}:{}'.format(MR_BRANCH, MR_BRANCH))
git.merge('--squash', MR_BRANCH)
# repo.index.commit('merge {} to {}.'.format(MR_BRANCH, TEST_BRANCH_NAME))
git.commit('-m', 'merge ' + MR_BRANCH + ' for testing')
if check_branch is not None:
branch_name = check_branch
else:
branch_name = repo.active_branch
# logger.info('push [{}] to remote.'.format(branch_name))
# git.push('-uf', 'origin', branch_name)
logger.info('Congratulations! Merge all branches done and No conflicts detected.')
return True
def git_clone(REPO_PATH):
if not os.path.exists(REPO_PATH):
logger.info('The Repo {} does not exists. Clone from gitlab...'.format(REPO_PATH))
# os.makedirs(REPO_PATH)
Repo.clone_from(url='git@gitlab.alibaba-inc.com:ai-xlab.had-planning/pdc.git',
to_path=REPO_PATH)
logger.info('clone done!')
else:
logger.info('The Repo exists')
'''
car_type : "a1","xg","all"
'''
def request_run_performance_task(commit_id, car_type, remark):
car_list = PERFORMANCE_CARS[car_type]
result_list = []
for vehicle_id in car_list:
re_try = 0
# DX-971 使用预发1,其他车型使用预发2
url_host = 'pre' if vehicle_id == 'DX-971' else 'pre2'
if 'A1' in vehicle_id:
project = 'A1-5.1'
else:
project = 'GX-4.5'
performance_test_url = 'https://{}-cota.cainiao-inc.com/skynet/startPdcGXPerformanceTest?commitId={}' \
'&runTime=2&remark={}&vehicleId={}&project={}'.format(url_host, commit_id, remark,
vehicle_id, project)
response = requests.get(performance_test_url)
if response.status_code == 200:
result_list.append(vehicle_id)
else:
while re_try < 3:
response = requests.get(performance_test_url)
if response.status_code == 200:
result_list.append(vehicle_id)
break
else:
re_try += 1
if result_list == car_list:
return True
else:
return False
def query_task_list_total(current_page,page_size,run_record_id):
"""
func: 查询任务列表名称:aliyun.adlab.adsim.task.list.get
获取run_record_id下的任务total
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "aliyun.adlab.adsim.task.list.get"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["current_page"] = str(current_page)
params["page_size"] = str(page_size)
params["run_record_id"] = str(run_record_id)
http = split_http(params)
try:
res = requests.get(url = http)
res_data = json.loads(res.text)
if res_data.get("aliyun_adlab_adsim_task_list_get_response").get("result").get("success"):
return res_data.get("aliyun_adlab_adsim_task_list_get_response").get("result").get("data").get("total")
except Exception as e:
logger.error(e)
def query_task_list(current_page,page_size,run_record_id):
"""
func: 查询任务列表名称:aliyun.adlab.adsim.task.list.get
获取run_record_id下的任务total
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "aliyun.adlab.adsim.task.list.get"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["current_page"] = str(current_page)
params["page_size"] = str(page_size)
params["run_record_id"] = str(run_record_id)
http = split_http(params)
try:
res = requests.get(url = http)
res_data = json.loads(res.text)
if res_data.get("aliyun_adlab_adsim_task_list_get_response").get("result").get("success"):
return res_data.get("aliyun_adlab_adsim_task_list_get_response").get("result").get("data").get("list").get("task_list_vo")
except Exception as e:
logger.error(e)
def page_task_all(total,page_size,run_record_id):
"""
func: 获取所有页的总数
"""
task_data_list = []
for i in range(1,math.ceil(total/page_size) + 1):
page_tasks = query_task_list(i,page_size,run_record_id)
if not page_tasks:
continue
task_data_list += page_tasks
i += 1
return task_data_list
def run_state_classify(datas):
"""
func: 根据运行状态分类并返回字典的形式
"""
li = []
for data in datas:
if not data:
continue
status = data.get("status")
li.append(status)
#获取所有运行状态列表
status_list = list(set(li))
dic = {}
for status_li in status_list:
lis = []
for data in datas:
if not data:
continue
case_id = data.get("case_id")
status = data.get("status")
if status in status_li:
lis.append(case_id)
dic[status_li] = lis
return dic,status_list
def case_update(case_id):
"""
修改case 接口:alibaba.adlab.adsim.case.update
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "alibaba.adlab.adsim.case.update"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
#enable:1:可用,0:删除
params["case_id"] = str(case_id)
params["enable"] = "0"
http = split_http(params)
try:
res = requests.get(url = http)
res_data = json.loads(res.text)
if res_data.get("alibaba_adlab_adsim_case_update_response").get("result").get("success"):
logger.info(" 删除case:{} ok".format(case_id))
except Exception as e:
logger.error(e)
def loop_del(case_id_lists):
"""
func: for循环遍历删除已经成功copy走的case
"""
for case_id in case_id_lists:
case_update(case_id)
def case_copy(from_case_id_list,to_case_set_id):
"""
func: 场景复制接口:alibaba.adlab.adsim.case.copy
入参:from_case_id_list,to_case_set_id
出参:
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "alibaba.adlab.adsim.case.copy"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["request_dto"] = str({"to_case_set_id":to_case_set_id, "from_case_id_list":from_case_id_list,"copy_type":"hard","repeat_strategy":"cover"})
http = split_http(params)
try:
res = requests.get(url = http)
res_data = json.loads(res.text)
if res_data.get("alibaba_adlab_adsim_case_copy_response").get("result").get("success"):
logger.info("copy {} case to {} success".format(from_case_id_list,to_case_set_id))
loop_del(from_case_id_list)
except Exception as e:
logger.error(e)
def paging_query_caseset_list_total(current_page,page_size,project_id):
"""
func: 分页查询场景集列表接口:alibaba.adlab.adsim.caseset.casesetlist.get 获取总页数
入参:page_size,current_page,project_id
出参:caseset total
"""
params = {}
params["creator"] = "matrixTestCI" #Matrix测试CI
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "alibaba.adlab.adsim.caseset.casesetlist.get"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["page_size"] = str(page_size)
params["current_page"] = str(current_page)
params["project_id"] = str(project_id)
http = split_http(params)
try:
res = requests.get(url = http)
res_data = json.loads(res.text)
if res_data.get("alibaba_adlab_adsim_caseset_casesetlist_get_response").get("result").get("success"):
return res_data.get("alibaba_adlab_adsim_caseset_casesetlist_get_response").get("result").get("data").get("total")
except Exception as e:
logger.error(e)
def paging_query_caseset_list(current_page,page_size,project_id):
"""
func: 分页查询场景集列表接口:alibaba.adlab.adsim.caseset.casesetlist.get
入参:page_size,current_page,project_id
出参:caseset list
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "alibaba.adlab.adsim.caseset.casesetlist.get"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["page_size"] = str(page_size)
params["current_page"] = str(current_page)
params["project_id"] = str(project_id)
http = split_http(params)
try:
res = requests.get(url = http)
res_data = json.loads(res.text)
if res_data.get("alibaba_adlab_adsim_caseset_casesetlist_get_response").get("result").get("success"):
return res_data.get("alibaba_adlab_adsim_caseset_casesetlist_get_response").get("result").get("data").get("list").get("adsim_case_set_vo")
except Exception as e:
logger.error(e)
def page_caseset_all(total,page_size,project_id):
"""
func: 获取project_id下所有的数据集信息
"""
task_data_list = []
for i in range(1,math.ceil(total/page_size) + 1):
page_tasks = paging_query_caseset_list(i,page_size,project_id)
if not page_tasks:
continue
task_data_list += page_tasks
i += 1
return task_data_list
def transform_center(datas_dic,caseset_lis):
task_state_enum = [("lining", "队列中"),
("preparing", "准备中"),
("downloading", "docker镜像下载中"),
("launching", "待测对象及仿真引擎启动中"),
("running", "任务执行中"),
("canceling", "任务取消中"),
("cleaning", "清理执行中"),
("evaluating","评价中"),
("uploading","文件上传中"),
("canceled", "任务已取消"),
("finish_with_success", "仿真成功"),
("finish_with_algo_failed", "评价判定未通过"),
("finish_with_sim_exception", "引擎异常"),
("finish_with_server_exception", "服务端异常"),
("finish_with_data_error","数据异常"),
("rerun", "任务已重跑"),
("finish_with_timeout", "仿真超时")]
for item in datas_dic.items():
for state in task_state_enum:
if item[0] in state[0]:
for caseset_li in caseset_lis:
case_set_id = caseset_li['case_set_id']
name = caseset_li['name']
if state[1] in name or name in state[1]:
case_copy(item[1],case_set_id)
def query_runcord_list(project_id):
"""
func: 查询运行记录列表接口:aliyun.adlab.adsim.runrecord.list.get
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "aliyun.adlab.adsim.runrecord.list.get"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["project_id"] = str(project_id)
http = split_http(params)
# print(http)
try:
res = requests.get(url = http)
res_data = json.loads(res.text)
if res_data.get("aliyun_adlab_adsim_runrecord_list_get_response").get("result").get("success"):
runcord_list = res_data.get("aliyun_adlab_adsim_runrecord_list_get_response").get("result").get("data").get("list")
if not runcord_list:
logger.info("runcord_list为空:{}".format(runcord_list))
return
return res_data.get("aliyun_adlab_adsim_runrecord_list_get_response").get("result").get("data").get("list").get("adsim_run_record_v_o")
except Exception as e:
logger.error(e)
def query_runrecord_detail(runrecord_id):
"""
func: 查询运行记录详情接口:aliyun.adlab.adsim.runrecord.detail.get
"""
params = {}
params["creator"] = "matrixTestCI"
params["app_key"] = "31381770"
params["format"] = "json"
params["method"] = "aliyun.adlab.adsim.runrecord.detail.get"
params["timestamp"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
params["sign_method"] = "md5"
params["v"] = "2.0"
params["sequence_id"] = str(random.randint(1000000,9999999))
params["run_record_id"] = str(runrecord_id)
http = split_http(params)
# print(http)
try:
res = requests.get(url = http)
res_data = json.loads(res.text)
if res_data.get("aliyun_adlab_adsim_runrecord_detail_get_response").get("result").get("success"):
return res_data.get("aliyun_adlab_adsim_runrecord_detail_get_response").get("result").get("data").get("run_record_status")
except Exception as e:
logger.error(e)
def run_record_ids_trans_dic(run_record_ids):
#遍历run_record_ids中的字典
run_record_dic = {}
for run_record_id in run_record_ids:
run_record_dic.update(run_record_id)
return run_record_dic
if __name__ == '__main__':
# multi_module_commit_id_map = get_prediction_version()
# ret = request_run_task_new([6576, 6577, 6578, 6579], "68f42d34e512877d769c1712b5240a4047ddfe1b", "A1","adsim_release_v4.5.0.49",multi_module_commit_id_map)
# print(ret)
#运行脚本命令行模式
#python new_mergeall_ci.py -c "v4.5.45.2" --commit_id v4.5.45.2 --car_type B1 --dockerNameAsim_value adsim_release_v4.5.0.49
run_record_id = 967310
#获取total然后分页获取所有的task数据
run_record_total = query_task_list_total(1,1,run_record_id)
all_task_data = page_task_all(run_record_total,100,run_record_id)
#根据运行状态分类并字典形式返回分类完成的数据
complete_classify_dic,diff_run_state = run_state_classify(all_task_data)
project_id = 5263
#获取caseset的总页数
caseset_total = paging_query_caseset_list_total(1,1,project_id)
all_caseset_data = page_caseset_all(caseset_total,10,project_id)
#完成名称转换并执行copy
# transform_center(complete_classify_dic,all_caseset_data)
# project_id = 1665
# runcord_lists = query_runcord_list(project_id)
# print(runcord_lists)