Esempio n. 1
0
def promote(request, name, stage, deploy_id):
    envs = environs_helper.get_all_env_stages(request, name)
    stages, env = common.get_all_stages(envs, stage)

    env_wrappers = []
    for temp_env in envs:
        env_wrapper = {}
        env_wrapper["env"] = temp_env
        env_wrapper["env_promote"] = environs_helper.get_env_promotes_config(
            request, temp_env['envName'], temp_env['stageName'])
        env_wrappers.append(env_wrapper)

    deploy = deploys_helper.get(request, deploy_id)
    build = builds_helper.get_build(request, deploy['buildId'])

    html = render_to_string(
        "environs/env_promote.html", {
            "stages": stages,
            "envs": envs,
            "env": env,
            "env_wrappers": env_wrappers,
            "deploy": deploy,
            "build": build,
            "csrf_token": get_token(request),
        })
    return HttpResponse(html)
Esempio n. 2
0
def promote(request, name, stage, deploy_id):
    envs = environs_helper.get_all_env_stages(request, name)
    stages, env = common.get_all_stages(envs, stage)

    env_wrappers = []
    for temp_env in envs:
        env_wrapper = {}
        env_wrapper["env"] = temp_env
        env_wrapper["env_promote"] = environs_helper.get_env_promotes_config(request,
                                                                             temp_env['envName'],
                                                                             temp_env['stageName'])
        env_wrappers.append(env_wrapper)

    deploy = deploys_helper.get(request, deploy_id)
    build = builds_helper.get_build(request, deploy['buildId'])

    html = render_to_string("environs/env_promote.html", {
        "stages": stages,
        "envs": envs,
        "env": env,
        "env_wrappers": env_wrappers,
        "deploy": deploy,
        "build": build,
        "csrf_token": get_token(request),
    })
    return HttpResponse(html)
Esempio n. 3
0
    def get(self, request, name, stage):
        envs = environs_helper.get_all_env_stages(request, name)
        stages, env = common.get_all_stages(envs, stage)
        env_promote = environs_helper.get_env_promotes_config(
            request, name, stage)
        stage_names = ['BUILD']
        for stage_name in stages:
            if stage_name != env['stageName']:
                stage_names.append(stage_name)

        if request.is_ajax():
            # return data for ajax calls
            html = render_to_string(
                'configs/promote_config.tmpl', {
                    "env": env,
                    "stage_names": stage_names,
                    "env_promote": env_promote,
                    "csrf_token": get_token(request),
                })
            return HttpResponse(json.dumps({'html': html}),
                                content_type="application/json")

        # otherwise, return a page
        return render(
            request, 'configs/promote_config.html', {
                "env": env,
                "stages": stages,
                "stage_names": stage_names,
                "env_promote": env_promote,
            })
Esempio n. 4
0
def clone_from_stage_name(request, env_name, stage_name, from_env_name,
                          from_stage_name, description):
    from_stage = environs_helper.get_env_by_stage(request, from_env_name,
                                                  from_stage_name)
    agent_configs = environs_helper.get_env_agent_config(
        request, from_env_name, from_stage_name)
    script_configs = environs_helper.get_env_script_config(
        request, from_env_name, from_stage_name)
    alarms_configs = environs_helper.get_env_alarms_config(
        request, from_env_name, from_stage_name)
    metrics_configs = environs_helper.get_env_metrics_config(
        request, from_env_name, from_stage_name)
    webhooks_configs = environs_helper.get_env_hooks_config(
        request, from_env_name, from_stage_name)
    promotes_configs = environs_helper.get_env_promotes_config(
        request, from_env_name, from_stage_name)

    new_data = {}
    new_data['envName'] = env_name
    new_data['stageName'] = stage_name
    new_data['description'] = description
    new_data['buildName'] = from_stage['buildName']
    new_data['branch'] = from_stage['branch']
    new_data['chatroom'] = from_stage['chatroom']
    new_data['maxParallel'] = from_stage['maxParallel']
    new_data['priority'] = from_stage['priority']
    new_data['stuckThreshold'] = from_stage['stuckThreshold']
    new_data['successThreshold'] = from_stage['successThreshold']
    new_data['acceptanceType'] = from_stage['acceptanceType']
    new_data['emailRecipients'] = from_stage['emailRecipients']
    new_data['notifyAuthors'] = from_stage['notifyAuthors']
    new_data['watchRecipients'] = from_stage['watchRecipients']
    new_data['maxDeployNum'] = from_stage['maxDeployNum']
    new_data['maxDeployDay'] = from_stage['maxDeployDay']
    new_data['overridePolicy'] = from_stage['overridePolicy']

    new_stage = environs_helper.create_env(request, new_data)

    # now clone all the extra configs
    if agent_configs:
        environs_helper.update_env_agent_config(request, env_name, stage_name,
                                                agent_configs)
    if script_configs:
        environs_helper.update_env_script_config(request, env_name, stage_name,
                                                 script_configs)
    if alarms_configs:
        environs_helper.update_env_alarms_config(request, env_name, stage_name,
                                                 alarms_configs)
    if metrics_configs:
        environs_helper.update_env_metrics_config(request, env_name,
                                                  stage_name, metrics_configs)
    if webhooks_configs:
        environs_helper.update_env_hooks_config(request, env_name, stage_name,
                                                webhooks_configs)
    if promotes_configs:
        environs_helper.update_env_promotes_config(request, env_name,
                                                   stage_name,
                                                   promotes_configs)

    return new_stage
