コード例 #1
0
ファイル: env_views.py プロジェクト: in-han/teletraan
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)
コード例 #2
0
ファイル: ngapp2_view.py プロジェクト: aiguoxin/teletraan
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,
    })
コード例 #3
0
ファイル: common.py プロジェクト: khanchan/teletraan
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]
コード例 #4
0
ファイル: common.py プロジェクト: khanchan/teletraan
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]
コード例 #5
0
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]
コード例 #6
0
ファイル: ngapp2_view.py プロジェクト: zmyer/teletraan
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,
    })
コード例 #7
0
ファイル: ngapp2_view.py プロジェクト: chaunceyhan/teletraan
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,
    })
コード例 #8
0
ファイル: deploy_views.py プロジェクト: zeus911/teletraan
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
コード例 #9
0
ファイル: deploy_views.py プロジェクト: apipanda/teletraan
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
コード例 #10
0
ファイル: env_views.py プロジェクト: in-han/teletraan
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)
コード例 #11
0
ファイル: env_views.py プロジェクト: theradcoder/teletraan
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)
コード例 #12
0
ファイル: env_views.py プロジェクト: theradcoder/teletraan
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)
コード例 #13
0
ファイル: env_views.py プロジェクト: tuxpower/teletraan
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)
コード例 #14
0
ファイル: env_views.py プロジェクト: theradcoder/teletraan
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
        })
コード例 #15
0
ファイル: env_views.py プロジェクト: tuxpower/teletraan
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
    })
コード例 #16
0
ファイル: env_views.py プロジェクト: tuxpower/teletraan
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,
    })
コード例 #17
0
ファイル: env_views.py プロジェクト: theradcoder/teletraan
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,
        })