diff --git a/src/cli/one_helper/onegroup_helper.rb b/src/cli/one_helper/onegroup_helper.rb index 4cbd25be86..8220e40bfa 100644 --- a/src/cli/one_helper/onegroup_helper.rb +++ b/src/cli/one_helper/onegroup_helper.rb @@ -108,6 +108,22 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper column :VMS , "Number of VMS", :size=>9 do |d| begin q = quotas[d['ID']] + + if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0 + q['VM_QUOTA']['VM'] = { + "VMS" => OneQuotaHelper::LIMIT_DEFAULT, + "VMS_USED" => "0", + "CPU" => OneQuotaHelper::LIMIT_DEFAULT, + "CPU_USED" => "0", + "MEMORY" => OneQuotaHelper::LIMIT_DEFAULT, + "MEMORY_USED" => "0", + "VOLATILE_SIZE" => OneQuotaHelper::LIMIT_DEFAULT, + "VOLATILE_SIZE_USED" => "0" + } + + quotas[d['ID']] = q + end + limit = q['VM_QUOTA']['VM']["VMS"] if limit == OneQuotaHelper::LIMIT_DEFAULT @@ -129,6 +145,22 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper column :MEMORY, "Total memory allocated to user VMs", :size=>17 do |d| begin q = quotas[d['ID']] + + if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0 + q['VM_QUOTA']['VM'] = { + "VMS" => OneQuotaHelper::LIMIT_DEFAULT, + "VMS_USED" => "0", + "CPU" => OneQuotaHelper::LIMIT_DEFAULT, + "CPU_USED" => "0", + "MEMORY" => OneQuotaHelper::LIMIT_DEFAULT, + "MEMORY_USED" => "0", + "VOLATILE_SIZE" => OneQuotaHelper::LIMIT_DEFAULT, + "VOLATILE_SIZE_USED" => "0" + } + + quotas[d['ID']] = q + end + limit = q['VM_QUOTA']['VM']["MEMORY"] if limit == OneQuotaHelper::LIMIT_DEFAULT @@ -153,6 +185,22 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper column :CPU, "Total CPU allocated to user VMs", :size=>11 do |d| begin q = quotas[d['ID']] + + if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0 + q['VM_QUOTA']['VM'] = { + "VMS" => OneQuotaHelper::LIMIT_DEFAULT, + "VMS_USED" => "0", + "CPU" => OneQuotaHelper::LIMIT_DEFAULT, + "CPU_USED" => "0", + "MEMORY" => OneQuotaHelper::LIMIT_DEFAULT, + "MEMORY_USED" => "0", + "VOLATILE_SIZE" => OneQuotaHelper::LIMIT_DEFAULT, + "VOLATILE_SIZE_USED" => "0" + } + + quotas[d['ID']] = q + end + limit = q['VM_QUOTA']['VM']["CPU"] if limit == OneQuotaHelper::LIMIT_DEFAULT @@ -269,6 +317,6 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper } helper = OneQuotaHelper.new - helper.format_quota(group_hash['GROUP'], default_quotas) + helper.format_quota(group_hash['GROUP'], default_quotas, group.id) end end diff --git a/src/cli/one_helper/onequota_helper.rb b/src/cli/one_helper/onequota_helper.rb index fd3ea68b52..a6d86ce10d 100644 --- a/src/cli/one_helper/onequota_helper.rb +++ b/src/cli/one_helper/onequota_helper.rb @@ -189,8 +189,9 @@ class OneQuotaHelper # Outputs formated quota information to stdout # @param qh [Hash] with the quotas for a given resource # @param default_quotas_hash [XMLElement] with the default quota limits + # @param resource_id [Integer] user/group ID # - def format_quota(qh, default_quotas) + def format_quota(qh, default_quotas, resource_id) str_h1="%-80s" puts @@ -203,6 +204,23 @@ class OneQuotaHelper vm_quotas = [qh['VM_QUOTA']['VM']].flatten + # This initializes the VM quotas for users/groups that don't have any + # resource usage yet. It not applied to oneamdin + if vm_quotas[0].nil? && resource_id.to_i != 0 + limit = LIMIT_DEFAULT + + vm_quotas = [{ + "VMS" => limit, + "VMS_USED" => "0", + "CPU" => limit, + "CPU_USED" => "0", + "MEMORY" => limit, + "MEMORY_USED" => "0", + "VOLATILE_SIZE" => limit, + "VOLATILE_SIZE_USED" => "0" + }] + end + if !vm_quotas[0].nil? CLIHelper::ShowTable.new(nil, self) do column :"NUMBER OF VMS", "", :right, :size=>17 do |d| diff --git a/src/cli/one_helper/oneuser_helper.rb b/src/cli/one_helper/oneuser_helper.rb index 4d567c6d8c..e9cebeb3c6 100644 --- a/src/cli/one_helper/oneuser_helper.rb +++ b/src/cli/one_helper/oneuser_helper.rb @@ -251,6 +251,22 @@ class OneUserHelper < OpenNebulaHelper::OneHelper column :VMS , "Number of VMS", :size=>9 do |d| begin q = quotas[d['ID']] + + if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0 + q['VM_QUOTA']['VM'] = { + "VMS" => OneQuotaHelper::LIMIT_DEFAULT, + "VMS_USED" => "0", + "CPU" => OneQuotaHelper::LIMIT_DEFAULT, + "CPU_USED" => "0", + "MEMORY" => OneQuotaHelper::LIMIT_DEFAULT, + "MEMORY_USED" => "0", + "VOLATILE_SIZE" => OneQuotaHelper::LIMIT_DEFAULT, + "VOLATILE_SIZE_USED" => "0" + } + + quotas[d['ID']] = q + end + limit = q['VM_QUOTA']['VM']["VMS"] if limit == OneQuotaHelper::LIMIT_DEFAULT @@ -274,6 +290,22 @@ class OneUserHelper < OpenNebulaHelper::OneHelper column :MEMORY, "Total memory allocated to user VMs", :size=>17 do |d| begin q = quotas[d['ID']] + + if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0 + q['VM_QUOTA']['VM'] = { + "VMS" => OneQuotaHelper::LIMIT_DEFAULT, + "VMS_USED" => "0", + "CPU" => OneQuotaHelper::LIMIT_DEFAULT, + "CPU_USED" => "0", + "MEMORY" => OneQuotaHelper::LIMIT_DEFAULT, + "MEMORY_USED" => "0", + "VOLATILE_SIZE" => OneQuotaHelper::LIMIT_DEFAULT, + "VOLATILE_SIZE_USED" => "0" + } + + quotas[d['ID']] = q + end + limit = q['VM_QUOTA']['VM']["MEMORY"] if limit == OneQuotaHelper::LIMIT_DEFAULT @@ -300,6 +332,22 @@ class OneUserHelper < OpenNebulaHelper::OneHelper column :CPU, "Total CPU allocated to user VMs", :size=>11 do |d| begin q = quotas[d['ID']] + + if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0 + q['VM_QUOTA']['VM'] = { + "VMS" => OneQuotaHelper::LIMIT_DEFAULT, + "VMS_USED" => "0", + "CPU" => OneQuotaHelper::LIMIT_DEFAULT, + "CPU_USED" => "0", + "MEMORY" => OneQuotaHelper::LIMIT_DEFAULT, + "MEMORY_USED" => "0", + "VOLATILE_SIZE" => OneQuotaHelper::LIMIT_DEFAULT, + "VOLATILE_SIZE_USED" => "0" + } + + quotas[d['ID']] = q + end + limit = q['VM_QUOTA']['VM']["CPU"] if limit == OneQuotaHelper::LIMIT_DEFAULT @@ -393,6 +441,6 @@ class OneUserHelper < OpenNebulaHelper::OneHelper } helper = OneQuotaHelper.new - helper.format_quota(user_hash['USER'], default_quotas) + helper.format_quota(user_hash['USER'], default_quotas, user.id) end end diff --git a/src/sunstone/public/js/plugins/groups-tab.js b/src/sunstone/public/js/plugins/groups-tab.js index a53f8aae65..a1ae7b6bc3 100644 --- a/src/sunstone/public/js/plugins/groups-tab.js +++ b/src/sunstone/public/js/plugins/groups-tab.js @@ -513,32 +513,28 @@ function groupElementArray(group_json){ } } - var vms = "-"; - var memory = "-"; - var cpu = "-"; + var vms = '<span class="progress-text right" style="font-size: 12px">-</span>'; + var memory = '<span class="progress-text right" style="font-size: 12px">-</span>'; + var cpu = '<span class="progress-text right" style="font-size: 12px">-</span>'; + + initEmptyQuotas(group); if (!$.isEmptyObject(group.VM_QUOTA)){ - var vms = quotaBar( + vms = quotaBar( group.VM_QUOTA.VM.VMS_USED, group.VM_QUOTA.VM.VMS, default_group_quotas.VM_QUOTA.VM.VMS); - var memory = quotaBarMB( + memory = quotaBarMB( group.VM_QUOTA.VM.MEMORY_USED, group.VM_QUOTA.VM.MEMORY, default_group_quotas.VM_QUOTA.VM.MEMORY); - var cpu = quotaBarFloat( + cpu = quotaBarFloat( group.VM_QUOTA.VM.CPU_USED, group.VM_QUOTA.VM.CPU, default_group_quotas.VM_QUOTA.VM.CPU); - } else { - - var vms = quotaBar(0,0,null); - var memory = quotaBarMB(0,0,null); - var cpu = quotaBarFloat(0,0,null); - } return [ diff --git a/src/sunstone/public/js/plugins/provision-tab.js b/src/sunstone/public/js/plugins/provision-tab.js index 4977b06117..7cfb57bf02 100644 --- a/src/sunstone/public/js/plugins/provision-tab.js +++ b/src/sunstone/public/js/plugins/provision-tab.js @@ -2644,6 +2644,8 @@ function show_provision_dashboard() { success: function(request,user_json){ var user = user_json.USER; + initEmptyQuotas(user); + if (!$.isEmptyObject(user.VM_QUOTA)){ var default_user_quotas = Quotas.default_quotas(user.DEFAULT_USER_QUOTAS); @@ -2692,6 +2694,8 @@ function show_provision_dashboard() { success: function(request,group_json){ var group = group_json.GROUP; + initEmptyQuotas(group); + if (!$.isEmptyObject(group.VM_QUOTA)){ var default_group_quotas = Quotas.default_quotas(group.DEFAULT_GROUP_QUOTAS); @@ -5221,6 +5225,9 @@ function setup_provision_user_info(context) { $(".provision_info_vdc_user_name", context).text(data.NAME); $(".provision-pricing-table_user_info", context).html(""); + + initEmptyQuotas(data); + if (!$.isEmptyObject(data.VM_QUOTA)){ var default_user_quotas = Quotas.default_quotas(data.DEFAULT_USER_QUOTAS); quotas = quotaBarFloat( @@ -5731,6 +5738,21 @@ function setup_provision_users_list(context){ if (q != undefined){ var quota = q.QUOTAS; + if ($.isEmptyObject(quota.VM_QUOTA)){ + var limit = (data.ID != 0 ? QUOTA_LIMIT_DEFAULT : QUOTA_LIMIT_UNLIMITED); + + quota.VM_QUOTA = { + VM: { + VMS : limit, + VMS_USED : 0, + CPU : limit, + CPU_USED : 0, + MEMORY : limit, + MEMORY_USED : 0 + } + } + } + if (!$.isEmptyObject(quota.VM_QUOTA)){ quotas = quotaBarFloat( quota.VM_QUOTA.VM.VMS_USED, diff --git a/src/sunstone/public/js/plugins/users-tab.js b/src/sunstone/public/js/plugins/users-tab.js index b3dc0e87b0..0cca9bf325 100644 --- a/src/sunstone/public/js/plugins/users-tab.js +++ b/src/sunstone/public/js/plugins/users-tab.js @@ -439,32 +439,28 @@ function userElements(){ function userElementArray(user_json){ var user = user_json.USER; - var vms = "-"; - var memory = "-"; - var cpu = "-"; + var vms = '<span class="progress-text right" style="font-size: 12px">-</span>'; + var memory = '<span class="progress-text right" style="font-size: 12px">-</span>'; + var cpu = '<span class="progress-text right" style="font-size: 12px">-</span>'; + + initEmptyQuotas(user); if (!$.isEmptyObject(user.VM_QUOTA)){ - var vms = quotaBar( + vms = quotaBar( user.VM_QUOTA.VM.VMS_USED, user.VM_QUOTA.VM.VMS, default_user_quotas.VM_QUOTA.VM.VMS); - var memory = quotaBarMB( + memory = quotaBarMB( user.VM_QUOTA.VM.MEMORY_USED, user.VM_QUOTA.VM.MEMORY, default_user_quotas.VM_QUOTA.VM.MEMORY); - var cpu = quotaBarFloat( + cpu = quotaBarFloat( user.VM_QUOTA.VM.CPU_USED, user.VM_QUOTA.VM.CPU, default_user_quotas.VM_QUOTA.VM.CPU); - } else { - - var vms = quotaBar(0, 0, null); - var memory = quotaBarMB(0, 0, null); - var cpu = quotaBarFloat(0, 0, null); - } // Build hidden user template diff --git a/src/sunstone/public/js/sunstone.js b/src/sunstone/public/js/sunstone.js index eb6725998a..e8d47ed2f0 100644 --- a/src/sunstone/public/js/sunstone.js +++ b/src/sunstone/public/js/sunstone.js @@ -2967,7 +2967,28 @@ function emptyQuotas(resource_info){ $.isEmptyObject(resource_info.NETWORK_QUOTA) ); } +// If the VM quotas are empty, inits the VM counters to 0, and sets the limit +// to 'default'. It is not applied to oneadmin user/group +function initEmptyQuotas(resource){ + if ($.isEmptyObject(resource.VM_QUOTA) && resource.ID != 0){ + resource.VM_QUOTA = { + VM: { + VMS : QUOTA_LIMIT_DEFAULT, + VMS_USED : 0, + CPU : QUOTA_LIMIT_DEFAULT, + CPU_USED : 0, + MEMORY : QUOTA_LIMIT_DEFAULT, + MEMORY_USED : 0, + VOLATILE_SIZE : QUOTA_LIMIT_DEFAULT, + VOLATILE_SIZE_USED : 0 + } + } + } +} + function initQuotasPanel(resource_info, default_quotas, parent_id_str, edit_enabled){ + initEmptyQuotas(resource_info); + var vms_quota = Quotas.vms(resource_info, default_quotas); var cpu_quota = Quotas.cpu(resource_info, default_quotas); var memory_quota = Quotas.memory(resource_info, default_quotas);