コード例 #1
0
ファイル: rack.py プロジェクト: rowlandifeanyi17/cloudmesh
def refresh_rack_map():
    service = request.args.get("service")
    rack = request.args.get("rack")
    # double check to make sure rack can provide the specific service
    rack_form = RackForm()
    if rack not in rack_form.all_services_dict[service]["clusters"]:
        log.error(
            "Someone try to hack the service [service: '{0}' on rack: '{1}'] provided by Rack Diagram. Just ignore it."
            .format(service, rack))
        return redirect("/inventory/rack")

    myfetch = FetchClusterInfo(g.user.id)
    map_progress = myfetch.get_map_progress(service)
    map_progress.set_refresh_map()
    map_progress.set_send_http_request()
    result = {
        "result": "failure",
        "reason": {
            "status": "failure",
            "text": "Read DB Error"
        }
    }
    result_dict = myfetch.start_refresh_map(service, rack)
    if result_dict["result"]:
        result["result"] = "success"
    elif result_dict["fresh"]:
        result["reason"]["status"] = "success"
        result["reason"]["text"] = "Data is already newest"

    return json.dumps(result)
コード例 #2
0
ファイル: rack.py プロジェクト: rowlandifeanyi17/cloudmesh
def rack_map_progress_status():
    service = request.args.get("service")
    result = {"text": "", "value": 0, "next": ""}

    myfetch = FetchClusterInfo(g.user.id)
    map_progress = myfetch.get_map_progress(service)
    if map_progress:
        result = map_progress.get_status()
        #log.debug("progress status: {0}".format(result))
        if result["next"] == "loading map":
            result["data"] = map_progress.get_data("map_data")

    return json.dumps(result)
コード例 #3
0
ファイル: rack.py プロジェクト: rahulsinghania/cloudmesh
def rack_map_progress_status():
    service = request.args.get("service")
    result = {"text": "", "value": 0, "next": ""}

    myfetch = FetchClusterInfo(g.user.id)
    map_progress = myfetch.get_map_progress(service)
    if map_progress:
        result = map_progress.get_status()
        # log.debug("progress status: {0}".format(result))
        if result["next"] == "loading map":
            result["data"] = map_progress.get_data("map_data")

    return json.dumps(result)
コード例 #4
0
ファイル: rack.py プロジェクト: jeff-ridgeway/cloudmesh
def gen_rack_map():
    service = request.args.get("service")
    rack = request.args.get("rack")
    # double check to make sure rack can provide the specific service
    rack_form = RackForm()
    if rack not in rack_form.all_services_dict[service]["clusters"]:
        log.error("Someone try to hack the service [service: '{0}' on rack: '{1}'] provided by Rack Diagram. Just ignore it.".format(service, rack))
        return redirect("/inventory/rack")
    
    myfetch = FetchClusterInfo(g.user.id)
    map_progress = myfetch.get_map_progress(service)
    map_progress.set_load_map()
    map_progress.set_send_http_request()
    result = {"result": "failure", "reason": {"status": "failure", "text": "Read DB Error"}}
    if myfetch.start_gen_map(service, rack):
        result["result"] = "success"
    return json.dumps(result)
コード例 #5
0
ファイル: rack.py プロジェクト: rowlandifeanyi17/cloudmesh
def display_rack_map():

    ####
    #
    #  Flag of debug, True means generate fake data with random generator
    #                 False means fetch the real data from server
    ####
    flag_debug = False

    # class name means the specific class to generate map for different service type
    # method name means the specific method to fetch real data of different service type,
    #     the methods are defined in class FetchClusterInfo
    service_options = {
        "temperature": {
            "class": HeatClusterMap,
            "method": "fetch_temperature_ipmi",
        },
        "service": {
            "class": ServiceClusterMap,
            "method": "fetch_service_type",
        },
    }

    # rack denote the rack user selected
    # service denote the service user selected on the specific rack
    rack = request.form['select_rack']
    service = request.form['select_service']

    # double check to make sure rack can provide the specific service
    rack_form = RackForm()
    if rack not in rack_form.all_services_dict[service]["clusters"]:
        log.error(
            "Someone try to hack the service [service: '{0}' on rack: '{1}'] provided by Rack Diagram. Just ignore it."
            .format(service, rack))
        return redirect("/inventory/rack")

    # get location of configuration file, input diag, output image
    dir_base = config_file("")
    server_config = cm_config_server()
    relative_dir_diag = server_config.get("cloudmesh.server.rack.input")
    relative_dir_image = server_config.get(
        "cloudmesh.server.rack.diagrams.{0}".format(service))
    # log.debug("relative dir image, {0}".format(relative_dir_image))
    flask_dir = "static"
    # guess absolute path of webui
    rack_py_dir = pwd().strip().split("/")
    webui_dir = rack_py_dir  # [:-1]
    # log.debug("webui dir, {0}".format(webui_dir))
    list_image_dir = [flask_dir] + relative_dir_image.strip().split("/")
    abs_dir_image = "/".join(webui_dir + list_image_dir)
    abs_dir_diag = dir_base + "/" + relative_dir_diag
    # dynamic generate image
    map_class = service_options[service]["class"](rack, dir_base, abs_dir_diag,
                                                  abs_dir_image)
    # get cluster server data
    dict_data = None
    if flag_debug:
        dict_data = map_class.genRandomValues()
    else:
        # fetch the real data ....
        # TODO cloudmesh.hpc.proxyserver
        # should we add a field in cloudmesh.yaml for the proxy server to run pbsnodes ???
        config = cm_config()
        user = config.get("cloudmesh.hpc.username")
        myfetch = FetchClusterInfo(user, "india.futuregrid.org")
        flag_filter = None if rack == "all" else rack
        # If user want to customize the action, user can set optional param here
        # by calling map_class.set_optional_param(value)
        # optional param
        aparam = map_class.get_optional_param()
        dict_data = getattr(myfetch,
                            service_options[service]["method"])(flag_filter,
                                                                aparam)

    # update data
    map_class.update(dict_data)
    # plot map
    map_class.plot()

    # get image names
    filename_image = map_class.getImageFilename()
    filename_legend = map_class.getLegendFilename()
    image_size = map_class.getImageSize()
    legend_size = map_class.getImageLegendSize()
    # log.debug("legend size is: {0}".format(legend_size))
    abs_web_path_image = "/".join([""] + list_image_dir + [filename_image])
    abs_web_path_legend = "/".join([""] + list_image_dir + [filename_legend])
    img_flag = "?" + str(time.time())
    return render_template("mesh/rack/rack.html",
                           flag_home=False,
                           rack=rack,
                           imageWidth=image_size["width"],
                           imageHeight=image_size["height"],
                           legendWidth=legend_size["width"],
                           legendHeight=legend_size["height"],
                           service=service,
                           imageFilename=abs_web_path_image + img_flag,
                           legendFilename=abs_web_path_legend + img_flag)