Пример #1
0
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)
Пример #2
0
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})