def save_scene_record_view(request): if request.method != "POST": return public.fail_result_http(u"Only support POST!") else: data = json.loads(request.body) if data.get('id'): data['modify_by'] = public.get_user_mail(request) else: data["creator"] = public.get_user_mail(request) ret = utils.save_scene_record(data) return public.success_result_http(ret)
def bind_api_tag_view(request): if request.method == "POST": data = json.loads(request.body) data["user"] = public.get_user_mail(request) utils.bind_api_tag(data) return public.success_result_http() else: return public.fail_result_http("Only Post!")
def save_api_view(request): if request.method != "POST": return public.fail_result_http(u"Only support POST!") else: data = json.loads(request.body) data["creator"] = public.get_user_mail(request) ret = utils.save_api(data) return public.success_result_http(ret)
def save_job_view(request): if request.method == "POST": data = json.loads(request.body) data["user"] = public.get_user_mail(request) ret = utils.save_job(data) if ret: return public.fail_result_http(ret) return public.success_result_http() else: return public.fail_result_http("POST Only!")
def save_module_job(request): ''' { "module_id":1, "name":"test1", "type":1, "scene":"", "desc":"xxxx", "job_detail":{ "description":"just a test", "command":"ls -l", "params":[ { "name":"branch_num", "description":"just a test", "default_value":"trunk" }, { "name":"version", "description":"121212", "default_value":"" } ] } } ''' data = json.loads(request.body) module_id = data.get("module_id") if not module_id: return None id = data.get("id") json_data = {} module = models.Module.objects.get(id=module_id) json_data["view_name"] = module.name json_data["job_name"] = "%s-%s" % (module.name, time.strftime("%y%m%d%H%M%S")) json_data["job_detail"] = data.get("job_detail") j = Jenkins() if id: job = models.Job.objects.get(id=id) old_name = job.jenkins_name if old_name: j.delete_job(old_name) else: job = models.Job() j.create_view_job(json_data, "JOB_CONFIG_XML", request) job.module_id = module_id job.name = data.get("name") job.jenkins_name = json_data.get("job_name") job.type = data.get("type") job.scene = data.get("scene") job.desc = data.get("desc") job.user = public.get_user_mail(request) job.job_detail = json.dumps(data.get("job_detail")) job.save()
def get_user_view(request): data = {} work_id = int(request.GET.get("work_id")) if request.GET.get("work_id") else 0 data["work_id"] = work_id data["q"] = request.GET.get("q", "") data["flag"] = request.GET.get("flag", "") data["page_current"] = request.GET.get("page_current", 1) ret = data ret["user"] = utils.get_user_info(data) ret["auth"] = utils.check_auth(public.get_user_mail(request), work_id) return render(request, 'user_info.html', {'data': ret})
def get_user_view(request): data = {} work_id = int( request.GET.get("work_id")) if request.GET.get("work_id") else 0 data["work_id"] = work_id data["q"] = request.GET.get("q", "") data["flag"] = request.GET.get("flag", "") data["page_current"] = request.GET.get("page_current", 1) ret = data ret["user"] = utils.get_user_info(data) ret["auth"] = utils.check_auth(public.get_user_mail(request), work_id) return render(request, 'user_info.html', {'data': ret})
def start_task(request): data = json.loads(request.body) task_id = data.get("task_id") sheet_id = data.get("sheet_id", "") run_type = data.get("run_type", public.RUN_TYPE_DEBUG) if not task_id: return "task_id is not exits!" task = models.Task.objects.get(id=task_id) subtask = models.SubTask.objects.filter(task_id=task_id, is_start=True) module_id = task.module_id task_record = models.TaskRecord() task_record.task_id = task_id task_record.module_id = module_id if len(subtask): task_record.status = public.STATUS_RUNNING else: task_record.status = public.STATUS_FAIL options = model_to_dict(task) options["other"] = data options["runner"] = public.get_user_mail(request) task_record.options = json.dumps(options) if run_type == public.RUN_TYPE_AUTO: task_record.sheet_id = data.get("sn") else: task_record.sheet_id = sheet_id task_record.run_type = run_type task_record.save() task_record_id = task_record.id for sub in subtask: param = {} param["task_record_id"] = task_record_id param["task_id"] = task_id param["module_id"] = module_id param["subtask_id"] = sub.id param["is_start"] = sub.is_start param["user"] = public.get_user_mail(request) param["options"] = json.dumps(model_to_dict(sub)) param["run_params"] = data.get("run_params", []) create_sub_task_record(param)
def save_resource_view(request): if request.method != "POST": return public.fail_result_http(u"Only support POST!") else: body = request.POST data = {} if body.get("id"): data["id"] = body.get("id") data["name"] = body.get("name") data["desc"] = body.get("desc") data["creator"] = public.get_user_mail(request) utils.save_resource(data) return redirect("/assess_mgr/resource")
def save_task(request): data = json.loads(request.body) id = data.get("id") if id: task = models.Task.objects.get(id=id) else: task = models.Task() task.name = data.get("name") task.module_id = data.get("module_id") task.desc = data.get("desc") task.type = data.get("type") task.user = public.get_user_mail(request) task.save() svn_list = data.get("svn_list") if data.get("svn_list") else [] if not isinstance(svn_list, list): svn_list = [svn_list] param = {} param["task_id"] = task.id param["svn_list"] = svn_list param["timer"] = data.get("timer") param["user"] = public.get_user_mail(request) save_task_trigger_job(param)
def post_api_view(request): if request.method != "POST": return public.fail_result_http(u"Only support POST!") else: data = {} module_id = request.POST.get("module_id") data["module_id"] = module_id data["name"] = request.POST.get("name") data["desc"] = request.POST.get("desc") data["creator"] = public.get_user_mail(request) if request.POST.get("id"): data["id"] = request.POST.get("id") utils.save_api(data) return redirect("/assess_mgr/module_api?id=" + module_id)
def save_job_reason(request): data = json.loads(request.body) id = data.get("id") reason = data.get("reason") fail_type = data.get("fail_type") status = data.get("status") user = public.get_user_mail(request) if status: models.JobRecord.objects.filter(id=id).update(reason=reason, user=user, fail_type=fail_type, status=status) job_record = models.JobRecord.objects.get(id=id) task_status = get_task_record_status(job_record.task_record_id) sub_status = get_sub_task_record_status(job_record.subtask_record_id) models.TaskRecord.objects.filter(id=job_record.task_record_id).update(status=task_status) models.SubTaskRecord.objects.filter(id=job_record.subtask_record_id).update(status=sub_status) else: models.JobRecord.objects.filter(id=id).update(reason=reason, user=user, fail_type=fail_type)
def save_job_reason(request): data = json.loads(request.body) id = data.get("id") reason = data.get("reason") fail_type = data.get("fail_type") status = data.get("status") user = public.get_user_mail(request) if status: models.JobRecord.objects.filter(id=id).update(reason=reason, user=user, fail_type=fail_type, status=status) job_record = models.JobRecord.objects.get(id=id) task_status = get_task_record_status(job_record.task_record_id) sub_status = get_sub_task_record_status(job_record.subtask_record_id) models.TaskRecord.objects.filter(id=job_record.task_record_id).update( status=task_status) models.SubTaskRecord.objects.filter( id=job_record.subtask_record_id).update(status=sub_status) else: models.JobRecord.objects.filter(id=id).update(reason=reason, user=user, fail_type=fail_type)
def save_sub_task(request): data = json.loads(request.body) task_id = data.get("task_id") if data.get("task_id") else 0 id = int(data.get("id")) if data.get("id") else 0 pre_id = int(data.get("pre")) if data.get("pre") else 0 is_start = int(data.get("is_start")) if data.get("is_start") else 0 if not task_id: return u"task_id不存在" sub_tasks = models.SubTask.objects.filter(task_id=task_id) if id: sub_task = sub_tasks.get(id=id) if pre_id == id and id != 0: return u"不可以将自己设为前置子任务" else: sub_task = models.SubTask() if is_start != 0: sub_task.is_start = True sub_task.pre = 0 else: sub_task.is_start = False sub_task.pre = pre_id sub_task.name = data.get("name") sub_task.task_id = task_id sub_task.type = data.get("type") if data.get("type") else 0 sub_task.desc = data.get("desc") sub_task.user = public.get_user_mail(request) sub_task.save() sub_tasks.filter(next=sub_task.id).update(next=0) if pre_id and False == sub_task.is_start: sub_tasks.filter(id=pre_id).update(next=sub_task.id) if is_start: start_sub = sub_tasks.exclude(id=sub_task.id).filter(is_start=True) if start_sub: sub_task.next = start_sub[0].id sub_task.save() start_sub.update(pre=sub_task.id, is_start=False)
def get_public(request): ret = {} ret["module_list"] = get_module() ret["auth"] = web_utlis.check_auth(public.get_user_mail(request), public.WORK_ASSESS) return ret
def jenkins_view(request): public_date = data_utils.get_public(request) group_id = public_date.get('group_id') # 默认 newlab name = "agile" ret = {} """ ret['version'] = data_utils.get_seal_or_newlab_version() """ ret['biz_version'] = data_utils.get_seal_or_newlab_version('biz') ret['shanghaife_version'] = data_utils.get_seal_or_newlab_version( 'shanghaife') ret['online'] = [] ret['data'] = {} ret['data']['jobs'] = [] content = data_utils.get_online_package() collection_job = data_utils.get_collection(request) job_list = [] for job in collection_job: job_list.append(job.get("id")) if int(group_id) == 0: # others group_job = data_utils.get_jobs_not_group() elif int(group_id) == -1: group_job = collection_job else: group_job = data_utils.get_group_jobs(group_id) for i in group_job: if i["id"] in job_list: i["collection"] = 1 if i['name'].startswith("newlabs_"): tmp_job_name = i['name'] i['jobname'] = tmp_job_name i['name'] = i['name'][8:] # get specific info job = data_utils.JenkinsInfo(name=name, job=tmp_job_name) if job.get_status() == False: continue this_ret = job.get_ret() if not this_ret.get('lastBuild'): this_ret['lastBuild'] = {} i['url'] = this_ret.get('url') # get seald version info and operator this_oper_info = data_utils.get_latest_job_record(i['jobname']) i['sealed_version'] = this_oper_info['sealed_version'] online_info = data_utils.get_latest_online_version( content, i['jobname']) if online_info != False: i['has_online_version'] = True i['online_version'] = online_info tmp_dict = {} tmp_dict['jobname'] = i['jobname'] tmp_dict['online_version'] = online_info ret['online'].append(tmp_dict) else: i['has_online_version'] = False i['newlab_version'] = this_oper_info['newlab_version'] i['user'] = this_oper_info['user'] if this_ret['color'] == 'blue': i['lastbuild_status'] = 'success' elif this_ret['color'] == 'disabled': i['lastbuild_status'] = 'disabled' elif this_ret['color'] == 'notbuilt': i['lastbuild_status'] = 'notbuilt' elif this_ret['color'].find('anime'): i['lastbuild_status'] = 'building' else: i['lastbuild_status'] = 'fail' if 'number' in this_ret['lastBuild']: i['lastBuild'] = this_ret['lastBuild']['number'] else: i['lastBuild'] = "" if 'url' in this_ret['lastBuild']: i['lastBuild_console'] = this_ret['lastBuild'][ 'url'] + 'console' i['lastBuild_consoleText'] = this_ret['lastBuild'][ 'url'] + 'consoleText' else: i['lastBuild_console'] = '' i['lastBuild_consoleText'] = '' i['view'] = name i['buildable'] = this_ret['buildable'] i['trigger_url'] = "http://jenkins.meiliworks.com/view/" + name + "/job/" + tmp_job_name + "/build?delay=0sec" if len(this_ret['property']) != 1: # 需要参数 目前支持1个参数 this_param_info = this_ret['property'][1][ 'parameterDefinitions'][0] i['trigger_param'] = this_param_info['name'] i['trigger_param_description'] = this_param_info['description'] tmp_default_param = {} tmp_default_param[this_param_info["defaultParameterValue"][ 'name'].encode("utf-8")] = this_param_info[ "defaultParameterValue"]['value'].encode("utf-8") i['trigger_default_param'] = json.dumps(tmp_default_param) """ # 支持多参数 i['trigger_param'] = [] i['trigger_param_description'] = [] i['trigger_default_param'] = [] this_param_info_array = this_ret['property'][1]['parameterDefinitions'] for this_param_info in this_param_info_array: i['trigger_param'].append(this_param_info['name']) i['trigger_param_description'].append(this_param_info['description']) tmp_default_param = {} tmp_default_param[this_param_info["defaultParameterValue"]['name'].encode("utf-8")] = this_param_info["defaultParameterValue"]['value'].encode("utf-8") i['trigger_default_param'].append(json.dumps(tmp_default_param)) """ else: # 不需要参数, 都设成 ‘none’ 供前端判断 i['trigger_param'] = 'none' i['trigger_default_param'] = 'none' # add classification ret['data']['jobs'].append(i) #获取用户权限信息 ret["data"]["public"] = public_date ret["auth"] = utils.check_auth(public.get_user_mail(request), public.WORK_PRE_LAUNCH) return render(request, "jenkinsnew.html", ret)
def jenkins_trigger(request): """ :author: yechengzhou :param request: contains trigger para :return: """ if request.method != "POST": return public.fail_result_http(u"该接口只支持POST") else: """ data is a json { "name" : "branch_name", "value" : "lab1:172.16.7.201" } """ """ # 添加用户操作记录 this_option = models.JenkinsUser() this_option.type = 2 tmp_arr = request.REQUEST['url'].split("/") this_option.jobname = tmp_arr[tmp_arr.index('job') + 1] this_option.viewname = "newlab" this_option.optiontime = public.str2datetime(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), "%Y-%m-%d %H:%M:%S") # get user info user_info = web_utils.get_user_cookie(request) this_option.mail = user_info['mail'] """ user_dict = {} user_dict['usermail'] = public.get_user_mail(request) this_request_dict = dict(request.REQUEST) if "url" in request.REQUEST: if request.REQUEST.get('daily') == "merge": # 对 biz shanghaife 做特殊处理 if 'biz' in request.REQUEST['url'] or 'shanghaife' in request.REQUEST['url']: module_name = request.REQUEST['branch_num'] # get latest sealed version #get jobname from url this_url = request.REQUEST['url'] job_name = this_url[this_url.find("/job/") + 5 : this_url.find("/build?")] job_name = job_name + "_" + request.REQUEST['branch_num'] this_record = utils.get_latest_job_record(job_name,True) if this_record['sealed_version'] == 'unknown': return public.fail_result_http(u'此模块没有封板信息,不能合入') this_request_dict['branch_num'] = this_record['sealed_version'] else: this_url = request.REQUEST['url'] job_name = this_url[this_url.find("/job/") + 5 : this_url.find("/build?")] this_record = utils.get_latest_job_record(job_name) if this_record['sealed_version'] == 'unknown': return public.fail_result_http(u'此模块没有封板信息,不能合入') JT = utils.JenkinsTrigger(this_request_dict['url'],this_request_dict,user_dict) if JT.trigger(): return public.success_result_http() else: return public.fail_result_http(u"jenkins触发有错误") else: return public.fail_result_http(u"缺少触发url")
def jenkins_view(request): public_date = data_utils.get_public(request) group_id = public_date.get('group_id') # 默认 newlab name = "agile" ret = {} """ ret['version'] = data_utils.get_seal_or_newlab_version() """ ret['biz_version'] = data_utils.get_seal_or_newlab_version('biz') ret['shanghaife_version'] = data_utils.get_seal_or_newlab_version('shanghaife') ret['online'] = [] ret['data'] = {} ret['data']['jobs'] = [] content = data_utils.get_online_package() collection_job = data_utils.get_collection(request) job_list = [] for job in collection_job: job_list.append(job.get("id")) if int(group_id) == 0: # others group_job = data_utils.get_jobs_not_group() elif int(group_id) == -1: group_job = collection_job else: group_job = data_utils.get_group_jobs(group_id) for i in group_job: if i["id"] in job_list: i["collection"] = 1 if i['name'].startswith("newlabs_"): tmp_job_name = i['name'] i['jobname'] = tmp_job_name i['name'] = i['name'][8:] # get specific info job = data_utils.JenkinsInfo(name=name, job = tmp_job_name) if job.get_status() == False: continue this_ret = job.get_ret() if not this_ret.get('lastBuild'): this_ret['lastBuild'] = {} i['url'] = this_ret.get('url') # get seald version info and operator this_oper_info = data_utils.get_latest_job_record(i['jobname']) i['sealed_version'] = this_oper_info['sealed_version'] online_info = data_utils.get_latest_online_version(content, i['jobname']) if online_info != False: i['has_online_version'] = True i['online_version'] = online_info tmp_dict = {} tmp_dict['jobname'] = i['jobname'] tmp_dict['online_version'] = online_info ret['online'].append(tmp_dict) else: i['has_online_version'] = False i['newlab_version'] = this_oper_info['newlab_version'] i['user'] = this_oper_info['user'] if this_ret['color'] == 'blue': i['lastbuild_status'] = 'success' elif this_ret['color'] == 'disabled': i['lastbuild_status'] ='disabled' elif this_ret['color'] == 'notbuilt': i['lastbuild_status'] ='notbuilt' elif this_ret['color'].find('anime'): i['lastbuild_status'] ='building' else: i['lastbuild_status'] = 'fail' if 'number' in this_ret['lastBuild']: i['lastBuild'] = this_ret['lastBuild']['number'] else: i['lastBuild'] = "" if 'url' in this_ret['lastBuild']: i['lastBuild_console'] = this_ret['lastBuild']['url'] + 'console' i['lastBuild_consoleText'] = this_ret['lastBuild']['url'] + 'consoleText' else: i['lastBuild_console'] = '' i['lastBuild_consoleText'] = '' i['view'] = name i['buildable'] = this_ret['buildable'] i['trigger_url'] = "http://jenkins.meiliworks.com/view/" + name + "/job/" + tmp_job_name + "/build?delay=0sec" if len(this_ret['property']) != 1: # 需要参数 目前支持1个参数 this_param_info = this_ret['property'][1]['parameterDefinitions'][0] i['trigger_param'] = this_param_info['name'] i['trigger_param_description'] = this_param_info['description'] tmp_default_param = {} tmp_default_param[this_param_info["defaultParameterValue"]['name'].encode("utf-8")] = this_param_info["defaultParameterValue"]['value'].encode("utf-8") i['trigger_default_param'] = json.dumps(tmp_default_param) """ # 支持多参数 i['trigger_param'] = [] i['trigger_param_description'] = [] i['trigger_default_param'] = [] this_param_info_array = this_ret['property'][1]['parameterDefinitions'] for this_param_info in this_param_info_array: i['trigger_param'].append(this_param_info['name']) i['trigger_param_description'].append(this_param_info['description']) tmp_default_param = {} tmp_default_param[this_param_info["defaultParameterValue"]['name'].encode("utf-8")] = this_param_info["defaultParameterValue"]['value'].encode("utf-8") i['trigger_default_param'].append(json.dumps(tmp_default_param)) """ else: # 不需要参数, 都设成 ‘none’ 供前端判断 i['trigger_param' ] = 'none' i['trigger_default_param'] = 'none' # add classification ret['data']['jobs'].append(i) #获取用户权限信息 ret["data"]["public"] = public_date ret["auth"] = utils.check_auth(public.get_user_mail(request), public.WORK_PRE_LAUNCH) return render(request,"jenkinsnew.html", ret)
def jenkins_trigger(request): """ :author: yechengzhou :param request: contains trigger para :return: """ if request.method != "POST": return public.fail_result_http(u"该接口只支持POST") else: """ data is a json { "name" : "branch_name", "value" : "lab1:172.16.7.201" } """ """ # 添加用户操作记录 this_option = models.JenkinsUser() this_option.type = 2 tmp_arr = request.REQUEST['url'].split("/") this_option.jobname = tmp_arr[tmp_arr.index('job') + 1] this_option.viewname = "newlab" this_option.optiontime = public.str2datetime(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), "%Y-%m-%d %H:%M:%S") # get user info user_info = web_utils.get_user_cookie(request) this_option.mail = user_info['mail'] """ user_dict = {} user_dict['usermail'] = public.get_user_mail(request) this_request_dict = dict(request.REQUEST) if "url" in request.REQUEST: if request.REQUEST.get('daily') == "merge": # 对 biz shanghaife 做特殊处理 if 'biz' in request.REQUEST[ 'url'] or 'shanghaife' in request.REQUEST['url']: module_name = request.REQUEST['branch_num'] # get latest sealed version #get jobname from url this_url = request.REQUEST['url'] job_name = this_url[this_url.find("/job/") + 5:this_url.find("/build?")] job_name = job_name + "_" + request.REQUEST['branch_num'] this_record = utils.get_latest_job_record(job_name, True) if this_record['sealed_version'] == 'unknown': return public.fail_result_http(u'此模块没有封板信息,不能合入') this_request_dict['branch_num'] = this_record[ 'sealed_version'] else: this_url = request.REQUEST['url'] job_name = this_url[this_url.find("/job/") + 5:this_url.find("/build?")] this_record = utils.get_latest_job_record(job_name) if this_record['sealed_version'] == 'unknown': return public.fail_result_http(u'此模块没有封板信息,不能合入') JT = utils.JenkinsTrigger(this_request_dict['url'], this_request_dict, user_dict) if JT.trigger(): return public.success_result_http() else: return public.fail_result_http(u"jenkins触发有错误") else: return public.fail_result_http(u"缺少触发url")