예제 #1
0
def update_pas_config(request, group_name):
    try:
        params = request.POST
        if not params['metric'] or not params['throughput']:
            raise Exception(
                "All fields for Predictive Autoscaling Config Must be specified. "
            )
        data = {}
        data['group_name'] = group_name
        data["metric"] = params["metric"]
        data["throughput"] = int(params["throughput"])
        if "pas_state" in params:
            data["pas_state"] = "ENABLED"
        else:
            data["pas_state"] = "DISABLED"
            # Reset min size to user defined min size
            pas_config = autoscaling_groups_helper.get_pas_config(
                request, group_name)
            asg_request = {}
            asg_request["groupName"] = group_name
            asg_request["minSize"] = int(pas_config.get("defined_min_size"))
            autoscaling_groups_helper.update_autoscaling(
                request, group_name, asg_request)
        autoscaling_groups_helper.update_pas_config(request, group_name, data)
        return get_pas_config(request, group_name)
    except:
        log.error(traceback.format_exc())
        raise
예제 #2
0
    def get(self, request, group_name):
        autoscaling_summary = autoscaling_groups_helper.get_autoscaling_summary(
            request, group_name)
        asg_status = autoscaling_summary.get("status", "UNKNOWN")
        enable_spot = autoscaling_summary.get("enableSpot", False)
        envs = environs_helper.get_all_envs_by_group(request, group_name)
        disabled_actions = autoscaling_groups_helper.get_disabled_asg_actions(
            request, group_name)
        pas_config = autoscaling_groups_helper.get_pas_config(
            request, group_name)

        if "Terminate" in disabled_actions:
            scaling_down_event_enabled = False
        else:
            scaling_down_event_enabled = True
        group_info = autoscaling_groups_helper.get_group_info(
            request, group_name)
        if group_info:
            launch_config = group_info.get('launchInfo')
        else:
            launch_config = None
        return render(
            request, 'groups/group_details.html', {
                "asg_status": asg_status,
                "enable_spot": enable_spot,
                "group_name": group_name,
                "scaling_down_event_enabled": scaling_down_event_enabled,
                "envs": envs,
                "group_info": group_info,
                "launch_config": launch_config,
                "pas_enabled":
                pas_config['pas_state'] if pas_config else False,
            })
예제 #3
0
def get_asg_config(request, group_name):
    asg_summary = autoscaling_groups_helper.get_autoscaling_summary(
        request, group_name)
    pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
    instances = groups_helper.get_group_hosts(request, group_name)
    group_info = autoscaling_groups_helper.get_group_info(request, group_name)
    launch_config = group_info.get("launchInfo")
    group_size = len(instances)
    policies = autoscaling_groups_helper.TerminationPolicy
    if asg_summary.get("spotRatio", None):
        asg_summary["spotRatio"] *= 100
    if asg_summary.get("sensitivityRatio", None):
        asg_summary["sensitivityRatio"] *= 100
    scheduled_actions = autoscaling_groups_helper.get_scheduled_actions(
        request, group_name)
    time_based_asg = False
    if len(scheduled_actions) > 0:
        time_based_asg = True
    content = render_to_string(
        "groups/asg_config.tmpl", {
            "group_name": group_name,
            "asg": asg_summary,
            "group_size": group_size,
            "terminationPolicies": policies,
            "instanceType": launch_config.get("instanceType"),
            "time_based_asg": time_based_asg,
            "csrf_token": get_token(request),
            "pas_config": pas_config,
        })
    return HttpResponse(json.dumps(content), content_type="application/json")
예제 #4
0
def get_asg_config(request, group_name):
    asg_summary = autoscaling_groups_helper.get_autoscaling_summary(request, group_name)
    pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
    instances = groups_helper.get_group_hosts(request, group_name)
    group_info = autoscaling_groups_helper.get_group_info(request, group_name)
    launch_config = group_info.get("launchInfo")
    group_size = len(instances)
    policies = autoscaling_groups_helper.TerminationPolicy
    if asg_summary.get("spotRatio", None):
        asg_summary["spotRatio"] *= 100
    if asg_summary.get("sensitivityRatio", None):
        asg_summary["sensitivityRatio"] *= 100
    scheduled_actions = autoscaling_groups_helper.get_scheduled_actions(request, group_name)
    time_based_asg = False
    if len(scheduled_actions) > 0:
        time_based_asg = True
    content = render_to_string("groups/asg_config.tmpl", {
        "group_name": group_name,
        "asg": asg_summary,
        "group_size": group_size,
        "terminationPolicies": policies,
        "instanceType": launch_config.get("instanceType"),
        "time_based_asg": time_based_asg,
        "csrf_token": get_token(request),
        "pas_config": pas_config,
    })
    return HttpResponse(json.dumps(content), content_type="application/json")