Esempio n. 5
0
    def get(self, request, name, stage):
        envs = environs_helper.get_all_env_stages(request, name)
        stages, env = common.get_all_stages(envs, stage)
        env_promote = environs_helper.get_env_promotes_config(request, name, stage)
        stage_names = ['BUILD']
        for stage_name in stages:
            if stage_name != env['stageName']:
                stage_names.append(stage_name)

        if request.is_ajax():
            # return data for ajax calls
            html = render_to_string('configs/promote_config.tmpl', {
                "env": env,
                "stage_names": stage_names,
                "env_promote": env_promote,
                "csrf_token": get_token(request),
            })
            return HttpResponse(json.dumps({'html': html}), content_type="application/json")

        # otherwise, return a page
        return render(request, 'configs/promote_config.html', {
            "env": env,
            "stages": stages,
            "stage_names": stage_names,
            "env_promote": env_promote,
        })
Esempio n. 6
0
    def get(self, request, name, stage=None):
        envs = environs_helper.get_all_env_stages(request, name)

        if len(envs) == 0:
            return redirect('/')

        stages, env = common.get_all_stages(envs, stage)
        env_promote = environs_helper.get_env_promotes_config(request, name, env['stageName'])
        stage = env['stageName']
        username = request.teletraan_user_id.name
        request_feedback = check_feedback_eligible(request, username)
        groups = environs_helper.get_env_capacity(request, name, stage, capacity_type="GROUP")
        metrics = environs_helper.get_env_metrics_config(request, name, stage)
        alarms = environs_helper.get_env_alarms_config(request, name, stage)

        if not env['deployId']:
            capacity_hosts = deploys_helper.get_missing_hosts(request, name, stage)
            response = render(request, 'environs/env_landing.html', {
                "env": env,
                "env_promote": env_promote,
                "stages": stages,
                "metrics": metrics,
                "alarms": alarms,
                "request_feedback": request_feedback,
                "groups": groups,
                "capacity_hosts": capacity_hosts,
                "pinterest": IS_PINTEREST,
            })
            showMode = 'complete'
            sortByStatus = 'true'
        else:
            # Get deploy progress
            progress = deploys_helper.update_progress(request, name, stage)
            showMode = _fetch_param_with_cookie(
                request, 'showMode', MODE_COOKIE_NAME, 'complete')
            sortByStatus = _fetch_param_with_cookie(
                request, 'sortByStatus', STATUS_COOKIE_NAME, 'true')
            report = agent_report.gen_report(request, env, progress, sortByStatus=sortByStatus)
            report.showMode = showMode
            report.sortByStatus = sortByStatus
            response = render(request, 'environs/env_landing.html', {
                "env": env,
                "env_promote": env_promote,
                "stages": stages,
                "report": report,
                "has_deploy": True,
                "metrics": metrics,
                "alarms": alarms,
                "request_feedback": request_feedback,
                "groups": groups,
                "pinterest": IS_PINTEREST,
            })

        # save preferences
        response.set_cookie(ENV_COOKIE_NAME, genEnvCookie(request, name))
        response.set_cookie(MODE_COOKIE_NAME, showMode)
        response.set_cookie(STATUS_COOKIE_NAME, sortByStatus)

        return response
