def warn_for_deploy(request, name, stage, buildId): """ Returns a warning message if: 1. The build has been tagged as build build 2. a build doesn't have a successful deploy on the preceding stage. TODO: we would have call backend twice since the getAllDeploys call does not support filtering on multiple states; Also, getAllDeploys return all deploys with commits after the specific commit, it would be good if there is options to return the exact matched deploys. """ build_info = builds_helper.get_build_and_tag(request, buildId) build = build_info["build"] tag = build_info.get("tag") if tag is not None and tag["value"] == tags_helper.TagValue.BAD_BUILD: html = render_to_string('warn_deploy_bad_build.tmpl', { 'tag': tag, }) return HttpResponse(html) env_promote = environs_helper.get_env_promotes_config(request, name, stage) pred_stage = env_promote.get('predStageName') if not pred_stage or pred_stage == BUILD_STAGE: return HttpResponse("") pred_env = environs_helper.get_env_by_stage(request, name, pred_stage) filter = {} filter['envId'] = [pred_env['id']] filter['commit'] = build['commit'] filter['repo'] = build['repo'] filter['oldestFirst'] = True filter['deployState'] = "SUCCEEDING" filter['pageIndex'] = 1 filter['pageSize'] = 1 result = deploys_helper.get_all(request, **filter) succeeding_deploys = result['deploys'] if succeeding_deploys: return HttpResponse("") filter['deployState'] = "SUCCEEDED" result = deploys_helper.get_all(request, **filter) succeeded_deploys = result['deploys'] if succeeded_deploys: return HttpResponse("") html = render_to_string('warn_no_success_deploy_in_pred.tmpl', { 'envName': name, 'predStageName': pred_stage, }) return HttpResponse(html)
def get_all_deploys(request): env_stage_a = environs_helper.get_env_by_stage(request, NGAPP_A, "prod") env_stage_b = environs_helper.get_env_by_stage(request, NGAPP_B, "prod") index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', '%d' % DEFAULT_PAGE_SIZE)) filter = {} filter['envId'] = [env_stage_a['id'], env_stage_b['id']] filter['pageIndex'] = index filter['pageSize'] = size result = deploys_helper.get_all(request, **filter) deploy_summaries = [] for deploy in result['deploys']: build = builds_helper.get_build(request, deploy['buildId']) summary = {} summary['deploy'] = deploy summary['build'] = build deploy_summaries.append(summary) return render(request, 'ngapp2/ngapp2_history.html', { "deploy_summaries": deploy_summaries, "pageIndex": index, "pageSize": DEFAULT_PAGE_SIZE, "disablePrevious": index <= 1, "disableNext": len(result['deploys']) < DEFAULT_PAGE_SIZE, })
def get_previous_deploy(request, env, deploy): result = deploys_helper.get_all(request, envId=[env['id']], before=deploy['startDate'], pageIndex=1, pageSize=2) deploys = result.get("deploys") if not deploys or len(deploys) < 2: logging.info("Could not find a deploy before deploy %s" % deploy['id']) return None else: return deploys[1]
def get_last_completed_deploy(request, env): # the first one is the current deploy result = deploys_helper.get_all(request, envId=[env['id']], pageIndex=1, pageSize=2) deploys = result.get("deploys") if not deploys or len(deploys) < 2: logging.info("Could not find last completed deploy in env %s/%s" % (env['envName'], env['stageName'])) return None else: return deploys[1]
def get_all_deploys(request): env_stage_a = environs_helper.get_env_by_stage(request, NGAPP_A, "prod") env_stage_b = environs_helper.get_env_by_stage(request, NGAPP_B, "prod") index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', '%d' % DEFAULT_PAGE_SIZE)) filter = {} filter['envId'] = [env_stage_a['id'], env_stage_b['id']] filter['pageIndex'] = index filter['pageSize'] = size result = deploys_helper.get_all(request, **filter) deploy_summaries = [] for deploy in result['deploys']: build = builds_helper.get_build(request, deploy['buildId']) summary = {} summary['deploy'] = deploy summary['build'] = build deploy_summaries.append(summary) # get the rollback history from S3 between the start_timestamp and end_timestamp # from the current page, assumed the deploy_summaries is in descend order. # if it is the first page, set the end_timestamp to now. if len(deploy_summaries): start_timestamp = deploy_summaries[-1]['deploy']['startDate'] if index == 1: end_timestamp = time.time() * 1000 else: end_timestamp = deploy_summaries[0]['deploy']['startDate'] else: start_timestamp = 0 end_timestamp = time.time() * 1000 s3 = s3_helper.S3Helper(bucket_name=S3_INTERNAL_TOOLS_BUCKET_NAME) history_key = get_rollback_history_key() rollbacks = s3.list(history_key) for rollback in rollbacks: timestamp = rollback.name[len(history_key)+1:] timestamp = float(timestamp) if start_timestamp <= timestamp and timestamp <= end_timestamp: summary = json.loads(s3.download_string(rollback.name)) deploy_summaries.append(summary) # order the history by deploy.start_date descend deploy_summaries.sort(key=lambda summary: summary['deploy']['startDate'], reverse=True) return render(request, 'ngapp2/ngapp2_history.html', { "deploy_summaries": deploy_summaries, "pageIndex": index, "pageSize": DEFAULT_PAGE_SIZE, "disablePrevious": index <= 1, "disableNext": len(result['deploys']) < DEFAULT_PAGE_SIZE, })
def _get_ongoing_deploys(request, index, size): # ongoing deploys are defined as deploys with states as: deploy_states = ["RUNNING", "FAILING"] deployResult = deploys_helper.get_all(request, deployState=deploy_states, pageIndex=index, pageSize=size) deploy_summaries = [] for deploy in deployResult['deploys']: env = environs_helper.get(request, deploy['envId']) build = builds_helper.get_build(request, deploy['buildId']) summary = {} summary['deploy'] = deploy summary['env'] = env summary['build'] = build deploy_summaries.append(summary) return deploy_summaries
def rollback(request, name, stage): query_dict = request.GET to_deploy_id = query_dict.get('to_deploy_id', None) envs = environs_helper.get_all_env_stages(request, name) stages, env = common.get_all_stages(envs, stage) result = deploys_helper.get_all(request, envId=[env['id']], pageIndex=1, pageSize=DEFAULT_ROLLBACK_DEPLOY_NUM) deploys = result.get("deploys") # remove the first deploy if exists if deploys: deploys.pop(0) # append the build info deploy_summaries = [] branch = None commit = None build_id = None for deploy in deploys: build_info = builds_helper.get_build_and_tag(request, deploy['buildId']) build = build_info["build"] tag = build_info.get("tag", None) summary = {} summary['deploy'] = deploy summary['build'] = build summary['tag'] = tag if not to_deploy_id and deploy['state'] == 'SUCCEEDED': to_deploy_id = deploy['id'] if to_deploy_id and to_deploy_id == deploy['id']: branch = build['branch'] commit = build['commitShort'] build_id = build['id'] deploy_summaries.append(summary) html = render_to_string("environs/env_rollback.html", { "envs": envs, "stages": stages, "envs": envs, "env": env, "deploy_summaries": deploy_summaries, "to_deploy_id": to_deploy_id, "branch": branch, "commit": commit, "build_id": build_id, "csrf_token": get_token(request), }) return HttpResponse(html)
def rollback(request, name, stage): query_dict = request.GET to_deploy_id = query_dict.get('to_deploy_id', None) envs = environs_helper.get_all_env_stages(request, name) stages, env = common.get_all_stages(envs, stage) result = deploys_helper.get_all(request, envId=[env['id']], pageIndex=1, pageSize=DEFAULT_ROLLBACK_DEPLOY_NUM) deploys = result.get("deploys") # remove the first deploy if exists if deploys: deploys.pop(0) # append the build info deploy_summaries = [] branch = None commit = None build_id = None for deploy in deploys: build = builds_helper.get_build(request, deploy['buildId']) summary = {} summary['deploy'] = deploy summary['build'] = build if not to_deploy_id and deploy['state'] == 'SUCCEEDED': to_deploy_id = deploy['id'] if to_deploy_id and to_deploy_id == deploy['id']: branch = build['branch'] commit = build['commitShort'] build_id = build['id'] deploy_summaries.append(summary) html = render_to_string( "environs/env_rollback.html", { "stages": stages, "envs": envs, "env": env, "deploy_summaries": deploy_summaries, "to_deploy_id": to_deploy_id, "branch": branch, "commit": commit, "build_id": build_id, "csrf_token": get_token(request), }) return HttpResponse(html)
def get_pred_deploys(request, name, stage): index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', DEFAULT_PAGE_SIZE)) env = environs_helper.get_env_by_stage(request, name, stage) env_promote = environs_helper.get_env_promotes_config(request, name, stage) show_lock = False predStage = env_promote.get('predStage') if env_promote['type'] != "MANUAL" and predStage: show_lock = True current_startDate = 0 if not predStage or predStage == "BUILD": deploys = [] else: pred_env = environs_helper.get_env_by_stage(request, name, predStage) result = deploys_helper.get_all(request, envId=[pred_env['id']], pageIndex=index, pageSize=size) deploys = result["deploys"] if env.get('deployId'): deploy = deploys_helper.get(request, env['deployId']) build = builds_helper.get_build(request, deploy['buildId']) current_startDate = build['publishDate'] deploy_wrappers = [] for deploy in deploys: build = builds_helper.get_build(request, deploy['buildId']) if build['publishDate'] > current_startDate: deploy_wrapper = {} deploy_wrapper['deploy'] = deploy deploy_wrapper['build'] = build deploy_wrappers.append(deploy_wrapper) html = render_to_string( 'deploys/simple_pred_deploys.tmpl', { "deploy_wrappers": deploy_wrappers, "envName": name, "stageName": predStage, "show_lock": show_lock, "current_startDate": current_startDate, }) return HttpResponse(html)
def get_pred_deploys(request, name, stage): index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', DEFAULT_PAGE_SIZE)) env = environs_helper.get_env_by_stage(request, name, stage) env_promote = environs_helper.get_env_promotes_config(request, name, stage) show_lock = False predStage = env_promote.get('predStage') if env_promote['type'] != "MANUAL" and predStage: show_lock = True current_startDate = 0 if not predStage or predStage == "BUILD": deploys = [] else: pred_env = environs_helper.get_env_by_stage(request, name, predStage) result = deploys_helper.get_all(request, envId=[pred_env['id']], pageIndex=index, pageSize=size) deploys = result["deploys"] if env.get('deployId'): deploy = deploys_helper.get(request, env['deployId']) build = builds_helper.get_build(request, deploy['buildId']) current_startDate = build['publishDate'] deploy_wrappers = [] for deploy in deploys: build = builds_helper.get_build(request, deploy['buildId']) if build['publishDate'] > current_startDate: deploy_wrapper = {} deploy_wrapper['deploy'] = deploy deploy_wrapper['build'] = build deploy_wrappers.append(deploy_wrapper) html = render_to_string('deploys/simple_pred_deploys.tmpl', { "deploy_wrappers": deploy_wrappers, "envName": name, "stageName": predStage, "show_lock": show_lock, "current_startDate": current_startDate, }) return HttpResponse(html)
def get_env_deploys(request, name, stage): envs = environs_helper.get_all_env_stages(request, name) stages, env = common.get_all_stages(envs, stage) index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', DEFAULT_PAGE_SIZE)) from_date = request.GET.get('from_date', None) from_time = request.GET.get('from_time', None) to_date = request.GET.get('to_date', None) to_time = request.GET.get('to_time', None) commit = request.GET.get('commit', None) repo = request.GET.get('repo', None) branch = request.GET.get('branch', None) reverse_date = request.GET.get('reverse_date', None) operator = request.GET.get('operator', None) filter, filter_title, query_string = \ _gen_deploy_query_filter(request, from_date, from_time, to_date, to_time, size, reverse_date, operator, commit, repo, branch) if filter is None: return render( request, 'environs/env_history.html', { "env": env, "stages": stages, "deploy_summaries": [], "filter_title": filter_title, "pageIndex": index, "pageSize": size, "from_date": from_date, "from_time": from_time, "to_date": to_date, "to_time": to_time, "commit": commit, "repo": repo, "branch": branch, "reverse_date": reverse_date, "operator": operator, 'pageRange': range(0), "prevPageIndex": 0, "nextPageIndex": 0, "query_string": query_string, "pinterest": IS_PINTEREST }) filter['envId'] = [env['id']] filter['pageIndex'] = index filter['pageSize'] = size result = deploys_helper.get_all(request, **filter) deploy_summaries = _gen_deploy_summary(request, result['deploys'], for_env=env) page_range, prevPageIndex, nextPageIndex = _compute_range( result['total'], index, size, DEFAULT_TOTAL_PAGES) return render( request, 'environs/env_history.html', { "env": env, "stages": stages, "deploy_summaries": deploy_summaries, "filter_title": filter_title, "pageIndex": index, "pageSize": size, "from_date": from_date, "from_time": from_time, "to_date": to_date, "to_time": to_time, "commit": commit, "repo": repo, "branch": branch, "reverse_date": reverse_date, "operator": operator, 'pageRange': page_range, "prevPageIndex": prevPageIndex, "nextPageIndex": nextPageIndex, "query_string": query_string, "pinterest": IS_PINTEREST })
def get_env_deploys(request, name, stage): envs = environs_helper.get_all_env_stages(request, name) stages, env = common.get_all_stages(envs, stage) index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', DEFAULT_PAGE_SIZE)) from_date = request.GET.get('from_date', None) from_time = request.GET.get('from_time', None) to_date = request.GET.get('to_date', None) to_time = request.GET.get('to_time', None) commit = request.GET.get('commit', None) repo = request.GET.get('repo', None) branch = request.GET.get('branch', None) reverse_date = request.GET.get('reverse_date', None) operator = request.GET.get('operator', None) filter, filter_title, query_string = \ _gen_deploy_query_filter(request, from_date, from_time, to_date, to_time, size, reverse_date, operator, commit, repo, branch) if filter is None: return render(request, 'environs/env_history.html', { "env": env, "stages": stages, "deploy_summaries": [], "filter_title": filter_title, "pageIndex": index, "pageSize": size, "from_date": from_date, "from_time": from_time, "to_date": to_date, "to_time": to_time, "commit": commit, "repo": repo, "branch": branch, "reverse_date": reverse_date, "operator": operator, 'pageRange': range(0), "prevPageIndex": 0, "nextPageIndex": 0, "query_string": query_string, "pinterest": IS_PINTEREST }) filter['envId'] = [env['id']] filter['pageIndex'] = index filter['pageSize'] = size result = deploys_helper.get_all(request, **filter) deploy_summaries = _gen_deploy_summary(request, result['deploys'], for_env=env) page_range, prevPageIndex, nextPageIndex = _compute_range(result['total'], index, size, DEFAULT_TOTAL_PAGES) return render(request, 'environs/env_history.html', { "env": env, "stages": stages, "deploy_summaries": deploy_summaries, "filter_title": filter_title, "pageIndex": index, "pageSize": size, "from_date": from_date, "from_time": from_time, "to_date": to_date, "to_time": to_time, "commit": commit, "repo": repo, "branch": branch, "reverse_date": reverse_date, "operator": operator, 'pageRange': page_range, "prevPageIndex": prevPageIndex, "nextPageIndex": nextPageIndex, "query_string": query_string, "pinterest": IS_PINTEREST })
def get_all_deploys(request): index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', DEFAULT_PAGE_SIZE)) from_date = request.GET.get('from_date') from_time = request.GET.get('from_time') to_date = request.GET.get('to_date') to_time = request.GET.get('to_time') commit = request.GET.get('commit') repo = request.GET.get('repo') branch = request.GET.get('branch') reverse_date = request.GET.get('reverse_date') operator = request.GET.get('operator') if not branch: branch = 'master' filter, filter_title, query_string = \ _gen_deploy_query_filter(request, from_date, from_time, to_date, to_time, size, reverse_date, operator, commit, repo, branch) if filter is None: # specified a bad commit return render(request, 'deploys/all_history.html', { "deploy_summaries": [], "filter_title": filter_title, "pageIndex": index, "pageSize": size, "from_date": from_date, "from_time": from_time, "to_date": to_date, "to_time": to_time, "commit": commit, "repo": repo, "branch": branch, "reverse_date": reverse_date, "operator": operator, 'pageRange': range(0), "prevPageIndex": 0, "nextPageIndex": 0, "query_string": query_string, }) filter['pageIndex'] = index filter['pageSize'] = size result = deploys_helper.get_all(request, **filter) deploy_summaries = _gen_deploy_summary(request, result['deploys']) page_range, prevPageIndex, nextPageIndex = _compute_range(result['total'], index, size, DEFAULT_TOTAL_PAGES) return render(request, 'deploys/all_history.html', { "deploy_summaries": deploy_summaries, "filter_title": filter_title, "pageIndex": index, "pageSize": size, "from_date": from_date, "from_time": from_time, "to_date": to_date, "to_time": to_time, "commit": commit, "repo": repo, "branch": branch, "reverse_date": reverse_date, "operator": operator, 'pageRange': page_range, "prevPageIndex": prevPageIndex, "nextPageIndex": nextPageIndex, "query_string": query_string, })
def get_all_deploys(request): index = int(request.GET.get('page_index', '1')) size = int(request.GET.get('page_size', DEFAULT_PAGE_SIZE)) from_date = request.GET.get('from_date') from_time = request.GET.get('from_time') to_date = request.GET.get('to_date') to_time = request.GET.get('to_time') commit = request.GET.get('commit') repo = request.GET.get('repo') branch = request.GET.get('branch') reverse_date = request.GET.get('reverse_date') operator = request.GET.get('operator') if not branch: branch = 'master' filter, filter_title, query_string = \ _gen_deploy_query_filter(request, from_date, from_time, to_date, to_time, size, reverse_date, operator, commit, repo, branch) if filter is None: # specified a bad commit return render( request, 'deploys/all_history.html', { "deploy_summaries": [], "filter_title": filter_title, "pageIndex": index, "pageSize": size, "from_date": from_date, "from_time": from_time, "to_date": to_date, "to_time": to_time, "commit": commit, "repo": repo, "branch": branch, "reverse_date": reverse_date, "operator": operator, 'pageRange': range(0), "prevPageIndex": 0, "nextPageIndex": 0, "query_string": query_string, }) filter['pageIndex'] = index filter['pageSize'] = size result = deploys_helper.get_all(request, **filter) deploy_summaries = _gen_deploy_summary(request, result['deploys']) page_range, prevPageIndex, nextPageIndex = _compute_range( result['total'], index, size, DEFAULT_TOTAL_PAGES) return render( request, 'deploys/all_history.html', { "deploy_summaries": deploy_summaries, "filter_title": filter_title, "pageIndex": index, "pageSize": size, "from_date": from_date, "from_time": from_time, "to_date": to_date, "to_time": to_time, "commit": commit, "repo": repo, "branch": branch, "reverse_date": reverse_date, "operator": operator, 'pageRange': page_range, "prevPageIndex": prevPageIndex, "nextPageIndex": nextPageIndex, "query_string": query_string, })