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()
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()
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)
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)
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)
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)