Esempio n. 7
0
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)
Esempio n. 8
0
def clone_from_stage_name(request, env_name, stage_name, from_env_name, from_stage_name,
                          description, external_id):
    from_stage = environs_helper.get_env_by_stage(request, from_env_name, from_stage_name)
    agent_configs = environs_helper.get_env_agent_config(request, from_env_name, from_stage_name)
    script_configs = environs_helper.get_env_script_config(request, from_env_name, from_stage_name)
    alarms_configs = environs_helper.get_env_alarms_config(request, from_env_name, from_stage_name)
    metrics_configs = environs_helper.get_env_metrics_config(request, from_env_name,
                                                             from_stage_name)
    webhooks_configs = environs_helper.get_env_hooks_config(request, from_env_name, from_stage_name)
    promotes_configs = environs_helper.get_env_promotes_config(request, from_env_name,
                                                               from_stage_name)

    new_data = {}
    new_data['envName'] = env_name
    new_data['stageName'] = stage_name
    new_data['description'] = description
    new_data['buildName'] = from_stage['buildName']
    new_data['branch'] = from_stage['branch']
    new_data['chatroom'] = from_stage['chatroom']
    new_data['maxParallel'] = from_stage['maxParallel']
    new_data['priority'] = from_stage['priority']
    new_data['stuckThreshold'] = from_stage['stuckThreshold']
    new_data['successThreshold'] = from_stage['successThreshold']
    new_data['acceptanceType'] = from_stage['acceptanceType']
    new_data['emailRecipients'] = from_stage['emailRecipients']
    new_data['notifyAuthors'] = from_stage['notifyAuthors']
    new_data['watchRecipients'] = from_stage['watchRecipients']
    new_data['maxDeployNum'] = from_stage['maxDeployNum']
    new_data['maxDeployDay'] = from_stage['maxDeployDay']
    new_data['overridePolicy'] = from_stage['overridePolicy']
    new_data['externalId'] = external_id

    new_stage = environs_helper.create_env(request, new_data)

    # now clone all the extra configs
    if agent_configs:
        environs_helper.update_env_agent_config(request, env_name, stage_name, agent_configs)
    if script_configs:
        environs_helper.update_env_script_config(request, env_name, stage_name, script_configs)
    if alarms_configs:
        environs_helper.update_env_alarms_config(request, env_name, stage_name, alarms_configs)
    if metrics_configs:
        environs_helper.update_env_metrics_config(request, env_name, stage_name, metrics_configs)
    if webhooks_configs:
        environs_helper.update_env_hooks_config(request, env_name, stage_name, webhooks_configs)
    if promotes_configs:
        environs_helper.update_env_promotes_config(request, env_name, stage_name, promotes_configs)

    return new_stage
Esempio n. 9
0
    def get(self, request, name, stage):
        env = environs_helper.get_env_by_stage(request, name, stage)
        env_promote = environs_helper.get_env_promotes_config(request, name, stage)
        current_build = None
        if 'deployId' in env and env['deployId']:
            deploy = deploys_helper.get(request, env['deployId'])
            current_build = builds_helper.get_build(request, deploy['buildId'])

        return render(request, 'deploys/new_deploy.html', {
            "env": env,
            "env_promote": env_promote,
            "buildName": env['buildName'],
            "current_build": current_build,
            "pageIndex": 1,
            "pageSize": common.DEFAULT_BUILD_SIZE,
        })
Esempio n. 10
0
    def get(self, request, name, stage):
        env = environs_helper.get_env_by_stage(request, name, stage)
        env_promote = environs_helper.get_env_promotes_config(
            request, name, stage)
        current_build = None
        if 'deployId' in env and env['deployId']:
            deploy = deploys_helper.get(request, env['deployId'])
            current_build = builds_helper.get_build(request, deploy['buildId'])

        return render(
            request, 'deploys/new_deploy.html', {
                "env": env,
                "env_promote": env_promote,
                "buildName": env['buildName'],
                "current_build": current_build,
                "pageIndex": 1,
                "pageSize": common.DEFAULT_BUILD_SIZE,
            })
Esempio n. 11
0
def warn_no_succ_deploy_in_pred(request, name, stage, buildId):
    """ Returns a warning message if 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.
    """
    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)

    build = builds_helper.get_build(request, buildId)

    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)
