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