From 9a88b7f992e263d07136a41bf6d3ab1ebafcf4ca Mon Sep 17 00:00:00 2001 From: Daniel Molina Date: Thu, 18 Jun 2015 19:08:40 +0200 Subject: [PATCH] feature #3748: refactor provision flows --- .../app/tabs/provision-tab/flows/info.hbs | 6 +- .../app/tabs/provision-tab/flows/list.hbs | 28 +- .../app/tabs/provision-tab/flows/list.js | 695 ++++++++++++++++++ 3 files changed, 712 insertions(+), 17 deletions(-) create mode 100644 src/sunstone/public/app/tabs/provision-tab/flows/list.js diff --git a/src/sunstone/public/app/tabs/provision-tab/flows/info.hbs b/src/sunstone/public/app/tabs/provision-tab/flows/info.hbs index a12b48b5e5..37ec87fb74 100644 --- a/src/sunstone/public/app/tabs/provision-tab/flows/info.hbs +++ b/src/sunstone/public/app/tabs/provision-tab/flows/info.hbs @@ -10,13 +10,13 @@
'); + + $(".provision_roles_ul", context).html(""); + if (body.roles) { + $.each(body.roles, function(index, role) { + var role_state = get_provision_flow_state(role); + var rvms = { + str : (role.nodes ? role.nodes.length : 0) + " / " + role.cardinality , + percentage : Math.floor((role.nodes ? role.nodes.length : 0) / role.cardinality)*100 + } + + var li = $( + '
  • '+ + '
      '+ + '
    • '+ + ' '+ + role.name+ + '
    • '+ + '
    • '+ + '
      '+ + ' '+ + '
      '+ + '
    • '+ + '
    • '+ + ''+ + role_state.str+ + ''+ + ''+rvms.str+" VMs"+ + '
    • '+ + '
    • '+ + '
      '+ + '
    • '+ + '
    • '+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
    • '+ + '
    '+ + '
  • ').appendTo($(".provision_roles_ul", context)); + + $(".provision_role_ul", li).data("role", role); + if (role_id && role_id == role.name) { + $(".provision_role_vms_button", li).trigger("click"); + } + }); + } + + $(".provision_info_flow_state_hr", context).html('
    '); + + $(".provision_confirm_action:first", context).html(""); + + $(".provision_info_flow_loading", context).hide(); + $(".provision_info_flow", context).css('visibility', 'visible'); + } + }) + } + + context.on("click", ".provision_role_vms_button", function(){ + $(".provision_role_vms_container", context).html('
    '+ + ''+ + ''+ + ''+ + ''+ + '
    '+ + '
    '+ + ''+ + ''+ + '
    '); + + var role = $(this).closest(".provision_role_ul").data('role'); + $(".provision_info_flow", context).data("role_id", role.name); + var vms = [] + + if (role.nodes && role.nodes.length > 0) { + $.each(role.nodes, function(index, node){ + vms.push(node.vm_info); + }) + } + + ProvisionVmsList.generate( + $(".provision_role_vms_container", context), + { + title: role.name + ' ' + Locale.tr("VMs"), + active: true, + refresh: false, + create: false, + filter: false, + data: vms + }); + }) + + context.on("click", ".provision_role_cardinality_button", function(){ + var role = $(this).closest(".provision_role_ul").data('role'); + var min_vms = (role.min_vms||1); + var max_vms = (role.max_vms||100); + + $(".provision_confirm_action:first", context).html( + '
    '+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + ''+role.cardinality+''+ + '
    '+ + ''+role.name + ' ' + Locale.tr("VMs")+''+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + ''+min_vms+''+ + ''+max_vms+''+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + ''+Locale.tr("Change Cardinality")+''+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + ''+Locale.tr("The cardinality for this role cannot be changed")+''+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + '×'+ + '
    '); + + + if (max_vms > min_vms) { + $( ".cardinality_slider_div", context).show(); + $( ".cardinality_no_slider_div", context).hide(); + + var provision_cardinality_slider = $( ".cardinality_slider", context).noUiSlider({ + handles: 1, + connect: "lower", + range: [min_vms, max_vms], + step: 1, + start: role.cardinality, + value: role.cardinality, + slide: function(type) { + if ( type != "move"){ + if ($(this).val()) { + $(".cardinality_value", context).html($(this).val()); + } + } + } + }); + + provision_cardinality_slider.val(role.cardinality) + + provision_cardinality_slider.addClass("noUiSlider"); + } else { + $( ".cardinality_slider_div", context).hide(); + $( ".cardinality_no_slider_div", context).show(); + } + + return false; + }); + + context.on("click", ".provision_change_cardinality_button", function(){ + var flow_id = $(".provision_info_flow", context).attr("flow_id"); + var cardinality = $(".cardinality_slider", context).val() + + OpenNebula.Role.update({ + data : { + id: flow_id + '/role/' + $(this).attr("role_id"), + extra_param: { + cardinality: cardinality + } + }, + success: function(request, response){ + OpenNebula.Action.clear_cache("SERVICE"); + $(".provision_refresh_info", context).trigger("click"); + }, + error: Notifier.onError + }) + }); + + context.on("click", ".provision_delete_confirm_button", function(){ + $(".provision_confirm_action:first", context).html( + '
    '+ + '
    '+ + '
    '+ + ''+ + Locale.tr("Be careful, this action will inmediately destroy your Service")+ + '
    '+ + Locale.tr("All the information will be lost!")+ + '
    '+ + '
    '+ + ''+ + '
    '+ + '×'+ + '
    '); + }); + + context.on("click", ".provision_shutdown_confirm_button", function(){ + $(".provision_confirm_action:first", context).html( + '
    '+ + '
    '+ + '
    '+ + ''+ + Locale.tr("Be careful, this action will inmediately shutdown your Service")+ + '
    '+ + Locale.tr("All the information will be lost!")+ + '
    '+ + '
    '+ + ''+ + '
    '+ + '×'+ + '
    '); + }); + + context.on("click", ".provision_recover_button", function(){ + var flow_id = $(".provision_info_flow", context).attr("flow_id"); + + OpenNebula.Service.recover({ + data : { + id: flow_id + }, + success: function(request, response){ + update_provision_flow_info(flow_id, context); + }, + error: Notifier.onError + }) + }); + + context.on("click", ".provision_shutdown_button", function(){ + var flow_id = $(".provision_info_flow", context).attr("flow_id"); + + OpenNebula.Service.shutdown({ + data : { + id: flow_id + }, + success: function(request, response){ + update_provision_flow_info(flow_id, context); + }, + error: Notifier.onError + }) + }); + + context.on("click", ".provision_delete_button", function(){ + var button = $(this); + button.attr("disabled", "disabled"); + var flow_id = $(".provision_info_flow", context).attr("flow_id"); + + OpenNebula.Service.del({ + data : { + id: flow_id + }, + success: function(request, response){ + $(".provision_back", context).click(); + $(".provision_flows_list_refresh_button", context).click(); + button.removeAttr("disabled"); + }, + error: function(request, response){ + Notifier.onError(request, response); + button.removeAttr("disabled"); + } + }) + }); + + context.on("click", ".provision_refresh_info", function(){ + var flow_id = $(".provision_info_flow", context).attr("flow_id"); + var role_id = $(".provision_info_flow", context).data("role_id"); + update_provision_flow_info(flow_id, context, role_id); + //$(".provision_flows_list_refresh_button", $(".provision_flows_list_section")).trigger("click"); + return false; + }); + + // + // Info Flow + // + + $(".provision_list_flows", context).on("click", ".provision_info_flow_button", function(){ + $("a.provision_show_flow_accordion", context).trigger("click"); + + var flow_id = $(this).parents(".provision-pricing-table").attr("opennebula_id") + update_provision_flow_info(flow_id, context); + return false; + }) + } + + function get_provision_flow_start_time(data) { + if (data.log) { + return data.log[0].timestamp + } else { + return null; + } + } + + // @params + // data: and BODY object of the Document representing the Service + // Example: data.ID + // @returns and object containing the following properties + // color: css class for this state. + // color + '-color' font color class + // color + '-bg' background class + // str: user friendly state string + function get_provision_flow_state(data) { + var state = OpenNebula.Service.state(data.state); + var state_color; + var state_str; + + switch (state) { + case Locale.tr("PENDING"): + state_color = 'deploying'; + state_str = Locale.tr("PENDING"); + break; + case Locale.tr("DEPLOYING"): + state_color = 'deploying'; + state_str = Locale.tr("DEPLOYING"); + break; + case Locale.tr("UNDEPLOYING"): + state_color = 'powering_off'; + state_str = Locale.tr("UNDEPLOYING"); + break; + case Locale.tr("FAILED_UNDEPLOYING"): + state_color = 'error'; + state_str = Locale.tr("FAILED UNDEPLOYING"); + break; + case Locale.tr("FAILED_DEPLOYING"): + state_color = 'error'; + state_str = Locale.tr("FAILED DEPLOYING"); + break; + case Locale.tr("FAILED_SCALING"): + state_color = 'error'; + state_str = Locale.tr("FAILED SCALING"); + break; + case Locale.tr("WARNING"): + state_color = 'error'; + state_str = Locale.tr("WARNING"); + break; + case Locale.tr("RUNNING"): + state_color = 'running'; + state_str = Locale.tr("RUNNING"); + break; + case Locale.tr("SCALING"): + state_color = 'deploying'; + state_str = Locale.tr("SCALING"); + break; + case Locale.tr("COOLDOWN"): + state_color = 'error'; + state_str = Locale.tr("COOLDOWN"); + break; + case Locale.tr("DONE"): + state_color = 'off'; + state_str = Locale.tr("DONE"); + break; + default: + state_color = 'powering_off'; + state_str = Locale.tr("UNKNOWN"); + break; + } + + return { + color: state_color, + str: state_str + } + } +});