Esempio n. 12
0
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)
Esempio n. 13
0
def get_builds(request, name, stage):
    env = environs_helper.get_env_by_stage(request, name, stage)
    env_promote = environs_helper.get_env_promotes_config(request, name, stage)

    show_lock = False
    if env_promote['type'] == 'AUTO' and env_promote['predStage'] and \
            env_promote['predStage'] == environs_helper.BUILD_STAGE:
        show_lock = True

    if 'buildName' not in env and not env['buildName']:
        html = render_to_string('builds/simple_builds.tmpl', {
            "builds": [],
            "env": env,
            "show_lock": show_lock,
        })
        return HttpResponse(html)

    current_publish_date = 0
    if 'deployId' in env and env['deployId']:
        deploy = deploys_helper.get(request, env['deployId'])
        build = builds_helper.get_build(request, deploy['buildId'])
        current_publish_date = build['publishDate']

    # return only the new builds
    index = int(request.GET.get('page_index', '1'))
    size = int(request.GET.get('page_size', common.DEFAULT_BUILD_SIZE))
    builds = builds_helper.get_builds(request,
                                      name=env['buildName'],
                                      pageIndex=index,
                                      pageSize=size)
    new_builds = []
    for build in builds:
        if build['publishDate'] > current_publish_date:
            new_builds.append(build)

    html = render_to_string(
        'builds/simple_builds.tmpl', {
            "builds": new_builds,
            "current_publish_date": current_publish_date,
            "env": env,
            "show_lock": show_lock,
        })
    return HttpResponse(html)
Esempio n. 14
0
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)
Esempio n. 15
0
def get_builds(request, name, stage):
    env = environs_helper.get_env_by_stage(request, name, stage)
    env_promote = environs_helper.get_env_promotes_config(request, name, stage)

    show_lock = False
    if env_promote['type'] == 'AUTO' and env_promote['predStage'] and \
            env_promote['predStage'] == environs_helper.BUILD_STAGE:
        show_lock = True

    if 'buildName' not in env and not env['buildName']:
        html = render_to_string('builds/simple_builds.tmpl', {
            "builds": [],
            "env": env,
            "show_lock": show_lock,
        })
        return HttpResponse(html)

    current_publish_date = 0
    if 'deployId' in env and env['deployId']:
        deploy = deploys_helper.get(request, env['deployId'])
        build = builds_helper.get_build(request, deploy['buildId'])
        current_publish_date = build['publishDate']

    # return only the new builds
    index = int(request.GET.get('page_index', '1'))
    size = int(request.GET.get('page_size', common.DEFAULT_BUILD_SIZE))
    builds = builds_helper.get_builds(request, name=env['buildName'], pageIndex=index,
                                      pageSize=size)
    new_builds = []
    for build in builds:
        if build['publishDate'] > current_publish_date:
            new_builds.append(build)

    html = render_to_string('builds/simple_builds.tmpl', {
        "builds": new_builds,
        "current_publish_date": current_publish_date,
        "env": env,
        "show_lock": show_lock,
    })
    return HttpResponse(html)
Esempio n. 16
0
    def get(self, request, name, stage=None):
        envs = environs_helper.get_all_env_stages(request, name)

        if len(envs) == 0:
            return redirect('/')

        stages, env = common.get_all_stages(envs, stage)
        env_promote = environs_helper.get_env_promotes_config(
            request, name, env['stageName'])
        stage = env['stageName']
        username = request.teletraan_user_id.name
        request_feedback = check_feedback_eligible(request, username)
        groups = environs_helper.get_env_capacity(request,
                                                  name,
                                                  stage,
                                                  capacity_type="GROUP")
        metrics = environs_helper.get_env_metrics_config(request, name, stage)
        alarms = environs_helper.get_env_alarms_config(request, name, stage)
        basic_cluster_info = clusters_helper.get_cluster(request, name, stage)

        if not env['deployId']:
            capacity_hosts = deploys_helper.get_missing_hosts(
                request, name, stage)
            provisioning_hosts = environ_hosts_helper.get_hosts(
                request, name, stage)
            response = render(
                request, 'environs/env_landing.html', {
                    "env": env,
                    "env_promote": env_promote,
                    "stages": stages,
                    "metrics": metrics,
                    "alarms": alarms,
                    "request_feedback": request_feedback,
                    "groups": groups,
                    "capacity_hosts": capacity_hosts,
                    "provisioning_hosts": provisioning_hosts,
                    "basic_cluster_info": basic_cluster_info,
                    "pinterest": IS_PINTEREST,
                })
            showMode = 'complete'
            sortByStatus = 'true'
        else:
            # Get deploy progress
            progress = deploys_helper.update_progress(request, name, stage)
            showMode = _fetch_param_with_cookie(request, 'showMode',
                                                MODE_COOKIE_NAME, 'complete')
            sortByStatus = _fetch_param_with_cookie(request, 'sortByStatus',
                                                    STATUS_COOKIE_NAME, 'true')
            report = agent_report.gen_report(request,
                                             env,
                                             progress,
                                             sortByStatus=sortByStatus)
            report.showMode = showMode
            report.sortByStatus = sortByStatus
            response = render(
                request, 'environs/env_landing.html', {
                    "env": env,
                    "env_promote": env_promote,
                    "stages": stages,
                    "report": report,
                    "has_deploy": True,
                    "metrics": metrics,
                    "alarms": alarms,
                    "request_feedback": request_feedback,
                    "groups": groups,
                    "basic_cluster_info": basic_cluster_info,
                    "pinterest": IS_PINTEREST,
                })

        # save preferences
        response.set_cookie(ENV_COOKIE_NAME, genEnvCookie(request, name))
        response.set_cookie(MODE_COOKIE_NAME, showMode)
        response.set_cookie(STATUS_COOKIE_NAME, sortByStatus)

        return response
