diff --git a/src/sunstone/public/app/opennebula/action.js b/src/sunstone/public/app/opennebula/action.js index 32b4fbce65..8f1dc3f85c 100644 --- a/src/sunstone/public/app/opennebula/action.js +++ b/src/sunstone/public/app/opennebula/action.js @@ -116,6 +116,10 @@ define(function(require) { }); }, + "cache": function(resource) { + return listCache[resource]; + }, + "list": function(params, resource, path, process) { var callback = params.success; var callbackError = params.error; diff --git a/src/sunstone/public/app/tabs/dashboard-tab.js b/src/sunstone/public/app/tabs/dashboard-tab.js index 1e3c86628a..8991f3cefa 100644 --- a/src/sunstone/public/app/tabs/dashboard-tab.js +++ b/src/sunstone/public/app/tabs/dashboard-tab.js @@ -81,6 +81,7 @@ define(function(require) { 'html': require('hbs!./dashboard-tab/hosts'), 'onShow': function() { Sunstone.runAction("Host.list"); + Sunstone.runAction("Cluster.list"); } }, 'vms': { diff --git a/src/sunstone/public/app/tabs/hosts-tab/datatable.js b/src/sunstone/public/app/tabs/hosts-tab/datatable.js index f75cbf6e66..9fa6cbee17 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/datatable.js +++ b/src/sunstone/public/app/tabs/hosts-tab/datatable.js @@ -19,15 +19,18 @@ define(function(require) { DEPENDENCIES */ - var TabDataTable = require('utils/tab-datatable'); - var SunstoneConfig = require('sunstone-config'); - var Locale = require('utils/locale'); - var Humanize = require('utils/humanize'); - var CPUBars = require('./utils/cpu-bars'); - var MemoryBars = require('./utils/memory-bars'); - var OpenNebulaHost = require('opennebula/host'); - var LabelsUtils = require('utils/labels/utils'); - var SearchDropdown = require('hbs!./datatable/search'); + var TabDataTable = require("utils/tab-datatable"); + var SunstoneConfig = require("sunstone-config"); + var Locale = require("utils/locale"); + var Humanize = require("utils/humanize"); + var CPUBars = require("./utils/cpu-bars"); + var MemoryBars = require("./utils/memory-bars"); + var Reserved = require("./utils/reserved"); + var OpenNebulaHost = require("opennebula/host"); + var LabelsUtils = require("utils/labels/utils"); + var SearchDropdown = require("hbs!./datatable/search"); + var OpenNebulaAction = require("opennebula/action"); + var Sunstone = require("sunstone"); /* @@ -36,10 +39,10 @@ define(function(require) { var RESOURCE = "Host"; var XML_ROOT = "HOST"; - var TAB_NAME = require('./tabId'); + var TAB_NAME = require("./tabId"); var LABELS_COLUMN = 13; var SEARCH_COLUMN = 14; - var TEMPLATE_ATTR = 'TEMPLATE'; + var TEMPLATE_ATTR = "TEMPLATE"; /* CONSTRUCTOR @@ -62,10 +65,10 @@ define(function(require) { {"sWidth": "35px", "aTargets": [0]}, {"sWidth": "155px", "aTargets": [6, 8]}, {"bVisible": true, "aTargets": SunstoneConfig.tabTableColumns(TAB_NAME)}, - {"bVisible": false, "aTargets": ['_all']}, + {"bVisible": false, "aTargets": ["_all"]}, {"sType": "num", "aTargets": [1, 4]} ] - } + }; this.columns = [ Locale.tr("ID") , @@ -123,10 +126,15 @@ define(function(require) { */ function _elementArray(element_json) { + var cache = OpenNebulaAction.cache("CLUSTER"); + if (!cache){ + Sunstone.runAction("Cluster.list"); + cache = OpenNebulaAction.cache("CLUSTER"); + } var element = element_json.HOST; - - var cpuBars = CPUBars.html(element); - var memoryBars = MemoryBars.html(element); + var elementAux = Reserved.updateHostTemplate(cache, element); + var cpuBars = CPUBars.html(elementAux); + var memoryBars = MemoryBars.html(elementAux); this.totalHosts++; @@ -168,9 +176,9 @@ define(function(require) { } return [ - '', + "", element.ID, element.NAME, element.CLUSTER.length ? element.CLUSTER : "-", @@ -183,7 +191,7 @@ define(function(require) { element.IM_MAD, element.VM_MAD, Humanize.prettyTime(element.LAST_MON_TIME), - (LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''), + (LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||""), btoa(unescape(encodeURIComponent(JSON.stringify(search)))) ]; } @@ -210,7 +218,7 @@ define(function(require) { var ratio_allocated_cpu = 0; if (this.maxCPU > 0) { ratio_allocated_cpu = Math.round((this.allocatedCPU / this.maxCPU) * 100); - info_str = this.allocatedCPU + ' / ' + this.maxCPU ; + info_str = this.allocatedCPU + " / " + this.maxCPU ; } else { info_str = "- / -"; } @@ -228,7 +236,7 @@ define(function(require) { var ratio_real_cpu = 0; if (this.maxCPU > 0) { ratio_real_cpu = Math.round((this.realCPU / this.maxCPU) * 100); - info_str = this.realCPU + ' / ' + this.maxCPU; + info_str = this.realCPU + " / " + this.maxCPU; } else { info_str = "- / -"; } @@ -244,9 +252,9 @@ define(function(require) { var ratio_allocated_mem = 0; if (this.maxMemory > 0) { ratio_allocated_mem = Math.round((this.allocatedMemory / this.maxMemory) * 100); - info_str = Humanize.size(this.allocatedMemory) + ' / ' + Humanize.size(this.maxMemory); + info_str = Humanize.size(this.allocatedMemory) + " / " + Humanize.size(this.maxMemory); } else { - info_str = Humanize.size(this.allocatedMemory) + ' / -'; + info_str = Humanize.size(this.allocatedMemory) + " / -"; } $("#dashboard_host_allocated_mem").html(quotaDashboard( @@ -260,9 +268,9 @@ define(function(require) { var ratio_real_mem = 0; if (this.maxMemory > 0) { ratio_real_mem = Math.round((this.realMemory / this.maxMemory) * 100); - info_str = Humanize.size(this.realMemory) + ' / ' + Humanize.size(this.maxMemory); + info_str = Humanize.size(this.realMemory) + " / " + Humanize.size(this.maxMemory); } else { - info_str = Humanize.size(this.realMemory) + ' / -'; + info_str = Humanize.size(this.realMemory) + " / -"; } $("#dashboard_host_real_mem").html(quotaDashboard( @@ -278,20 +286,20 @@ define(function(require) { function quotaDashboard(html_tag, legend, font_large_size, font_small_size, quota) { var percentage = quota.percentage > 100 ? 100 : quota.percentage; - return '
' + - '
' + - '' + legend + '' + - '
' + - '
' + - '
' + - '
' + - ' ' + - '
' + - '
' + - '
' + - '
' + - '' + quota.str + '' + - '
' + - '
'; + return "
" + + "
" + + "" + legend + "" + + "
" + + "
" + + "
" + + "
" + + " " + + "
" + + "
" + + "
" + + "
" + + "" + quota.str + "" + + "
" + + "
"; } }); 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 f25acf6192..fd807d87e1 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/info.js @@ -17,40 +17,42 @@ define(function(require) { /* DEPENDENCIES */ - require('foundation'); - var Locale = require('utils/locale'); - var Humanize = require('utils/humanize'); - var RenameTr = require('utils/panel/rename-tr'); - var TemplateTable = require('utils/panel/template-table'); - var TemplateTableVcenter = require('utils/panel/template-table'); - var PermissionsTable = require('utils/panel/permissions-table'); - var ClusterTr = require('utils/panel/cluster-tr'); - var OpenNebulaHost = require('opennebula/host'); - var CPUBars = require('../utils/cpu-bars'); - var MemoryBars = require('../utils/memory-bars'); - var DatastoresCapacityTable = require('../utils/datastores-capacity-table'); - var CanImportWilds = require('../utils/can-import-wilds'); - var Sunstone = require('sunstone'); - var TemplateUtils = require('utils/template-utils'); - var CapacityTable = require('utils/custom-tags-table'); - var EC2Tr = require('utils/panel/ec2-tr'); + require("foundation"); + var Locale = require("utils/locale"); + var Humanize = require("utils/humanize"); + var RenameTr = require("utils/panel/rename-tr"); + var TemplateTable = require("utils/panel/template-table"); + var TemplateTableVcenter = require("utils/panel/template-table"); + var PermissionsTable = require("utils/panel/permissions-table"); + var ClusterTr = require("utils/panel/cluster-tr"); + var OpenNebulaHost = require("opennebula/host"); + var CPUBars = require("../utils/cpu-bars"); + var MemoryBars = require("../utils/memory-bars"); + var Reserved = require("../utils/reserved"); + var DatastoresCapacityTable = require("../utils/datastores-capacity-table"); + var CanImportWilds = require("../utils/can-import-wilds"); + var Sunstone = require("sunstone"); + var TemplateUtils = require("utils/template-utils"); + var CapacityTable = require("utils/custom-tags-table"); + var EC2Tr = require("utils/panel/ec2-tr"); + var OpenNebulaAction = require("opennebula/action"); /* TEMPLATES */ - var TemplateInfo = require('hbs!./info/html'); + var TemplateInfo = require("hbs!./info/html"); /* CONSTANTS */ - var TAB_ID = require('../tabId'); - var PANEL_ID = require('./info/panelId'); + var TAB_ID = require("../tabId"); + var PANEL_ID = require("./info/panelId"); var RESOURCE = "Host"; var XML_ROOT = "HOST"; - var OVERCOMMIT_DIALOG_ID = require('utils/dialogs/overcommit/dialogId'); + var OVERCOMMIT_DIALOG_ID = require("utils/dialogs/overcommit/dialogId"); /* CONSTRUCTOR @@ -70,7 +72,7 @@ define(function(require) { that.unshownTemplate = {}; that.strippedTemplateVcenter = {}; that.strippedTemplate = {}; - var unshownKeys = ['HOST', 'VM', 'WILDS', 'ZOMBIES', 'RESERVED_CPU', 'RESERVED_MEM', "EC2_ACCESS", "EC2_SECRET", "CAPACITY", "REGION_NAME"]; + var unshownKeys = ["HOST", "VM", "WILDS", "ZOMBIES", "RESERVED_CPU", "RESERVED_MEM", "EC2_ACCESS", "EC2_SECRET", "CAPACITY", "REGION_NAME"]; $.each(that.element.TEMPLATE, function(key, value) { if ($.inArray(key, unshownKeys) > -1) { that.unshownTemplate[key] = value; @@ -96,6 +98,13 @@ define(function(require) { FUNCTION DEFINITIONS */ function _html() { + var cache = OpenNebulaAction.cache("CLUSTER"); + if (!cache){ + Sunstone.runAction("Cluster.list"); + cache = OpenNebulaAction.cache("CLUSTER"); + } + var elementAux = Reserved.updateHostTemplate(cache, this.element); + var templateTableHTML = TemplateTable.html( this.strippedTemplate, RESOURCE, @@ -107,30 +116,30 @@ define(function(require) { 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 cpuBars = CPUBars.html(elementAux); + var memoryBars = MemoryBars.html(elementAux); 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, - 'renameTrHTML': renameTrHTML, - 'clusterTrHTML': clusterTrHTML, - 'templateTableHTML': templateTableHTML, - 'templateTableVcenterHTML': templateTableVcenterHTML, - 'permissionsTableHTML': permissionsTableHTML, - 'cpuBars': cpuBars, - 'memoryBars': memoryBars, - 'stateStr': OpenNebulaHost.stateStr(this.element.STATE), - 'datastoresCapacityTableHTML': datastoresCapacityTableHTML, - 'maxReservedMEM': realMEM * 2, - 'maxReservedCPU': realCPU * 2, - 'realCPU': realCPU, - 'realMEM': Humanize.size(realMEM), - 'virtualMEMInput': Humanize.size(this.element.HOST_SHARE.MAX_MEM), - 'ec2_tr': EC2Tr.html(RESOURCE, this.element.TEMPLATE), - 'capacityTableHTML': CapacityTable.html() + "element": this.element, + "renameTrHTML": renameTrHTML, + "clusterTrHTML": clusterTrHTML, + "templateTableHTML": templateTableHTML, + "templateTableVcenterHTML": templateTableVcenterHTML, + "permissionsTableHTML": permissionsTableHTML, + "cpuBars": cpuBars, + "memoryBars": memoryBars, + "stateStr": OpenNebulaHost.stateStr(this.element.STATE), + "datastoresCapacityTableHTML": datastoresCapacityTableHTML, + "maxReservedMEM": realMEM * 2, + "maxReservedCPU": realCPU * 2, + "realCPU": realCPU, + "realMEM": Humanize.size(realMEM), + "virtualMEMInput": Humanize.size(this.element.HOST_SHARE.MAX_MEM), + "ec2_tr": EC2Tr.html(RESOURCE, this.element.TEMPLATE), + "capacityTableHTML": CapacityTable.html() }); } @@ -180,7 +189,7 @@ define(function(require) { PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context); if($.isEmptyObject(this.strippedTemplateVcenter)){ - $('.vcenter', context).hide(); + $(".vcenter", context).hide(); } //.off and .on prevent multiple clicks events diff --git a/src/sunstone/public/app/tabs/hosts-tab/utils/reserved.js b/src/sunstone/public/app/tabs/hosts-tab/utils/reserved.js new file mode 100644 index 0000000000..e9ef4f0bf0 --- /dev/null +++ b/src/sunstone/public/app/tabs/hosts-tab/utils/reserved.js @@ -0,0 +1,44 @@ +/* -------------------------------------------------------------------------- */ +/* Copyright 2002-2017, 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. */ +/* -------------------------------------------------------------------------- */ + +define(function(require) { + + function _updateHostTemplate(cache, element) { + var elementAux = $.extend(true, {}, element); + if (cache && (elementAux.TEMPLATE.RESERVED_CPU === "" || elementAux.TEMPLATE.RESERVED_MEM === "")) { + $.each(cache.data, function(key, value){ + if (value.CLUSTER.ID === elementAux.CLUSTER_ID){ + if (elementAux.TEMPLATE.RESERVED_CPU === ""){ + var cpuPercentage = value.CLUSTER.TEMPLATE.RESERVED_CPU.split("%")[0]; + var cpu = cpuPercentage / 100 * elementAux.HOST_SHARE.MAX_CPU; + elementAux.HOST_SHARE.MAX_CPU = (elementAux.HOST_SHARE.MAX_CPU - cpu).toString(); + } + if (elementAux.TEMPLATE.RESERVED_MEM === ""){ + var memPercentage = value.CLUSTER.TEMPLATE.RESERVED_MEM.split("%")[0]; + var mem = memPercentage / 100 * elementAux.HOST_SHARE.MAX_MEM; + elementAux.HOST_SHARE.MAX_MEM = (elementAux.HOST_SHARE.MAX_MEM - mem).toString(); + } + } + }); + } + return elementAux; + } + + return { + "updateHostTemplate": _updateHostTemplate + }; + +}); \ No newline at end of file diff --git a/src/sunstone/public/app/utils/actions.js b/src/sunstone/public/app/utils/actions.js index 450b69d010..ec010a6211 100644 --- a/src/sunstone/public/app/utils/actions.js +++ b/src/sunstone/public/app/utils/actions.js @@ -16,12 +16,12 @@ define(function(require) { - var Locale = require('utils/locale'); - var TemplateUtils = require('utils/template-utils'); - var Humanize = require('utils/humanize'); + var Locale = require("utils/locale"); + var TemplateUtils = require("utils/template-utils"); + var Humanize = require("utils/humanize"); function _fromJSONtoActionsTable(actions_array) { - var str = "" + var str = ""; if (!actions_array) { return ""; @@ -48,28 +48,26 @@ define(function(require) { var time_str = Humanize.prettyTime(scheduling_action.TIME); var str = ""; - str += '\ - ' + TemplateUtils.htmlEncode(scheduling_action.ACTION) + '\ - ' + time_str + '\ + str += "\ + " + TemplateUtils.htmlEncode(scheduling_action.ACTION) + "\ + " + time_str + "\ \
\ - \ + \
\ \ - '; + "; return str; } function _convertDate(date_string){ - date_string = date_string.split('/'); + date_string = date_string.split("/"); return date_string[2] + "-" + date_string[1] + "-" + date_string[0]; } return { - 'fromJSONtoActionsTable': _fromJSONtoActionsTable, - 'convertDate': _convertDate + "fromJSONtoActionsTable": _fromJSONtoActionsTable, + "convertDate": _convertDate }; }); - - \ No newline at end of file