From 09825bd7ba788173ff3459a603b1f5e53a910be9 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Sat, 5 Nov 2016 21:14:38 +0100 Subject: [PATCH 1/7] F #4901: RESERVED_CPU and RESERVED_MEM can be expressed using %. Update HostShare interface. --- include/Cluster.h | 4 +- include/Host.h | 95 ++++--------------------------------- include/HostShare.h | 62 ++++++++++++++++++------ src/host/Host.cc | 37 ++------------- src/host/HostShare.cc | 101 +++++++++++++++++++++++++++++++++++++++- src/im/MonitorThread.cc | 4 +- 6 files changed, 162 insertions(+), 141 deletions(-) diff --git a/include/Cluster.h b/include/Cluster.h index 1b91dd7d73..689dadf1eb 100644 --- a/include/Cluster.h +++ b/include/Cluster.h @@ -164,10 +164,10 @@ public: /** * Get the default reserved capacity for hosts in the cluster. It can be * overridden if defined in the host template. - * @param cpu reserved cpu (in percentage) + * @param cpu reserved cpu (percentage, or absolute) * @param mem reserved mem (in KB) */ - void get_reserved_capacity(long long &cpu, long long& mem) + void get_reserved_capacity(string& cpu, string& mem) { get_template_attribute("RESERVED_CPU", cpu); diff --git a/include/Host.h b/include/Host.h index 1ea3b74228..a5ceb004af 100644 --- a/include/Host.h +++ b/include/Host.h @@ -160,8 +160,8 @@ public: set &lost, map &found, const set &non_shared_ds, - long long reserved_cpu, - long long reserved_mem); + const string& reserved_cpu, + const string& reserved_mem); /** * Extracts the DS attributes from the given template * @param parse_str string with values to be parsed @@ -264,97 +264,19 @@ public: * @param cpu reserved cpu (in percentage) * @param mem reserved mem (in KB) */ - void get_reserved_capacity(long long &cpu, long long& mem) + void get_reserved_capacity(string& cpu, string& mem) { - long long tcpu; - long long tmem; - - if (get_template_attribute("RESERVED_CPU", tcpu)) - { - cpu = tcpu; - } - else - { - replace_template_attribute("RESERVED_CPU", ""); - } - - if (get_template_attribute("RESERVED_MEM", tmem)) - { - mem = tmem; - } - else - { - replace_template_attribute("RESERVED_MEM", ""); - } + get_template_attribute("RESERVED_CPU", cpu); + get_template_attribute("RESERVED_MEM", mem); } // ------------------------------------------------------------------------- - // Share functions. Returns the value associated with each host share - // metric + // Share functions. // ------------------------------------------------------------------------- + long long get_share_running_vms() { - return host_share.running_vms; - } - - long long get_share_disk_usage() - { - return host_share.disk_usage; - } - - long long get_share_mem_usage() - { - return host_share.mem_usage; - } - - long long get_share_cpu_usage() - { - return host_share.cpu_usage; - } - - long long get_share_max_disk() - { - return host_share.max_disk; - } - - long long get_share_max_mem() - { - return host_share.max_mem; - } - - long long get_share_max_cpu() - { - return host_share.max_cpu; - } - - long long get_share_free_disk() - { - return host_share.free_disk; - } - - long long get_share_free_mem() - { - return host_share.free_mem; - } - - long long get_share_free_cpu() - { - return host_share.free_cpu; - } - - long long get_share_used_disk() - { - return host_share.used_disk; - } - - long long get_share_used_mem() - { - return host_share.used_mem; - } - - long long get_share_used_cpu() - { - return host_share.used_cpu; + return host_share.get_running_vms(); } /** @@ -467,7 +389,6 @@ public: return new HostTemplate; } - /** * Executed after an update operation to process the new template * - encrypt VCENTER_PASSWORD attribute. diff --git a/include/HostShare.h b/include/HostShare.h index 1f9bb0a003..eb324e4248 100644 --- a/include/HostShare.h +++ b/include/HostShare.h @@ -161,6 +161,8 @@ private: map pci_devices; }; +class Host; + /** * The HostShare class. It represents a logical partition of a host... */ @@ -175,6 +177,14 @@ public: ~HostShare(){}; + /** + * Rebuilds the object from an xml node + * @param node The xml node pointer + * + * @return 0 on success, -1 otherwise + */ + int from_xml_node(const xmlNodePtr node); + /** * Add a new VM to this share * @param vmid of the VM @@ -303,6 +313,43 @@ public: pci.set_monitorization(pci_att); } + /** + * Resets capaity values of the share + */ + void reset_capacity() + { + max_cpu = 0; + max_mem = 0; + + free_cpu = 0; + free_mem = 0; + + used_cpu = 0; + used_mem = 0; + }; + + /** + * Set the capacity attributes of the share. CPU and Memory may reserve some + * capacity according to RESERVED_CPU and RESERVED_MEM. These values can be + * either absolute or a percentage. + * + * Share values are read from the Host template returned by the monitoring + * probes. The values are removed from the template. + * + * @param host for this share, capacity values are removed from the template + * @para cr_cpu, reserved cpu default cluster value + * @para cluster_rmem, reserved mem default cluster value + */ + void set_capacity(Host *host, const string& crcpu, const string& crmem); + + /** + * Return the number of running VMs in this host + */ + long long get_running_vms() + { + return running_vms; + }; + private: long long disk_usage; /**< Disk allocated to VMs (in MB). */ @@ -325,21 +372,6 @@ private: HostShareDatastore ds; HostSharePCI pci; - - // ---------------------------------------- - // Friends - // ---------------------------------------- - - friend class Host; - friend class HostPool; - - /** - * Rebuilds the object from an xml node - * @param node The xml node pointer - * - * @return 0 on success, -1 otherwise - */ - int from_xml_node(const xmlNodePtr node); }; #endif /*HOST_SHARE_H_*/ diff --git a/src/host/Host.cc b/src/host/Host.cc index bb42a7c3f5..967a6a37c0 100644 --- a/src/host/Host.cc +++ b/src/host/Host.cc @@ -234,8 +234,8 @@ int Host::update_info(Template &tmpl, set &lost, map &found, const set &non_shared_ds, - long long reserved_cpu, - long long reserved_mem) + const string &reserved_cpu, + const string &reserved_mem) { VectorAttribute* vatt; vector::iterator it; @@ -246,7 +246,6 @@ int Host::update_info(Template &tmpl, int rc; int vmid; - float val; ostringstream zombie; ostringstream wild; @@ -289,28 +288,7 @@ int Host::update_info(Template &tmpl, touch(true); - get_reserved_capacity(reserved_cpu, reserved_mem); - - erase_template_attribute("TOTALCPU", val); - host_share.max_cpu = val - reserved_cpu; - erase_template_attribute("TOTALMEMORY", val); - host_share.max_mem = val - reserved_mem; - erase_template_attribute("DS_LOCATION_TOTAL_MB", val); - host_share.max_disk = val; - - erase_template_attribute("FREECPU", val); - host_share.free_cpu = val; - erase_template_attribute("FREEMEMORY", val); - host_share.free_mem = val; - erase_template_attribute("DS_LOCATION_FREE_MB", val); - host_share.free_disk = val; - - erase_template_attribute("USEDCPU", val); - host_share.used_cpu = val; - erase_template_attribute("USEDMEMORY", val); - host_share.used_mem = val; - erase_template_attribute("DS_LOCATION_USED_MB", val); - host_share.used_disk = val; + host_share.set_capacity(this, reserved_cpu, reserved_mem); // ------------------------------------------------------------------------- // Correlate VM information with the list of running VMs @@ -513,14 +491,7 @@ void Host::offline() state = OFFLINE; - host_share.max_cpu = 0; - host_share.max_mem = 0; - - host_share.free_cpu = 0; - host_share.free_mem = 0; - - host_share.used_cpu = 0; - host_share.used_mem = 0; + host_share.reset_capacity(); remove_template_attribute("TOTALCPU"); remove_template_attribute("TOTALMEMORY"); diff --git a/src/host/HostShare.cc b/src/host/HostShare.cc index e40d8ee8d4..a457487431 100644 --- a/src/host/HostShare.cc +++ b/src/host/HostShare.cc @@ -22,6 +22,7 @@ #include #include "HostShare.h" +#include "Host.h" using namespace std; @@ -523,6 +524,102 @@ void HostShare::set_ds_monitorization(const vector &ds_att) } } -/* ------------------------------------------------------------------------ */ -/* ------------------------------------------------------------------------ */ +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +static void set_reserved_metric(long long& value, long long mvalue, + string& reserved) +{ + bool abs = true; + + if ( reserved.empty() ) + { + value = mvalue; + return; + } + + if (std::isspace(reserved.back())) + { + reserved = one_util::trim(reserved); + } + + if (reserved.back() == '%') + { + abs = false; + reserved.erase(reserved.end()-1); + } + + istringstream iss(reserved); + + iss >> value; + + if (iss.fail() || !iss.eof()) + { + value = mvalue; + return; + } + + if (abs) + { + value = mvalue - value; + } + else + { + value = mvalue * ( 1 - (value / 100.0)); + } + +} + +/* -------------------------------------------------------------------------- */ + +void HostShare::set_capacity(Host *host, const string& cluster_rcpu, + const string& cluster_rmem) +{ + float val; + + string host_rcpu; + string host_rmem; + + host->get_reserved_capacity(host_rcpu, host_rmem); + + if ( host_rcpu.empty() ) + { + host_rcpu = cluster_rcpu; + } + + if ( host_rmem.empty() ) + { + host_rmem = cluster_rmem; + } + + host->erase_template_attribute("TOTALCPU", val); + set_reserved_metric(max_cpu, val, host_rcpu); + + host->erase_template_attribute("TOTALMEMORY", val); + set_reserved_metric(max_mem, val, host_rmem); + + host->erase_template_attribute("DS_LOCATION_TOTAL_MB", val); + max_disk = val; + + host->erase_template_attribute("FREECPU", val); + free_cpu = val; + + host->erase_template_attribute("FREEMEMORY", val); + free_mem = val; + + host->erase_template_attribute("DS_LOCATION_FREE_MB", val); + free_disk = val; + + host->erase_template_attribute("USEDCPU", val); + used_cpu = val; + + host->erase_template_attribute("USEDMEMORY", val); + used_mem = val; + + host->erase_template_attribute("DS_LOCATION_USED_MB", val); + used_disk = val; +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ diff --git a/src/im/MonitorThread.cc b/src/im/MonitorThread.cc index 9f2e2be2dd..f0aeed0159 100644 --- a/src/im/MonitorThread.cc +++ b/src/im/MonitorThread.cc @@ -133,9 +133,9 @@ void MonitorThread::do_message() int cid = host->get_cluster_id(); - long long reserved_cpu = 0; + string reserved_cpu = ""; - long long reserved_mem = 0; + string reserved_mem = ""; delete hinfo; From 08d88e0119dc45b22985eea7e7a5a9172b2b47ba Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Sat, 12 Nov 2016 21:18:25 +0100 Subject: [PATCH 2/7] F #4901: Updates MEM & CPU when RESERVED_ attributes are updated. Adds TOTAL_CPU and TOTAL_MEM shares to store raw monitoring cpu/mem metrics. Adds migrator and increases local DB version number. --- include/HostShare.h | 17 ++++- include/Nebula.h | 2 +- install.sh | 6 +- src/cli/one_helper/onehost_helper.rb | 19 +++-- src/host/Host.cc | 2 + src/host/HostShare.cc | 24 ++++++ src/onedb/local/4.90.0_to_5.2.0.rb | 105 +++++++++++++++++++++++++++ src/onedb/local/db_schema.rb | 48 ++++++++++++ 8 files changed, 211 insertions(+), 12 deletions(-) create mode 100644 src/onedb/local/4.90.0_to_5.2.0.rb create mode 100644 src/onedb/local/db_schema.rb diff --git a/include/HostShare.h b/include/HostShare.h index eb324e4248..0f2402f62a 100644 --- a/include/HostShare.h +++ b/include/HostShare.h @@ -318,6 +318,9 @@ public: */ void reset_capacity() { + total_cpu = 0; + total_mem = 0; + max_cpu = 0; max_mem = 0; @@ -342,6 +345,13 @@ public: */ void set_capacity(Host *host, const string& crcpu, const string& crmem); + /** + * Update the capacity attributes when the RESERVED_CPU and RESERVED_MEM + * are updated. + * @param host for this share + */ + void update_capacity(Host *host); + /** * Return the number of running VMs in this host */ @@ -356,9 +366,12 @@ private: long long mem_usage; /**< Memory allocated to VMs (in KB) */ long long cpu_usage; /**< CPU allocated to VMs (in percentage) */ + long long total_mem; /**< Total memory capacity (in KB) */ + long long total_cpu; /**< Total cpu capacity (in percentage) */ + long long max_disk; /**< Total disk capacity (in MB) */ - long long max_mem; /**< Total memory capacity (in KB) */ - long long max_cpu; /**< Total cpu capacity (in percentage) */ + long long max_mem; /**< Total memory capacity (in KB) +/- reserved */ + long long max_cpu; /**< Total cpu capacity (in percentage) +/- reserved*/ long long free_disk; /**< Free disk from the IM monitor */ long long free_mem; /**< Free memory from the IM monitor */ diff --git a/include/Nebula.h b/include/Nebula.h index 46dcb05db5..d3a9a91ba3 100644 --- a/include/Nebula.h +++ b/include/Nebula.h @@ -353,7 +353,7 @@ public: */ static string local_db_version() { - return "4.90.0"; + return "5.2.0"; } /** diff --git a/install.sh b/install.sh index 0c7725e186..559eb8a72b 100755 --- a/install.sh +++ b/install.sh @@ -1155,13 +1155,15 @@ ONEDB_SHARED_MIGRATOR_FILES="src/onedb/shared/2.0_to_2.9.80.rb \ src/onedb/shared/4.11.80_to_4.90.0.rb \ src/onedb/shared/4.90.0_to_5.2.0.rb" -ONEDB_LOCAL_MIGRATOR_FILES="src/onedb/local/4.5.80_to_4.7.80.rb \ +ONEDB_LOCAL_MIGRATOR_FILES="src/onedb/local/db_schema.rb \ + src/onedb/local/4.5.80_to_4.7.80.rb \ src/onedb/local/4.7.80_to_4.9.80.rb \ src/onedb/local/4.9.80_to_4.10.3.rb \ src/onedb/local/4.10.3_to_4.11.80.rb \ src/onedb/local/4.11.80_to_4.13.80.rb \ src/onedb/local/4.13.80_to_4.13.85.rb \ - src/onedb/local/4.13.85_to_4.90.0.rb" + src/onedb/local/4.13.85_to_4.90.0.rb \ + src/onedb/local/4.90.0_to_5.2.0.rb" ONEDB_PATCH_FILES="src/onedb/patches/4.14_monitoring.rb \ src/onedb/patches/history_times.rb" diff --git a/src/cli/one_helper/onehost_helper.rb b/src/cli/one_helper/onehost_helper.rb index c3bb32e455..714b45255a 100644 --- a/src/cli/one_helper/onehost_helper.rb +++ b/src/cli/one_helper/onehost_helper.rb @@ -382,14 +382,19 @@ class OneHostHelper < OpenNebulaHelper::OneHelper puts CLIHelper.print_header(str_h1 % "HOST SHARES", false) - - puts str % ["TOTAL MEM", OpenNebulaHelper.unit_to_str(host['HOST_SHARE/MAX_MEM'].to_i, {})] - puts str % ["USED MEM (REAL)", OpenNebulaHelper.unit_to_str(host['HOST_SHARE/USED_MEM'].to_i, {})] - puts str % ["USED MEM (ALLOCATED)", OpenNebulaHelper.unit_to_str(host['HOST_SHARE/MEM_USAGE'].to_i, {})] - puts str % ["TOTAL CPU", host['HOST_SHARE/MAX_CPU']] - puts str % ["USED CPU (REAL)", host['HOST_SHARE/USED_CPU']] - puts str % ["USED CPU (ALLOCATED)", host['HOST_SHARE/CPU_USAGE']] puts str % ["RUNNING VMS", host['HOST_SHARE/RUNNING_VMS']] + + CLIHelper.print_header(str_h1 % "MEMORY", false) + puts str % [" TOTAL", OpenNebulaHelper.unit_to_str(host['HOST_SHARE/TOTAL_MEM'].to_i, {})] + puts str % [" TOTAL +/- RESERVED", OpenNebulaHelper.unit_to_str(host['HOST_SHARE/MAX_MEM'].to_i, {})] + puts str % [" USED (REAL)", OpenNebulaHelper.unit_to_str(host['HOST_SHARE/USED_MEM'].to_i, {})] + puts str % [" USED (ALLOCATED)", OpenNebulaHelper.unit_to_str(host['HOST_SHARE/MEM_USAGE'].to_i, {})] + + CLIHelper.print_header(str_h1 % "CPU", false) + puts str % [" TOTAL", host['HOST_SHARE/TOTAL_CPU']] + puts str % [" TOTAL +/- RESERVED", host['HOST_SHARE/MAX_CPU']] + puts str % [" USED (REAL)", host['HOST_SHARE/USED_CPU']] + puts str % [" USED (ALLOCATED)", host['HOST_SHARE/CPU_USAGE']] puts datastores = host.to_hash['HOST']['HOST_SHARE']['DATASTORES']['DS'] diff --git a/src/host/Host.cc b/src/host/Host.cc index 967a6a37c0..62e2bfa1ed 100644 --- a/src/host/Host.cc +++ b/src/host/Host.cc @@ -740,5 +740,7 @@ int Host::post_update_template(string& error) replace_template_attribute("IM_MAD", im_mad_name); replace_template_attribute("VM_MAD", vmm_mad_name); + host_share.update_capacity(this); + return 0; }; diff --git a/src/host/HostShare.cc b/src/host/HostShare.cc index a457487431..781c4eeef0 100644 --- a/src/host/HostShare.cc +++ b/src/host/HostShare.cc @@ -376,6 +376,7 @@ ostream& operator<<(ostream& os, const HostSharePCI& pci) return os; } + /* ************************************************************************ */ /* HostShare :: Constructor/Destructor */ /* ************************************************************************ */ @@ -385,6 +386,8 @@ HostShare::HostShare(long long _max_disk,long long _max_mem,long long _max_cpu): disk_usage(0), mem_usage(0), cpu_usage(0), + total_mem(_max_mem), + total_cpu(_max_cpu), max_disk(_max_disk), max_mem(_max_mem), max_cpu(_max_cpu), @@ -417,6 +420,8 @@ string& HostShare::to_xml(string& xml) const << "" << disk_usage << "" << "" << mem_usage << "" << "" << cpu_usage << "" + << "" << total_mem << "" + << "" << total_cpu << "" << "" << max_disk << "" << "" << max_mem << "" << "" << max_cpu << "" @@ -451,6 +456,9 @@ int HostShare::from_xml_node(const xmlNodePtr node) rc += xpath(mem_usage, "/HOST_SHARE/MEM_USAGE", -1); rc += xpath(cpu_usage, "/HOST_SHARE/CPU_USAGE", -1); + rc += xpath(total_mem , "/HOST_SHARE/TOTAL_MEM", -1); + rc += xpath(total_cpu, "/HOST_SHARE/TOTAL_CPU", -1); + rc += xpath(max_disk, "/HOST_SHARE/MAX_DISK", -1); rc += xpath(max_mem , "/HOST_SHARE/MAX_MEM", -1); rc += xpath(max_cpu , "/HOST_SHARE/MAX_CPU", -1); @@ -593,9 +601,11 @@ void HostShare::set_capacity(Host *host, const string& cluster_rcpu, } host->erase_template_attribute("TOTALCPU", val); + total_cpu = val; set_reserved_metric(max_cpu, val, host_rcpu); host->erase_template_attribute("TOTALMEMORY", val); + total_mem = val; set_reserved_metric(max_mem, val, host_rmem); host->erase_template_attribute("DS_LOCATION_TOTAL_MB", val); @@ -620,6 +630,20 @@ void HostShare::set_capacity(Host *host, const string& cluster_rcpu, used_disk = val; } +/* -------------------------------------------------------------------------- */ + +void HostShare::update_capacity(Host *host) +{ + string host_rcpu; + string host_rmem; + + host->get_reserved_capacity(host_rcpu, host_rmem); + + set_reserved_metric(max_cpu, total_cpu, host_rcpu); + + set_reserved_metric(max_mem, total_mem, host_rmem); +} + /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ diff --git a/src/onedb/local/4.90.0_to_5.2.0.rb b/src/onedb/local/4.90.0_to_5.2.0.rb new file mode 100644 index 0000000000..0404eee8de --- /dev/null +++ b/src/onedb/local/4.90.0_to_5.2.0.rb @@ -0,0 +1,105 @@ +# -------------------------------------------------------------------------- # +# Copyright 2002-2016, OpenNebula Project, OpenNebula Systems # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); you may # +# not use this file except in compliance with the License. You may obtain # +# a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +#--------------------------------------------------------------------------- # + + +require 'set' +require 'base64' +require 'zlib' +require 'pathname' + +require 'opennebula' + +$: << File.dirname(__FILE__) +require 'db_schema' + +include OpenNebula + +module Migrator + def db_version + "5.2.0" + end + + def one_version + "OpenNebula 5.2.0" + end + + def up + init_log_time() + + feature_4901() + + log_time() + + return true + end + + private + + def xpath(doc, sxpath) + element = doc.root.at_xpath(sxpath) + if !element.nil? + element.text + else + "" + end + end + + ############################################################################ + # Feature 4921. Adds TOTAL_CPU and TOTAL_MEM to HOST/HOST_SHARE to compute + # MAX_CPU and MAX_MEM when RESERVED_CPU/MEM is updated + ############################################################################ + def feature_4901 + @db.run "ALTER TABLE host_pool RENAME TO old_host_pool;" + @db.run host_pool_schema() + + @db.transaction do + @db.fetch("SELECT * FROM old_host_pool") do |row| + doc = Nokogiri::XML(row[:body], nil, NOKOGIRI_ENCODING) { |c| + c.default_xml.noblanks + } + + rcpu = xpath(doc, "TEMPLATE/RESERVED_CPU").to_i + rmem = xpath(doc, "TEMPLATE/RESERVED_MEM").to_i + + total_cpu = xpath(doc, "HOST_SHARE/MAX_CPU").to_i + rcpu + total_mem = xpath(doc, "HOST_SHARE/MAX_MEM").to_i + rmem + + total_cpu_e = doc.create_element "TOTAL_CPU", total_cpu + total_mem_e = doc.create_element "TOTAL_MEM", total_mem + + host_share = doc.root.at_xpath("HOST_SHARE") + host_share.add_child(total_cpu_e) + host_share.add_child(total_mem_e) + + @db[:host_pool].insert( + :oid => row[:oid], + :name => row[:name], + :body => doc.root.to_s, + :state => row[:state], + :last_mon_time => row[:last_mon_time], + :uid => row[:uid], + :gid => row[:gid], + :owner_u => row[:owner_u], + :group_u => row[:group_u], + :other_u => row[:other_u], + :cid => row[:cid]) + end + end + + @db.run "DROP TABLE old_host_pool;" + end + +end diff --git a/src/onedb/local/db_schema.rb b/src/onedb/local/db_schema.rb new file mode 100644 index 0000000000..e07ab62c27 --- /dev/null +++ b/src/onedb/local/db_schema.rb @@ -0,0 +1,48 @@ +# -------------------------------------------------------------------------- # +# Copyright 2002-2016, OpenNebula Project, OpenNebula Systems # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); you may # +# not use this file except in compliance with the License. You may obtain # +# a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +#--------------------------------------------------------------------------- # + +require 'set' +require 'base64' +require 'zlib' +require 'pathname' + +require 'opennebula' + +include OpenNebula + +module Migrator + ############################################################################## + # DB schema for OpenNebula tables, each function may return the schema for + # each opennebula version + ############################################################################## + def host_pool_schema + case db_version() + when "4.5.80" + when "4.7.80" + when "4.9.80" + when "4.10.3" + when "4.11.80" + when "4.13.80" + when "4.13.85" + when "4.90.0" + when "5.2.0" + 'CREATE TABLE host_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), '\ + 'body MEDIUMTEXT, state INTEGER, last_mon_time INTEGER, uid INTEGER, '\ + 'gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, '\ + 'cid INTEGER);' + end + end +end From f3355a0891198170415824e81bee1209dfe48ad1 Mon Sep 17 00:00:00 2001 From: juanmont Date: Mon, 14 Nov 2016 12:02:58 +0100 Subject: [PATCH 3/7] F #4901: Add support for values RESERVED_CPU and RESERVED_MEM - Added new slider in info (hosts-tab) --- .../public/app/tabs/hosts-tab/panels/info.js | 60 +++++++++++++++++-- .../app/tabs/hosts-tab/panels/info/html.hbs | 32 ++++++---- 2 files changed, 74 insertions(+), 18 deletions(-) diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js index ee2d8ace74..d80dce0c21 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js @@ -13,12 +13,11 @@ /* See the License for the specific language governing permissions and */ /* limitations under the License. */ /* -------------------------------------------------------------------------- */ - define(function(require) { /* DEPENDENCIES */ - + require('foundation'); var Locale = require('utils/locale'); var Humanize = require('utils/humanize'); var RenameTr = require('utils/panel/rename-tr'); @@ -31,6 +30,7 @@ define(function(require) { var DatastoresCapacityTable = require('../utils/datastores-capacity-table'); var CanImportWilds = require('../utils/can-import-wilds'); var Sunstone = require('sunstone'); + var TemplateUtils = require('utils/template-utils'); /* TEMPLATES @@ -59,7 +59,6 @@ define(function(require) { that.icon = "fa-info-circle"; that.element = info[XML_ROOT]; - that.canImportWilds = CanImportWilds(that.element); // Hide information of the Wild VMs of the Host and the ESX Hosts @@ -88,7 +87,6 @@ define(function(require) { /* FUNCTION DEFINITIONS */ - function _html() { var templateTableHTML = TemplateTable.html( this.strippedTemplate, @@ -101,6 +99,12 @@ define(function(require) { var cpuBars = CPUBars.html(this.element); var memoryBars = MemoryBars.html(this.element); var datastoresCapacityTableHTML = DatastoresCapacityTable.html(this.element); + var realCPU = parseInt(this.element.HOST_SHARE.FREE_CPU); + if(this.element.HOST_SHARE.USED_CPU != "") + realCPU += parseInt(this.element.HOST_SHARE.USED_CPU); + var realMEM = parseInt(this.element.HOST_SHARE.FREE_MEM); + if(this.element.HOST_SHARE.USED_MEM != "") + realMEM += parseInt(this.element.HOST_SHARE.USED_MEM); return TemplateInfo({ 'element': this.element, @@ -111,10 +115,31 @@ define(function(require) { 'cpuBars': cpuBars, 'memoryBars': memoryBars, 'stateStr': OpenNebulaHost.stateStr(this.element.STATE), - 'datastoresCapacityTableHTML': datastoresCapacityTableHTML + 'datastoresCapacityTableHTML': datastoresCapacityTableHTML, + 'maxReservedCPU': realCPU * 2, + 'realCPU': realCPU, + 'realMEM': Humanize.size(realMEM), + 'maxReservedMEM': realMEM * 2, + 'virtualMEMInput': Humanize.size(this.element.HOST_SHARE.MAX_MEM) }); } + function changeBarCPU(){ + document.getElementById('textInput_reserved_cpu').value = document.getElementById('change_bar_cpu').value; + } + + function changeInputCPU(){ + document.getElementById('change_bar_cpu').value = document.getElementById('textInput_reserved_cpu').value; + } + + function changeBarMEM(){ + document.getElementById('textInput_reserved_mem').value = Humanize.size(parseInt(document.getElementById('change_bar_mem').value)); + } + + function changeInputMEM(){ + document.getElementById('change_bar_mem').value = parseInt(document.getElementById('textInput_reserved_mem').value); + } + function _setup(context) { var that = this; @@ -123,7 +148,7 @@ define(function(require) { TemplateTable.setup(this.strippedTemplate, RESOURCE, this.element.ID, context, this.unshownTemplate); PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context); - $(".edit_reserved", context).on("click", function(){ + $("", context).on("click", function(){ var dialog = Sunstone.getDialog(OVERCOMMIT_DIALOG_ID); dialog.setParams( @@ -137,6 +162,29 @@ define(function(require) { return false; }); + //.off and .on prevent multiple clicks events + $(document).off('click', '.update_reserved').on("click", '.update_reserved', function(){ + var reservedCPU = parseInt(document.getElementById('change_bar_cpu').value); + var CPU = parseInt(that.element.HOST_SHARE.FREE_CPU); + var reservedMem = parseInt(document.getElementById('change_bar_mem').value); + var MEM = parseInt(that.element.HOST_SHARE.FREE_MEM); + if(parseInt(that.element.HOST_SHARE.USED_CPU) > 0) + CPU += parseInt(that.element.HOST_SHARE.USED_CPU); + reservedCPU = CPU - reservedCPU; + if(parseInt(that.element.HOST_SHARE.USED_MEM) > 0) + MEM += parseInt(that.element.HOST_SHARE.USED_MEM); + reservedMem = MEM - reservedMem; + + var obj = {RESERVED_CPU: reservedCPU, RESERVED_MEM: reservedMem}; + Sunstone.runAction("Host.append_template", that.element.ID, TemplateUtils.templateToString(obj)); + }); + + + document.getElementById("change_bar_cpu").addEventListener("change", changeBarCPU); + document.getElementById("textInput_reserved_cpu").addEventListener("change", changeInputCPU); + document.getElementById("change_bar_mem").addEventListener("change", changeBarMEM); + document.getElementById("textInput_reserved_mem").addEventListener("change", changeInputMEM); + return false; } }); diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs b/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs index 972e0236a3..819b54698c 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs @@ -73,30 +73,38 @@ + {{{datastoresCapacityTableHTML}}} + + +
+
- + - + - - + + - + - - + +
{{tr "Overcommitment"}}{{tr "Overcommitment"}} + + + +
{{tr "Reserved CPU"}}{{valOrDefault element.TEMPLATE.RESERVED_CPU "-"}} - - +
{{tr "Reserved Memory"}}{{humanizeSize "KB" element.TEMPLATE.RESERVED_MEM}} - - +
- {{{datastoresCapacityTableHTML}}}
From ea2bd35dd9361d1e8811a7da05a918fb0a80cacb Mon Sep 17 00:00:00 2001 From: juanmont Date: Mon, 14 Nov 2016 18:16:07 +0100 Subject: [PATCH 4/7] F #4901 Added new slider for RESERVED_CPU and RESERVED_MEM in hosts and clusters --- .../app/tabs/clusters-tab/panels/info.js | 56 ++++++++++++++----- .../tabs/clusters-tab/panels/info/html.hbs | 54 ++++++++++-------- .../public/app/tabs/hosts-tab/panels/info.js | 35 +++++------- .../app/tabs/hosts-tab/panels/monitor.js | 12 ++-- 4 files changed, 94 insertions(+), 63 deletions(-) diff --git a/src/sunstone/public/app/tabs/clusters-tab/panels/info.js b/src/sunstone/public/app/tabs/clusters-tab/panels/info.js index 40bbcc219f..22fee8f2e1 100644 --- a/src/sunstone/public/app/tabs/clusters-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/clusters-tab/panels/info.js @@ -24,6 +24,7 @@ define(function(require) { var RenameTr = require('utils/panel/rename-tr'); var TemplateTable = require('utils/panel/template-table'); var Sunstone = require('sunstone'); + var TemplateUtils = require('utils/template-utils'); /* CONSTANTS @@ -47,12 +48,13 @@ define(function(require) { this.icon = "fa-info-circle"; this.element = info[XML_ROOT]; + this.percent = false; // Hide information in the template table. Unshow values are stored // in the unshownTemplate object to be used when the element info is updated. that.unshownTemplate = {}; that.strippedTemplate = {}; - var unshownKeys = ['RESERVED_CPU', 'RESERVED_MEM']; + var unshownKeys = ['HOST', 'RESERVED_CPU', 'RESERVED_MEM']; $.each(that.element.TEMPLATE, function(key, value) { if ($.inArray(key, unshownKeys) > -1) { that.unshownTemplate[key] = value; @@ -80,14 +82,43 @@ define(function(require) { this.strippedTemplate, RESOURCE, Locale.tr("Attributes")); - + var reservedMem; + (this.element.TEMPLATE.RESERVED_MEM != "0%")?reservedMem = parseInt(this.element.TEMPLATE.RESERVED_MEM): reservedMem = 0; + var reservedCPU + (this.element.TEMPLATE.RESERVED_CPU != "0%")? reservedCPU = parseInt(this.element.TEMPLATE.RESERVED_CPU): reservedCPU = 0; return TemplateHTML({ 'element': this.element, 'renameTrHTML': renameTrHTML, - 'templateTableHTML': templateTableHTML + 'templateTableHTML': templateTableHTML, + 'percentCPU': reservedCPU, + 'percentMEM': reservedMem, }); } + function changeBarCPU(){ + if(parseInt(document.getElementById('change_bar_cpu').value) > 0) + document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; + if(parseInt(document.getElementById('change_bar_cpu').value) < 0) + document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; + document.getElementById('textInput_reserved_cpu').value = document.getElementById('change_bar_cpu').value; + } + + function changeInputCPU(){ + document.getElementById('change_bar_cpu').value = document.getElementById('textInput_reserved_cpu').value; + } + + function changeBarMEM(){ + if(parseInt(document.getElementById('change_bar_mem').value) > 0) + document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; + if(parseInt(document.getElementById('change_bar_mem').value) < 0) + document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; + document.getElementById('textInput_reserved_mem').value = document.getElementById('change_bar_mem').value; + } + + function changeInputMEM(){ + document.getElementById('change_bar_mem').value = document.getElementById('textInput_reserved_mem').value; + } + function _setup(context) { var that = this; @@ -95,18 +126,17 @@ define(function(require) { TemplateTable.setup(this.strippedTemplate, RESOURCE, this.element.ID, context, this.unshownTemplate); - $(".edit_reserved", context).on("click", function(){ - var dialog = Sunstone.getDialog(OVERCOMMIT_DIALOG_ID); + document.getElementById("change_bar_cpu").addEventListener("change", changeBarCPU); + document.getElementById("textInput_reserved_cpu").addEventListener("change", changeInputCPU); + document.getElementById("change_bar_mem").addEventListener("change", changeBarMEM); + document.getElementById("textInput_reserved_mem").addEventListener("change", changeInputMEM); - dialog.setParams( - { element: that.element, - action : "Cluster.append_template", - resourceName : Locale.tr("Cluster"), - tabId : TAB_ID - }); + $(document).off('click', '.update_reserved').on("click", '.update_reserved', function(){ + var reservedCPU = document.getElementById('change_bar_cpu').value+'%'; + var reservedMem = document.getElementById('change_bar_mem').value+'%'; - dialog.show(); - return false; + var obj = {RESERVED_CPU: reservedCPU, RESERVED_MEM: reservedMem}; + Sunstone.runAction("Cluster.append_template", that.element.ID, TemplateUtils.templateToString(obj)); }); } }); diff --git a/src/sunstone/public/app/tabs/clusters-tab/panels/info/html.hbs b/src/sunstone/public/app/tabs/clusters-tab/panels/info/html.hbs index 0cff5f2cb7..8cf496f1eb 100644 --- a/src/sunstone/public/app/tabs/clusters-tab/panels/info/html.hbs +++ b/src/sunstone/public/app/tabs/clusters-tab/panels/info/html.hbs @@ -31,31 +31,39 @@ {{{renameTrHTML}}} - - - - - - - - - - - - - - - - - - -
{{tr "Overcommitment"}}
{{tr "Reserved CPU"}}{{valOrDefault element.TEMPLATE.RESERVED_CPU "-"}} - -
{{tr "Reserved Memory"}}{{humanizeSize "KB" element.TEMPLATE.RESERVED_MEM}} - -
+
+
+ + + + + + + + + + + + + + + + + + +
{{tr "Overcommitment"}} + + + +
{{tr "Reserved CPU"}} +
{{tr "Reserved Memory"}} +
+
+
{{{templateTableHTML}}} diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js index d80dce0c21..91f6831b01 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js @@ -92,19 +92,16 @@ define(function(require) { this.strippedTemplate, RESOURCE, Locale.tr("Attributes")); - + console.log(this.element); var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME); var clusterTrHTML = ClusterTr.html(this.element.CLUSTER); var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element); var cpuBars = CPUBars.html(this.element); var memoryBars = MemoryBars.html(this.element); var datastoresCapacityTableHTML = DatastoresCapacityTable.html(this.element); - var realCPU = parseInt(this.element.HOST_SHARE.FREE_CPU); - if(this.element.HOST_SHARE.USED_CPU != "") - realCPU += parseInt(this.element.HOST_SHARE.USED_CPU); - var realMEM = parseInt(this.element.HOST_SHARE.FREE_MEM); - if(this.element.HOST_SHARE.USED_MEM != "") - realMEM += parseInt(this.element.HOST_SHARE.USED_MEM); + var realCPU = parseInt(this.element.HOST_SHARE.TOTAL_CPU); + var realMEM = parseInt(this.element.HOST_SHARE.TOTAL_MEM); + return TemplateInfo({ 'element': this.element, @@ -116,15 +113,19 @@ define(function(require) { 'memoryBars': memoryBars, 'stateStr': OpenNebulaHost.stateStr(this.element.STATE), 'datastoresCapacityTableHTML': datastoresCapacityTableHTML, + 'maxReservedMEM': realMEM * 2, 'maxReservedCPU': realCPU * 2, 'realCPU': realCPU, 'realMEM': Humanize.size(realMEM), - 'maxReservedMEM': realMEM * 2, 'virtualMEMInput': Humanize.size(this.element.HOST_SHARE.MAX_MEM) }); } function changeBarCPU(){ + if(parseInt(document.getElementById('change_bar_cpu').value) > this.element.HOST_SHARE.TOTAL_CPU) + document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; + if(parseInt(document.getElementById('change_bar_cpu').value) < this.element.HOST_SHARE.TOTAL_CPU) + document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; document.getElementById('textInput_reserved_cpu').value = document.getElementById('change_bar_cpu').value; } @@ -133,6 +134,10 @@ define(function(require) { } function changeBarMEM(){ + if(parseInt(document.getElementById('change_bar_mem').value) > this.element.HOST_SHARE.TOTAL_MEM) + document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; + if(parseInt(document.getElementById('change_bar_mem').value) < this.element.HOST_SHARE.TOTAL_MEM) + document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; document.getElementById('textInput_reserved_mem').value = Humanize.size(parseInt(document.getElementById('change_bar_mem').value)); } @@ -148,20 +153,6 @@ define(function(require) { TemplateTable.setup(this.strippedTemplate, RESOURCE, this.element.ID, context, this.unshownTemplate); PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context); - $("", context).on("click", function(){ - var dialog = Sunstone.getDialog(OVERCOMMIT_DIALOG_ID); - - dialog.setParams( - { element: that.element, - action : "Host.append_template", - resourceName : Locale.tr("Host"), - tabId : TAB_ID - }); - - dialog.show(); - return false; - }); - //.off and .on prevent multiple clicks events $(document).off('click', '.update_reserved').on("click", '.update_reserved', function(){ var reservedCPU = parseInt(document.getElementById('change_bar_cpu').value); diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js b/src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js index 7170801aeb..04e189632e 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js @@ -76,21 +76,23 @@ define(function(require) { data: { id: this.element.ID, monitor: { - monitor_resources : "HOST_SHARE/CPU_USAGE,HOST_SHARE/USED_CPU,HOST_SHARE/MAX_CPU,HOST_SHARE/MEM_USAGE,HOST_SHARE/USED_MEM,HOST_SHARE/MAX_MEM" + monitor_resources : "HOST_SHARE/CPU_USAGE,HOST_SHARE/USED_CPU,HOST_SHARE/MAX_CPU,HOST_SHARE/TOTAL_CPU,HOST_SHARE/MEM_USAGE,HOST_SHARE/USED_MEM,HOST_SHARE/MAX_MEM,HOST_SHARE/TOTAL_MEM" } }, success: function(req, response) { + console.log(response); var host_graphs = [ { - monitor_resources : "HOST_SHARE/CPU_USAGE,HOST_SHARE/USED_CPU,HOST_SHARE/MAX_CPU", - labels : Locale.tr("Allocated") + "," + Locale.tr("Real") + "," + Locale.tr("Total"), + monitor_resources : "HOST_SHARE/CPU_USAGE,HOST_SHARE/USED_CPU,HOST_SHARE/MAX_CPU,HOST_SHARE/TOTAL_CPU", + labels : Locale.tr("Allocated") + "," + Locale.tr("Real") + "," + Locale.tr("Total") + "," + Locale.tr("Total +/- reserved"), humanize_figures : false, div_graph : $("#host_cpu_graph"), div_legend : $("#host_cpu_legend") }, { - monitor_resources : "HOST_SHARE/MEM_USAGE,HOST_SHARE/USED_MEM,HOST_SHARE/MAX_MEM", - labels : Locale.tr("Allocated") + "," + Locale.tr("Real") + "," + Locale.tr("Total"), + monitor_resources : "HOST_SHARE/MEM_USAGE,HOST_SHARE/USED_MEM,HOST_SHARE/MAX_MEM,HOST_SHARE/TOTAL_MEM", + labels : Locale.tr("Allocated") + "," + Locale.tr("Real") + "," + Locale.tr("Total") + "," + Locale.tr("Total +/- reserved"), + humanize_figures : false, humanize_figures : true, div_graph : $("#host_mem_graph"), div_legend : $("#host_mem_legend") From db77193ce24675d73e538169cc248a0767135799 Mon Sep 17 00:00:00 2001 From: juanmont Date: Tue, 15 Nov 2016 15:50:19 +0100 Subject: [PATCH 5/7] F #4901 changed labels in hosts-tabs and changed colors inputs --- .../app/tabs/clusters-tab/panels/info.js | 4 +- .../public/app/tabs/hosts-tab/panels/info.js | 39 +++++++------------ .../app/tabs/hosts-tab/panels/info/html.hbs | 6 +-- 3 files changed, 20 insertions(+), 29 deletions(-) diff --git a/src/sunstone/public/app/tabs/clusters-tab/panels/info.js b/src/sunstone/public/app/tabs/clusters-tab/panels/info.js index 22fee8f2e1..6b7b038d4e 100644 --- a/src/sunstone/public/app/tabs/clusters-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/clusters-tab/panels/info.js @@ -83,9 +83,9 @@ define(function(require) { RESOURCE, Locale.tr("Attributes")); var reservedMem; - (this.element.TEMPLATE.RESERVED_MEM != "0%")?reservedMem = parseInt(this.element.TEMPLATE.RESERVED_MEM): reservedMem = 0; + (this.element.TEMPLATE.RESERVED_MEM != "0%" && this.element.TEMPLATE.RESERVED_MEM != "")?reservedMem = parseInt(this.element.TEMPLATE.RESERVED_MEM): reservedMem = 0; var reservedCPU - (this.element.TEMPLATE.RESERVED_CPU != "0%")? reservedCPU = parseInt(this.element.TEMPLATE.RESERVED_CPU): reservedCPU = 0; + (this.element.TEMPLATE.RESERVED_CPU != "0%" && this.element.TEMPLATE.RESERVED_CPU != "")? reservedCPU = parseInt(this.element.TEMPLATE.RESERVED_CPU): reservedCPU = 0; return TemplateHTML({ 'element': this.element, 'renameTrHTML': renameTrHTML, diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js index 91f6831b01..e73e7b1713 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js @@ -92,7 +92,6 @@ define(function(require) { this.strippedTemplate, RESOURCE, Locale.tr("Attributes")); - console.log(this.element); var renameTrHTML = RenameTr.html(TAB_ID, RESOURCE, this.element.NAME); var clusterTrHTML = ClusterTr.html(this.element.CLUSTER); var permissionsTableHTML = PermissionsTable.html(TAB_ID, RESOURCE, this.element); @@ -101,7 +100,6 @@ define(function(require) { var datastoresCapacityTableHTML = DatastoresCapacityTable.html(this.element); var realCPU = parseInt(this.element.HOST_SHARE.TOTAL_CPU); var realMEM = parseInt(this.element.HOST_SHARE.TOTAL_MEM); - return TemplateInfo({ 'element': this.element, @@ -121,26 +119,10 @@ define(function(require) { }); } - function changeBarCPU(){ - if(parseInt(document.getElementById('change_bar_cpu').value) > this.element.HOST_SHARE.TOTAL_CPU) - document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; - if(parseInt(document.getElementById('change_bar_cpu').value) < this.element.HOST_SHARE.TOTAL_CPU) - document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; - document.getElementById('textInput_reserved_cpu').value = document.getElementById('change_bar_cpu').value; - } - function changeInputCPU(){ document.getElementById('change_bar_cpu').value = document.getElementById('textInput_reserved_cpu').value; } - - function changeBarMEM(){ - if(parseInt(document.getElementById('change_bar_mem').value) > this.element.HOST_SHARE.TOTAL_MEM) - document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; - if(parseInt(document.getElementById('change_bar_mem').value) < this.element.HOST_SHARE.TOTAL_MEM) - document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; - document.getElementById('textInput_reserved_mem').value = Humanize.size(parseInt(document.getElementById('change_bar_mem').value)); - } - + function changeInputMEM(){ document.getElementById('change_bar_mem').value = parseInt(document.getElementById('textInput_reserved_mem').value); } @@ -170,12 +152,21 @@ define(function(require) { Sunstone.runAction("Host.append_template", that.element.ID, TemplateUtils.templateToString(obj)); }); - - document.getElementById("change_bar_cpu").addEventListener("change", changeBarCPU); + document.getElementById("change_bar_cpu").addEventListener("change", function(){ + if(parseInt(document.getElementById('change_bar_cpu').value) > that.element.HOST_SHARE.TOTAL_CPU) + document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; + if(parseInt(document.getElementById('change_bar_cpu').value) < that.element.HOST_SHARE.TOTAL_CPU) + document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; + document.getElementById('textInput_reserved_cpu').value = document.getElementById('change_bar_cpu').value; + }); document.getElementById("textInput_reserved_cpu").addEventListener("change", changeInputCPU); - document.getElementById("change_bar_mem").addEventListener("change", changeBarMEM); + document.getElementById("change_bar_mem").addEventListener("change", function(){ + if(parseInt(document.getElementById('change_bar_mem').value) > that.element.HOST_SHARE.TOTAL_MEM) + document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; + if(parseInt(document.getElementById('change_bar_mem').value) < that.element.HOST_SHARE.TOTAL_MEM) + document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; + document.getElementById('textInput_reserved_mem').value = Humanize.size(parseInt(document.getElementById('change_bar_mem').value)); + }); document.getElementById("textInput_reserved_mem").addEventListener("change", changeInputMEM); - - return false; } }); diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs b/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs index 819b54698c..2c1662d64c 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs @@ -92,13 +92,13 @@ - {{tr "Reserved CPU"}} - + {{tr "CPU"}} + - {{tr "Reserved Memory"}} + {{tr "Memory"}} From 949e7e2f5ce34e27e32d184e9cb180a68f64117a Mon Sep 17 00:00:00 2001 From: juanmont Date: Tue, 15 Nov 2016 15:54:13 +0100 Subject: [PATCH 6/7] removed console.logs --- src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js b/src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js index 04e189632e..c5e5f91d90 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/monitor.js @@ -80,7 +80,6 @@ define(function(require) { } }, success: function(req, response) { - console.log(response); var host_graphs = [ { monitor_resources : "HOST_SHARE/CPU_USAGE,HOST_SHARE/USED_CPU,HOST_SHARE/MAX_CPU,HOST_SHARE/TOTAL_CPU", From 90675e78152690f5c3aac99f6442e4d66827f584 Mon Sep 17 00:00:00 2001 From: juanmont Date: Tue, 15 Nov 2016 17:29:24 +0100 Subject: [PATCH 7/7] Solved the problem of freezing the slider in hosts-tab --- .../tabs/clusters-tab/panels/info/html.hbs | 4 +- .../public/app/tabs/hosts-tab/panels/info.js | 38 +++++++++---------- .../app/tabs/hosts-tab/panels/info/html.hbs | 10 ++--- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/sunstone/public/app/tabs/clusters-tab/panels/info/html.hbs b/src/sunstone/public/app/tabs/clusters-tab/panels/info/html.hbs index 8cf496f1eb..5499fd5c83 100644 --- a/src/sunstone/public/app/tabs/clusters-tab/panels/info/html.hbs +++ b/src/sunstone/public/app/tabs/clusters-tab/panels/info/html.hbs @@ -48,13 +48,13 @@ - + {{tr "Reserved CPU"}} - + {{tr "Reserved Memory"}} diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js index e73e7b1713..0da79fd82c 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js @@ -120,11 +120,11 @@ define(function(require) { } function changeInputCPU(){ - document.getElementById('change_bar_cpu').value = document.getElementById('textInput_reserved_cpu').value; + document.getElementById('change_bar_cpu_hosts').value = document.getElementById('textInput_reserved_cpu_hosts').value; } function changeInputMEM(){ - document.getElementById('change_bar_mem').value = parseInt(document.getElementById('textInput_reserved_mem').value); + document.getElementById('change_bar_mem_hosts').value = parseInt(document.getElementById('textInput_reserved_mem_hosts').value); } function _setup(context) { @@ -136,10 +136,10 @@ define(function(require) { PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context); //.off and .on prevent multiple clicks events - $(document).off('click', '.update_reserved').on("click", '.update_reserved', function(){ - var reservedCPU = parseInt(document.getElementById('change_bar_cpu').value); + $(document).off('click', '.update_reserved_hosts').on("click", '.update_reserved', function(){ + var reservedCPU = parseInt(document.getElementById('change_bar_cpu_hosts').value); var CPU = parseInt(that.element.HOST_SHARE.FREE_CPU); - var reservedMem = parseInt(document.getElementById('change_bar_mem').value); + var reservedMem = parseInt(document.getElementById('change_bar_mem_hosts').value); var MEM = parseInt(that.element.HOST_SHARE.FREE_MEM); if(parseInt(that.element.HOST_SHARE.USED_CPU) > 0) CPU += parseInt(that.element.HOST_SHARE.USED_CPU); @@ -152,21 +152,21 @@ define(function(require) { Sunstone.runAction("Host.append_template", that.element.ID, TemplateUtils.templateToString(obj)); }); - document.getElementById("change_bar_cpu").addEventListener("change", function(){ - if(parseInt(document.getElementById('change_bar_cpu').value) > that.element.HOST_SHARE.TOTAL_CPU) - document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; - if(parseInt(document.getElementById('change_bar_cpu').value) < that.element.HOST_SHARE.TOTAL_CPU) - document.getElementById('textInput_reserved_cpu').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; - document.getElementById('textInput_reserved_cpu').value = document.getElementById('change_bar_cpu').value; + document.getElementById("change_bar_cpu_hosts").addEventListener("change", function(){ + if(parseInt(document.getElementById('change_bar_cpu_hosts').value) > that.element.HOST_SHARE.TOTAL_CPU) + document.getElementById('textInput_reserved_cpu_hosts').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; + if(parseInt(document.getElementById('change_bar_cpu_hosts').value) < that.element.HOST_SHARE.TOTAL_CPU) + document.getElementById('textInput_reserved_cpu_hosts').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; + document.getElementById('textInput_reserved_cpu_hosts').value = document.getElementById('change_bar_cpu_hosts').value; }); - document.getElementById("textInput_reserved_cpu").addEventListener("change", changeInputCPU); - document.getElementById("change_bar_mem").addEventListener("change", function(){ - if(parseInt(document.getElementById('change_bar_mem').value) > that.element.HOST_SHARE.TOTAL_MEM) - document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; - if(parseInt(document.getElementById('change_bar_mem').value) < that.element.HOST_SHARE.TOTAL_MEM) - document.getElementById('textInput_reserved_mem').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; - document.getElementById('textInput_reserved_mem').value = Humanize.size(parseInt(document.getElementById('change_bar_mem').value)); + document.getElementById("textInput_reserved_cpu_hosts").addEventListener("change", changeInputCPU); + document.getElementById("change_bar_mem_hosts").addEventListener("change", function(){ + if(parseInt(document.getElementById('change_bar_mem_hosts').value) > that.element.HOST_SHARE.TOTAL_MEM) + document.getElementById('textInput_reserved_mem_hosts').style.backgroundColor = 'rgba(111, 220, 111,0.5)'; + if(parseInt(document.getElementById('change_bar_mem_hosts').value) < that.element.HOST_SHARE.TOTAL_MEM) + document.getElementById('textInput_reserved_mem_hosts').style.backgroundColor = 'rgba(255, 80, 80,0.5)'; + document.getElementById('textInput_reserved_mem_hosts').value = Humanize.size(parseInt(document.getElementById('change_bar_mem_hosts').value)); }); - document.getElementById("textInput_reserved_mem").addEventListener("change", changeInputMEM); + document.getElementById("textInput_reserved_mem_hosts").addEventListener("change", changeInputMEM); } }); diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs b/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs index 2c1662d64c..7ff53d2194 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/info/html.hbs @@ -83,7 +83,7 @@ {{tr "Overcommitment"}} - @@ -93,15 +93,15 @@ {{tr "CPU"}} - + - + {{tr "Memory"}} - + - +