Esempio n. 17
0
    def get(self, request, name, stage=None):
        envs = environs_helper.get_all_env_stages(request, name)

        if len(envs) == 0:
            return redirect('/')

        stages, env = common.get_all_stages(envs, stage)
        env_promote = environs_helper.get_env_promotes_config(request, name, env['stageName'])
        stage = env['stageName']
        username = request.teletraan_user_id.name
        request_feedback = check_feedback_eligible(request, username)
        groups = environs_helper.get_env_capacity(request, name, stage, capacity_type="GROUP")
        metrics = environs_helper.get_env_metrics_config(request, name, stage)
        alarms = environs_helper.get_env_alarms_config(request, name, stage)
        basic_cluster_info = None
        if IS_PINTEREST:
            basic_cluster_info = clusters_helper.get_cluster(request, name, stage)

        if not env['deployId']:
            capacity_hosts = deploys_helper.get_missing_hosts(request, name, stage)
            provisioning_hosts = environ_hosts_helper.get_hosts(request, name, stage)
            if IS_PINTEREST:
                basic_cluster_info = clusters_helper.get_cluster(request, env['envName'], env['stageName'])
                if basic_cluster_info and basic_cluster_info.get('capacity'):
                    hosts_in_cluster = clusters_helper.get_host_names(request, env['envName'], env['stageName'])
                    num_to_fake = basic_cluster_info.get('capacity') - len(hosts_in_cluster)
                    for i in range(num_to_fake):
                        faked_host = {}
                        faked_host['hostName'] = 'UNKNOWN'
                        faked_host['hostId'] = 'UNKNOWN'
                        faked_host['state'] = 'PROVISIONED'
                        provisioning_hosts.append(faked_host)

            response = render(request, 'environs/env_landing.html', {
                "env": env,
                "env_promote": env_promote,
                "stages": stages,
                "metrics": metrics,
                "alarms": alarms,
                "request_feedback": request_feedback,
                "groups": groups,
                "capacity_hosts": capacity_hosts,
                "provisioning_hosts": provisioning_hosts,
                "basic_cluster_info": basic_cluster_info,
                "pinterest": IS_PINTEREST,
            })
            showMode = 'complete'
            sortByStatus = 'true'
        else:
            # Get deploy progress
            progress = deploys_helper.update_progress(request, name, stage)
            showMode = _fetch_param_with_cookie(
                request, 'showMode', MODE_COOKIE_NAME, 'complete')
            sortByStatus = _fetch_param_with_cookie(
                request, 'sortByStatus', STATUS_COOKIE_NAME, 'true')
            report = agent_report.gen_report(request, env, progress, sortByStatus=sortByStatus)
            report.showMode = showMode
            report.sortByStatus = sortByStatus
            response = render(request, 'environs/env_landing.html', {
                "env": env,
                "env_promote": env_promote,
                "stages": stages,
                "report": report,
                "has_deploy": True,
                "metrics": metrics,
                "alarms": alarms,
                "request_feedback": request_feedback,
                "groups": groups,
                "basic_cluster_info": basic_cluster_info,
                "pinterest": IS_PINTEREST,
            })

        # save preferences
        response.set_cookie(ENV_COOKIE_NAME, genEnvCookie(request, name))
        response.set_cookie(MODE_COOKIE_NAME, showMode)
        response.set_cookie(STATUS_COOKIE_NAME, sortByStatus)

        return response