def clusterStatus(request): ''' 集群状态显示界面 ''' t = get_template('cluster_status.html') proxy = MyProxy(settings.CLUSTER_MASTER_URL) cluster = Cluster(proxy.get_status()) context = {'nodes': cluster.nodes} html = t.render(context) return HttpResponse(html)
def create_plan(request): ''' 完成巡检计划新增工作 ''' if request.method == 'POST': form = PlanForm(request.POST) if form.is_valid(): data = form.cleaned_data cur_system = request.COOKIES["system"] cur_system_instance = System.objects.get(name=cur_system) testsuite_instance = TestSuite.objects.get( name=data['test_suite_name']) #巡检脚本名称(通过系统实例id和测试套件id保证巡检脚本名称的唯一性) script_name = str(cur_system_instance.id) + '-' + str( testsuite_instance.id) #巡检脚本路径 script_path = settings.SCRIPT_ROOT + cur_system_instance.english_name + str( testsuite_instance.id) + '.txt' logger.info(u'巡检脚本路径:' + script_path) if not os.path.exists(settings.SCRIPT_ROOT): os.makedirs(LOG_ROOT) if script_name not in scripts: logger.info(u'新建巡检脚本') script_str = '*** Settings ***' + os.linesep \ + 'Library Selenium2Library' + os.linesep + os.linesep \ + '*** Variables ***' + os.linesep \ + '${timeout} ' + str(timeout) + os.linesep + os.linesep \ + '*** Test Cases ***' + os.linesep #获得当前系统的所有测试用例 candidate_test_cases = TestCase.objects.filter( system=cur_system_instance) #将testsuite选中的测试用例名称按行分为列表 testcase_list = testsuite_instance.testcases.split('\n') #去除最后一个空行 testcase_list = testcase_list[:-1] for testcase_item in testcase_list: #列表中的每一项的格式为'序号 测试用例名称' testcase_name = testcase_item.split(' ')[1] #去除换行符 testcase_name = testcase_name.strip('\r') testcase_instance = candidate_test_cases.get( name=testcase_name) script_str = script_str + testcase_instance.name + os.linesep script_str = script_str + testcase_instance.content + os.linesep + os.linesep script_str = script_str + ' delete all cookies' + os.linesep + \ ' close browser' f = codecs.open(script_path, 'w', 'utf-8') f.write(script_str) f.close() scripts[script_name] = script_path taskinfo = {} taskinfo['system'] = cur_system taskinfo['executor'] = data['executor'] taskinfo['province'] = data['province'] taskinfo['city'] = data['city'] taskinfo_json = json.dumps(taskinfo) para = {'type': 'file'} para['path'] = script_path para['str'] = taskinfo_json para_list = [] para_list.append(para) proxy = MyProxy(settings.CLUSTER_MASTER_URL) if data['exectype'] == 'now': proxy.add_job('inspect', 'exec', para_list) return HttpResponseRedirect('/createplansuccess1/') #周期性巡检计划 task_instance = Task(test_suite=testsuite_instance, executor=data['executor'], system=cur_system_instance, province=data['province'], city=data['city']) task_instance.save() logger.info(u'巡检任务已存入数据库') hour = int(data['hour']) minute = int(data['minute']) exec_time = datetime.time(hour, minute) #用7位二进制数表示重复类型,例如每周一至周五运行,对应的二进制数为(0011111),对应的10进制数为31 repeat_type = 0 for item in data[ 'repeat_type']: #data['repeat_type']的类型是字符型,范围为1~7 i = int(item) - 1 #转换为整形,然后将范围调整为0~6 repeat_type += 2**i #创建巡检计划实例 plan_instance = Plan(task=task_instance, exec_time=exec_time, repeat_type=repeat_type) plan_instance.save() proxy.add_plan(hour, minute, repeat_type, 'inspect', 'exec', para_list, plan_instance.id) logger.info(u'巡检计划已存入数据库') return HttpResponseRedirect('/createplansuccess2/') else: form = PlanForm() return render_to_response('add_plan.html', {'form': form})