コード例 #1
0
def update_app_version(proj):
    env = Environment.objects.get(project=proj)
    cookie = semaphore_cookie()
    if env.pre_pid != 0 and env.pre_tid != 0:
        try:
            pre_version = get_environment_version(env.pre_pid, env.pre_tid,
                                                  env.project.name)
            logging.info('name: %s, pre version: %s' %
                         (env.project.name, pre_version))
            if pre_version:
                env.pre_ver = pre_version
            else:
                env.pre_ver = '0.0.0'
        except Exception as e:
            env.pre_ver = '0.0.0'
            logger.error(e)
    if env.test_pid != 0 and env.test_tid != 0:
        try:
            test_version = get_environment_version(env.test_pid, env.test_tid,
                                                   env.project.name)
            logging.info('name: %s, test version: %s' %
                         (env.project.name, test_version))
            if test_version:
                env.test_ver = test_version
            else:
                env.test_ver = '0.0.0'
        except Exception as e:
            env.test_ver = '0.0.0'
            logger.error(e)
    now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
    env.endtime = now_time
    env.save()
コード例 #2
0
def versync_stop():
    versync_nginx = Versync.objects.filter(sync_status=2)
    for versync in versync_nginx:
        if versync.sync_status == 2:
            Versync.objects.filter(Q(id=versync.id) & Q(sync_status=2)) \
                           .update(endtime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())),
                                   sync_status=3,
                                   progress=100)
            tasks = VersyncDetail.objects.filter(versync_id=versync.id)
            logger.info(tasks)
            for task in tasks:
                env = Environment.objects.filter(project=task.project)
                env_value = env.values().first()
                try:
                    test_version = task.sync_version
                    if env_value["app_type"] == 0:
                        test_version = '%s.Test' % test_version
                    cookie = semaphore_cookie()
                    result = update_version(cookie, env_value["test_pid"], env_value["test_tid"], task.project.name, test_version)
                    if not result:
                        logger.error("project: %s, test_version: %s, update_version failed, result: %s", task.project.name, test_version, result)
                        continue
                    logger.info("update_version, project: %s, pid: %s, tid: %s, test_version: %s, pre_version: %s",
                            task.project.name,
                            env_value["test_pid"],
                            env_value["test_tid"],
                            test_version,
                            task.sync_version)
                    env.update(test_ver=test_version, pre_ver=task.sync_version)
                except Exception as e:
                    logger.error(e)
                finally:
                    task.delete()
コード例 #3
0
def update_task_status():
    task_running = VersyncDetail.objects.filter(task_status=1)
    cookie = semaphore_cookie()
    for task in task_running:
        try:
            env = Environment.objects.get(project=task.project)
            task_status = get_task_status(cookie, env.test_pid, task.task_id)
            logger.info("project: %s, task_status: %s", env.project.name, task_status)
            # app 同步成功后, 修改状态为2, 开始同步nginx
            if task_status == 'success':
                nginx_env = Environment.objects.filter(project__name='nginx').first()
                nginx_env.task_status = 0
                nginx_env.save()
                now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
                Environment.objects.filter(task_id=task.task_id).update(task_status=2, endtime=now_time)
                VersyncDetail.objects.filter(id=task.id).update(endtime=now_time, task_status=2)
            elif task_status == 'error':
                now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
                Environment.objects.filter(task_id=task.task_id).update(task_status=3, endtime=now_time)
                VersyncDetail.objects.filter(id=task.id).update(endtime=now_time, task_status=3)
        except Exception as e:
            logger.error("update_task_status failed, error: %s", e)
            now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
            Environment.objects.filter(task_id=task.task_id).update(task_status=3, endtime=now_time)
            VersyncDetail.objects.filter(id=task.id).update(endtime=now_time, task_status=3)