예제 #5
0
    def get(self, request, group_name):
        asg_cluster = autoscaling_groups_helper.get_group_info(request, group_name)
        appNames = baseimages_helper.get_image_names(request, 'AWS')
        appNames = sorted(appNames)
        is_cmp = False
        if asg_cluster:
            asg_vm_info = asg_cluster.get("launchInfo")
            curr_image = None
            if asg_vm_info:
                curr_image = baseimages_helper.get_by_provider_name(request, asg_vm_info["imageId"])
                if asg_vm_info.get("subnets"):
                    asg_vm_info["subnetArrays"] = asg_vm_info["subnets"].split(',')
            group_info = asg_cluster.get("groupInfo")
            group_info = get_group_config_internal(group_info)
            #Directly search the cluster name. As long as there exists a cluster, treat this as cmp and hide
            #Launch Configuration
            basic_cluster_info = clusters_helper.get_cluster(request, group_name)
            if basic_cluster_info:
                is_cmp = True
        else:
            asg_vm_info = None
            group_info = None
            curr_image = None

        pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
        return render(request, 'groups/asg_config.html', {
            "asg_vm_config": asg_vm_info,
            "app_names": appNames,
            "curr_image": curr_image,
            "group_config": group_info,
            "group_name": group_name,
            "pas_config": pas_config,
            "is_cmp": is_cmp
        })
예제 #6
0
    def get(self, request, group_name):
        asg_cluster = autoscaling_groups_helper.get_group_info(request, group_name)
        appNames = baseimages_helper.get_image_names(request, 'AWS')
        appNames = sorted(appNames)
        is_cmp = False
        if asg_cluster:
            asg_vm_info = asg_cluster.get("launchInfo")
            curr_image = None
            if asg_vm_info:
                curr_image = baseimages_helper.get_by_provider_name(request, asg_vm_info["imageId"])
                if asg_vm_info.get("subnets"):
                    asg_vm_info["subnetArrays"] = asg_vm_info["subnets"].split(',')
            group_info = asg_cluster.get("groupInfo")
            group_info = get_group_config_internal(group_info)
            envs = environs_helper.get_all_envs_by_group(request, group_name)
            for env in envs:
                basic_cluster_info = clusters_helper.get_cluster(request, env.get('clusterName'))
                if basic_cluster_info:
                    is_cmp = True
        else:
            asg_vm_info = None
            group_info = None
            curr_image = None

        pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
        return render(request, 'groups/asg_config.html', {
            "asg_vm_config": asg_vm_info,
            "app_names": appNames,
            "curr_image": curr_image,
            "group_config": group_info,
            "group_name": group_name,
            "pas_config": pas_config,
            "is_cmp": is_cmp
        })
예제 #7
0
    def get(self, request, group_name):
        autoscaling_summary = autoscaling_groups_helper.get_autoscaling_summary(request, group_name)
        asg_status = autoscaling_summary.get("status", "UNKNOWN")
        enable_spot = autoscaling_summary.get("enableSpot", False)
        envs = environs_helper.get_all_envs_by_group(request, group_name)
        disabled_actions = autoscaling_groups_helper.get_disabled_asg_actions(request, group_name)
        pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)

        if "Terminate" in disabled_actions:
            scaling_down_event_enabled = False
        else:
            scaling_down_event_enabled = True
        group_info = autoscaling_groups_helper.get_group_info(request, group_name)
        if group_info:
            launch_config = group_info.get('launchInfo')
        else:
            launch_config = None
        return render(request, 'groups/group_details.html', {
            "asg_status": asg_status,
            "enable_spot": enable_spot,
            "group_name": group_name,
            "scaling_down_event_enabled": scaling_down_event_enabled,
            "envs": envs,
            "group_info": group_info,
            "launch_config": launch_config,
            "pas_enabled": pas_config['pas_state'] if pas_config else False,
        })
예제 #8
0
    def get(self, request, group_name):
        asg_cluster = autoscaling_groups_helper.get_group_info(request, group_name)
        appNames = baseimages_helper.get_image_names(request, 'AWS')
        appNames = sorted(appNames)
        is_cmp = False
        if asg_cluster:
            asg_vm_info = asg_cluster.get("launchInfo")
            curr_image = None
            if asg_vm_info:
                curr_image = baseimages_helper.get_by_provider_name(request, asg_vm_info["imageId"])
                if asg_vm_info.get("subnets"):
                    asg_vm_info["subnetArrays"] = asg_vm_info["subnets"].split(',')
            group_info = asg_cluster.get("groupInfo")
            group_info = get_group_config_internal(group_info)
            #Directly search the cluster name. As long as there exists a cluster, treat this as cmp and hide
            #Launch Configuration
            basic_cluster_info = clusters_helper.get_cluster(request, group_name)
            if basic_cluster_info:
                is_cmp = True
        else:
            asg_vm_info = None
            group_info = None
            curr_image = None

        pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
        return render(request, 'groups/asg_config.html', {
            "asg_vm_config": asg_vm_info,
            "app_names": appNames,
            "curr_image": curr_image,
            "group_config": group_info,
            "group_name": group_name,
            "pas_config": pas_config,
            "is_cmp": is_cmp
        })
예제 #9
0
def get_pas_config(request, group_name):
    try:
        pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
        html = render_to_string('groups/pase_config.tmpl', {
            "group_name": group_name,
            "pas_config": pas_config,
            "csrf_token": get_token(request),
        })
    except:
        log.error(traceback.format_exc())
        raise
    return HttpResponse(json.dumps(html), content_type="application/json")
예제 #10
0
def get_pas_config(request, group_name):
    try:
        pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
        html = render_to_string('groups/pase_config.tmpl', {
            "group_name": group_name,
            "pas_config": pas_config,
            "csrf_token": get_token(request),
        })
    except:
        log.error(traceback.format_exc())
        raise
    return HttpResponse(json.dumps(html), content_type="application/json")
예제 #11
0
def get_pas_metrics(request, group_name):
    pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
    util_data = {}
    if pas_config['pas_state'] != 'ENABLED':
        return HttpResponse(json.dumps(util_data), content_type="application/json")
    try:
        arcee_size_points = autoscaling_metrics_helper.get_pas_metrics(request, group_name,
                                                                       settings.DEFAULT_START_TIME, 'PREDICTED')


        json_data3 = []
        for data_point in arcee_size_points:
            timestamp, value = data_point["timestamp"], data_point["value"]
            json_data3.append([timestamp, value])
        util_data['arcee'] = json_data3
    except:
        log.error(traceback.format_exc())
    return HttpResponse(json.dumps(util_data), content_type="application/json")
예제 #12
0
    def get(self, request, group_name):
        asg_cluster = autoscaling_groups_helper.get_group_info(
            request, group_name)
        appNames = baseimages_helper.get_image_names(request, 'AWS')
        appNames = sorted(appNames)
        is_cmp = False
        if asg_cluster:
            asg_vm_info = asg_cluster.get("launchInfo")
            curr_image = None
            if asg_vm_info:
                curr_image = baseimages_helper.get_by_provider_name(
                    request, asg_vm_info["imageId"])
                if asg_vm_info.get("subnets"):
                    asg_vm_info["subnetArrays"] = asg_vm_info["subnets"].split(
                        ',')
            group_info = asg_cluster.get("groupInfo")
            group_info = get_group_config_internal(group_info)
            envs = environs_helper.get_all_envs_by_group(request, group_name)
            for env in envs:
                basic_cluster_info = clusters_helper.get_cluster(
                    request, env.get('clusterName'))
                if basic_cluster_info:
                    is_cmp = True
        else:
            asg_vm_info = None
            group_info = None
            curr_image = None

        pas_config = autoscaling_groups_helper.get_pas_config(
            request, group_name)
        return render(
            request, 'groups/asg_config.html', {
                "asg_vm_config": asg_vm_info,
                "app_names": appNames,
                "curr_image": curr_image,
                "group_config": group_info,
                "group_name": group_name,
                "pas_config": pas_config,
                "is_cmp": is_cmp
            })
예제 #13
0
def update_pas_config(request, group_name):
    try:
        params = request.POST
        if not params['metric'] or not params['throughput']:
            raise Exception("All fields for Predictive Autoscaling Config Must be specified. ")
        data = {}
        data['group_name'] = group_name
        data["metric"] = params["metric"]
        data["throughput"] = int(params["throughput"])
        if "pas_state" in params:
            data["pas_state"] = "ENABLED"
        else:
            data["pas_state"] = "DISABLED"
            # Reset min size to user defined min size
            pas_config = autoscaling_groups_helper.get_pas_config(request, group_name)
            asg_request = {}
            asg_request["groupName"] = group_name
            asg_request["minSize"] = int(pas_config.get("defined_min_size"))
            autoscaling_groups_helper.update_autoscaling(request, group_name, asg_request)
        autoscaling_groups_helper.update_pas_config(request, group_name, data)
        return get_pas_config(request, group_name)
    except:
        log.error(traceback.format_exc())
        raise