コード例 #4
0
def env_task_log(request):
    if not request.is_websocket():
        env_id = request.GET.get("id")
        return render(request, 'tests/task_log.html', locals())
    else:
        env_id = 0
        for message in request.websocket:
            if message:
                env_id = message
                break
        try:
            cookie = semaphore_cookie()
            env = Environment.objects.filter(id=env_id).first()
            task_info = get_task_info(cookie, env.test_pid, env.task_id)
            task_status = task_info["status"]
            created_time = parse_datetime(task_info["created"])
            if task_status == 'waiting':
                request.websocket.send("*" * 30 + "Waiting: " + created_time +
                                       "*" * 30)
            while task_status == 'waiting':
                time.sleep(3)
                task_status = get_task_status(cookie, env.test_pid,
                                              env.task_id)

            task_info = get_task_info(cookie, env.test_pid, env.task_id)
            start_time = parse_datetime(task_info["start"])
            if start_time:
                request.websocket.send("*" * 30 + "Start:   " + start_time +
                                       "*" * 30 + "\n")
            while task_status == 'running':
                time.sleep(3)
                task_status = get_task_status(cookie, env.test_pid,
                                              env.task_id)
                if task_status != 'running':
                    ret = get_task_output(cookie, env.test_pid, env.task_id)
                    for line in ret:
                        request.websocket.send(line["output"])
                        time.sleep(random.randint(1, 30) * 0.01)
            else:
                ret = get_task_output(cookie, env.test_pid, env.task_id)
                for line in ret:
                    request.websocket.send(line["output"])
            task_info = get_task_info(cookie, env.test_pid, env.task_id)
            end_time = parse_datetime(task_info["end"])
            if end_time:
                request.websocket.send("*" * 30 + "End:     " + end_time +
                                       "*" * 30)
            request.websocket.send("*" * 30 + "Status:  " + task_status +
                                   "*" * 30)
        except Exception as e:
            logger.error(e)
コード例 #5
0
def versync_nginx():
    versync_running = Versync.objects.filter(sync_status=1)
    cookie = semaphore_cookie()
    for versync in versync_running:
        tasks = VersyncDetail.objects.filter(versync_id=versync.id).values("task_status")
        task_status = []
        for task in tasks:
            task_status.append(task["task_status"])
        if 3 in list(set(task_status)):
            Versync.objects.filter(id=versync.id).update(endtime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())),
                                                        sync_status=4)
        if list(set(task_status)) == [2]:
            try:
                env = Environment.objects.filter(project__name='nginx').first()
                pre_version = get_environment_version(env.pre_pid, env.pre_tid, env.project.name)
                if not pre_version:
                    pre_version = "0.0.0"
                task_status = sync_nginx_conf(cookie, env, pre_version)
                if task_status:
                    now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
                    env.endtime = now_time
                    env.task_status = 2
                    env.save()
                    VersyncDetail.objects.create(versync=versync,
                                                 project_id=env.project_id,
                                                 starttime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())),
                                                 task_status=2,
                                                 sync_version=pre_version)

                    Versync.objects.filter(Q(id=versync.id) & Q(sync_status=1)) \
                                   .update(starttime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())),
                                                                   sync_status=2,
                                                                   progress=90)
                else:
                    now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
                    env.task_status = 3
                    env.endtime = now_time
                    env.save()
                    Versync.objects.filter(Q(id=versync.id) & Q(sync_status=1)) \
                                    .update(endtime=now_time, sync_status=4)
            except Exception as e:
                logger.error("sync_nginx_conf failed, error: %s", e)
                now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
                env = Environment.objects.filter(project__name='nginx').first()
                env.task_status = 3
                env.endtime = now_time
                env.save()
                Versync.objects.filter(Q(id=versync.id) & Q(sync_status=1)) \
                               .update(endtime=now_time, sync_status=4)
コード例 #6
0
def versync_run():
    task_submit = VersyncDetail.objects.filter(task_status=0)
    cookie = semaphore_cookie()
    for task in task_submit:
        try:
            version = task.sync_version
            env = Environment.objects.get(project=task.project)
            if env.app_type == 0:
                version = '%s.Test' % (version)

            logger.info("project: %s, version: %s", env.project.name, version)
            task_id = launch_task(cookie, env.test_pid, env.test_tid, task.project.name, version)
            env.task_id = task_id
            env.task_status = 1
            env.save()
            time.sleep(5)
            VersyncDetail.objects.filter(id=task.id).update(task_status=1, task_id=task_id)
        except Exception as e:
            logger.error("versync_run failed, error: %s", e)
            now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
            Environment.objects.filter(task_id=task.id).update(task_status=3, endtime=now_time)
            VersyncDetail.objects.filter(id=task.id).update(endtime=now_time, task_status=3)
            Versync.objects.filter(Q(id=task.versync_id) & Q(sync_status=0)) \
                           .update(endtime=now_time, sync_status=4)