mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-20 10:50:08 +03:00
Bug #4121: Use default cost values from oned.conf in sunstone
(cherry picked from commit 21a15a7875eb9386ec9620c88cc24a5a7a80a032)
This commit is contained in:
parent
397375d1ab
commit
ea688c3022
@ -53,6 +53,8 @@ define(function(require) {
|
||||
_setupCloseDropdownsOnClick();
|
||||
_insertUserAndZoneSelector();
|
||||
|
||||
Config.initDefaultCost();
|
||||
|
||||
if (Config.isTabEnabled(PROVISION_TAB_ID)) {
|
||||
Sunstone.showTab(PROVISION_TAB_ID);
|
||||
$('#loading').hide();
|
||||
|
114
src/sunstone/public/app/opennebula/system.js
Normal file
114
src/sunstone/public/app/opennebula/system.js
Normal file
@ -0,0 +1,114 @@
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* Copyright 2002-2015, 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) {
|
||||
var OpenNebulaAction = require('./action');
|
||||
var Locale = require('utils/locale');
|
||||
var OpenNebulaError = require('./error');
|
||||
var OpenNebulaHelper = require('./helper');
|
||||
|
||||
|
||||
var onedconfCache;
|
||||
var onedconfWaiting = false;
|
||||
var onedconfCallbacks = [];
|
||||
|
||||
var CACHE_EXPIRE = 36000000; //ms
|
||||
|
||||
var _clearCache = function() {
|
||||
onedconfCache = null;
|
||||
//console.log("onedconf. Cache cleaned");
|
||||
};
|
||||
|
||||
var RESOURCE = "SYSTEM";
|
||||
|
||||
var System = {
|
||||
"resource": RESOURCE,
|
||||
"onedconf": function(params){
|
||||
var callback = params.success;
|
||||
var callbackError = params.error;
|
||||
var request = OpenNebulaHelper.request(RESOURCE, "onedconf");
|
||||
|
||||
if (onedconfCache &&
|
||||
onedconfCache["timestamp"] + CACHE_EXPIRE > new Date().getTime()) {
|
||||
|
||||
//console.log("onedconf. Cache used");
|
||||
|
||||
return callback ?
|
||||
callback(request, onedconfCache["pcis"]) : null;
|
||||
}
|
||||
|
||||
onedconfCallbacks.push({
|
||||
success : callback,
|
||||
error : callbackError
|
||||
});
|
||||
|
||||
//console.log("onedconf. Callback queued");
|
||||
|
||||
if (onedconfWaiting) {
|
||||
return;
|
||||
}
|
||||
|
||||
onedconfWaiting = true;
|
||||
|
||||
//console.log("onedconf. NO cache, calling ajax");
|
||||
|
||||
$.ajax({
|
||||
url: "onedconf",
|
||||
type: "GET",
|
||||
dataType: "json",
|
||||
success: function(response) {
|
||||
onedconfCache = {
|
||||
timestamp : new Date().getTime(),
|
||||
onedConf : response
|
||||
};
|
||||
|
||||
onedconfWaiting = false;
|
||||
|
||||
for (var i = 0; i < onedconfCallbacks.length; i++) {
|
||||
var callback = onedconfCallbacks[i].success;
|
||||
|
||||
if (callback) {
|
||||
//console.log("onedconf. Callback called");
|
||||
callback(request, response);
|
||||
}
|
||||
}
|
||||
|
||||
onedconfCallbacks = [];
|
||||
|
||||
return;
|
||||
},
|
||||
error: function(response) {
|
||||
onedconfWaiting = false;
|
||||
|
||||
for (var i = 0; i < onedconfCallbacks.length; i++) {
|
||||
var callback = onedconfCallbacks[i].error;
|
||||
|
||||
if (callback) {
|
||||
//console.log("onedconf. ERROR Callback called");
|
||||
callback(request, OpenNebulaError(response));
|
||||
}
|
||||
}
|
||||
|
||||
onedconfCallbacks = [];
|
||||
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return System;
|
||||
})
|
@ -16,10 +16,17 @@
|
||||
|
||||
define(function(require) {
|
||||
require('jquery');
|
||||
var OpenNebulaSystem = require('opennebula/system');
|
||||
|
||||
// Clone the local config object in a private var
|
||||
var _config = $.extend(true, {}, config);
|
||||
|
||||
var _defaultCost = {
|
||||
cpuCost : 0,
|
||||
memoryCost : 0,
|
||||
diskCost : 0
|
||||
};
|
||||
|
||||
var Config = {
|
||||
'isTabEnabled': function(tabName) {
|
||||
var enabled = _config['view']['enabled_tabs'][tabName];
|
||||
@ -136,7 +143,31 @@ define(function(require) {
|
||||
'vncProxyPort': _config['system_config']['vnc_proxy_port'],
|
||||
'vncWSS': _config['user_config']['vnc_wss'],
|
||||
'logo': (_config['view']["small_logo"] || "images/one_small_logo.png"),
|
||||
'enabledTabs': _config['view']['enabled_tabs']
|
||||
'enabledTabs': _config['view']['enabled_tabs'],
|
||||
"defaultCost" : _defaultCost,
|
||||
"initDefaultCost" : function() {
|
||||
OpenNebulaSystem.onedconf({
|
||||
data : {},
|
||||
timeout: true,
|
||||
success: function (request, onedconf){
|
||||
if (onedconf.DEFAULT_COST != undefined){
|
||||
if (onedconf.DEFAULT_COST.CPU_COST != undefined){
|
||||
_defaultCost.cpuCost = parseInt(onedconf.DEFAULT_COST.CPU_COST);
|
||||
}
|
||||
if (onedconf.DEFAULT_COST.MEMORY_COST != undefined){
|
||||
_defaultCost.memoryCost = parseInt(onedconf.DEFAULT_COST.MEMORY_COST);
|
||||
}
|
||||
if (onedconf.DEFAULT_COST.DISK_COST != undefined){
|
||||
_defaultCost.diskCost = parseInt(onedconf.DEFAULT_COST.DISK_COST);
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(request, error_json){
|
||||
console.error("There was an error requesting oned.conf: "+
|
||||
error_json.error.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return Config;
|
||||
|
@ -246,20 +246,37 @@ define(function(require) {
|
||||
|
||||
var capacity = template_json.VMTEMPLATE.TEMPLATE;
|
||||
var cost = 0;
|
||||
if ((capacity.CPU_COST || capacity.MEMORY_COST || capacity.DISK_COST) && Config.isFeatureEnabled("showback")) {
|
||||
|
||||
var cpuCost = capacity.CPU_COST;
|
||||
var memoryCost = capacity.MEMORY_COST;
|
||||
var diskCost = capacity.DISK_COST;
|
||||
|
||||
if (cpuCost == undefined){
|
||||
cpuCost = Config.defaultCost.cpuCost;
|
||||
}
|
||||
|
||||
if (memoryCost == undefined){
|
||||
memoryCost = Config.defaultCost.memoryCost;
|
||||
}
|
||||
|
||||
if (diskCost == undefined){
|
||||
diskCost = Config.defaultCost.diskCost;
|
||||
}
|
||||
|
||||
if ((cpuCost != 0 || memoryCost != 0 || diskCost != 0) && Config.isFeatureEnabled("showback")) {
|
||||
$(".provision_create_service_cost_div", context).show();
|
||||
|
||||
if (capacity.CPU && capacity.CPU_COST) {
|
||||
cost += capacity.CPU * capacity.CPU_COST
|
||||
$(".cost_value", context).data("CPU_COST", capacity.CPU_COST);
|
||||
if (capacity.CPU) {
|
||||
cost += capacity.CPU * cpuCost;
|
||||
$(".cost_value", context).data("CPU_COST", cpuCost);
|
||||
}
|
||||
|
||||
if (capacity.MEMORY && capacity.MEMORY_COST) {
|
||||
cost += capacity.MEMORY * capacity.MEMORY_COST
|
||||
$(".cost_value", context).data("MEMORY_COST", capacity.MEMORY_COST);
|
||||
if (capacity.MEMORY) {
|
||||
cost += capacity.MEMORY * memoryCost;
|
||||
$(".cost_value", context).data("MEMORY_COST", memoryCost);
|
||||
}
|
||||
|
||||
if (capacity.DISK_COST) {
|
||||
if (diskCost != 0) {
|
||||
var template_disk = capacity.DISK;
|
||||
var disks = [];
|
||||
if ($.isArray(template_disk)) {
|
||||
@ -268,15 +285,15 @@ define(function(require) {
|
||||
disks = [template_disk];
|
||||
}
|
||||
|
||||
$(".cost_value", context).data("DISK_COST", capacity.DISK_COST);
|
||||
$(".cost_value", context).data("DISK_COST", diskCost);
|
||||
|
||||
$.each(disks, function(i,disk){
|
||||
if (disk.SIZE) {
|
||||
cost += capacity.DISK_COST * disk.SIZE;
|
||||
cost += diskCost * disk.SIZE;
|
||||
}
|
||||
|
||||
if (disk.DISK_SNAPSHOT_TOTAL_SIZE) {
|
||||
cost += capacity.DISK_COST * disk.DISK_SNAPSHOT_TOTAL_SIZE;
|
||||
cost += diskCost * disk.DISK_SNAPSHOT_TOTAL_SIZE;
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -386,17 +403,29 @@ define(function(require) {
|
||||
'<br>');
|
||||
|
||||
var cost = 0;
|
||||
if ((capacity.CPU_COST || capacity.MEMORY_COST) && Config.isFeatureEnabled("showback")) {
|
||||
|
||||
var cpuCost = capacity.CPU_COST;
|
||||
var memoryCost = capacity.MEMORY_COST;
|
||||
|
||||
if (cpuCost == undefined){
|
||||
cpuCost = Config.defaultCost.cpuCost;
|
||||
}
|
||||
|
||||
if (memoryCost == undefined){
|
||||
memoryCost = Config.defaultCost.memoryCost;
|
||||
}
|
||||
|
||||
if ((cpuCost != 0 || memoryCost != 0) && Config.isFeatureEnabled("showback")) {
|
||||
$(".provision_create_template_cost_div").show();
|
||||
|
||||
if (capacity.CPU && capacity.CPU_COST) {
|
||||
cost += capacity.CPU * capacity.CPU_COST
|
||||
$(".cost_value").data("CPU_COST", capacity.CPU_COST);
|
||||
if (capacity.CPU) {
|
||||
cost += capacity.CPU * cpuCost;
|
||||
$(".cost_value").data("CPU_COST", cpuCost);
|
||||
}
|
||||
|
||||
if (capacity.MEMORY && capacity.MEMORY_COST) {
|
||||
cost += capacity.MEMORY * capacity.MEMORY_COST
|
||||
$(".cost_value").data("MEMORY_COST", capacity.MEMORY_COST);
|
||||
if (capacity.MEMORY) {
|
||||
cost += capacity.MEMORY * memoryCost;
|
||||
$(".cost_value").data("MEMORY_COST", memoryCost);
|
||||
}
|
||||
|
||||
$(".cost_value").html(cost.toFixed(2));
|
||||
|
@ -200,7 +200,15 @@ define(function(require) {
|
||||
var cpuCost = template_json.VMTEMPLATE.TEMPLATE.CPU_COST;
|
||||
var memoryCost = template_json.VMTEMPLATE.TEMPLATE.MEMORY_COST;
|
||||
|
||||
if ((cpuCost != undefined || memoryCost != undefined) && Config.isFeatureEnabled("showback")) {
|
||||
if (cpuCost == undefined){
|
||||
cpuCost = Config.defaultCost.cpuCost;
|
||||
}
|
||||
|
||||
if (memoryCost == undefined){
|
||||
memoryCost = Config.defaultCost.memoryCost;
|
||||
}
|
||||
|
||||
if ((cpuCost != 0 || memoryCost != 0) && Config.isFeatureEnabled("showback")) {
|
||||
var cost = 0;
|
||||
|
||||
var cpu = template_json.VMTEMPLATE.TEMPLATE.CPU;
|
||||
|
@ -78,9 +78,22 @@ define(function(require) {
|
||||
var resizeStateEnabled =
|
||||
(RESIZE_STATES.indexOf(parseInt(this.element.STATE)) > -1);
|
||||
|
||||
var cpuCost = this.element.TEMPLATE.CPU_COST;
|
||||
var memoryCost = this.element.TEMPLATE.MEMORY_COST;
|
||||
|
||||
if (cpuCost == undefined){
|
||||
cpuCost = Config.defaultCost.cpuCost;
|
||||
}
|
||||
|
||||
if (memoryCost == undefined){
|
||||
memoryCost = Config.defaultCost.memoryCost;
|
||||
}
|
||||
|
||||
return TemplateInfo({
|
||||
'element': this.element,
|
||||
'resizeStateEnabled': resizeStateEnabled
|
||||
'resizeStateEnabled': resizeStateEnabled,
|
||||
'cpuCost': cpuCost,
|
||||
'memoryCost': memoryCost
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -35,8 +35,8 @@
|
||||
<td id="vcpu_info">{{valOrDefault element.TEMPLATE.VCPU '-'}}</td>
|
||||
<td id="memory_info">{{humanizeSize "MB" element.TEMPLATE.MEMORY}}</td>
|
||||
{{#isFeatureEnabled "showback"}}
|
||||
<td id="cpu_cost_info">{{valOrDefault element.TEMPLATE.CPU_COST '-'}}</td>
|
||||
<td id="memory_cost_info" >{{valOrDefault element.TEMPLATE.MEMORY_COST '-'}}</td>
|
||||
<td id="cpu_cost_info">{{cpuCost}}</td>
|
||||
<td id="memory_cost_info" >{{memoryCost}}</td>
|
||||
{{/isFeatureEnabled}}
|
||||
<td>
|
||||
{{#isTabActionEnabled "vms-tab" "VM.resize"}}
|
||||
|
@ -69,7 +69,16 @@ define(function(require) {
|
||||
*/
|
||||
|
||||
function _html() {
|
||||
return TemplateHtml({element: this.element});
|
||||
var diskCost = this.element.TEMPLATE.DISK_COST;
|
||||
|
||||
if (diskCost == undefined){
|
||||
diskCost = Config.defaultCost.diskCost;
|
||||
}
|
||||
|
||||
return TemplateHtml({
|
||||
element: this.element,
|
||||
diskCost: diskCost
|
||||
});
|
||||
}
|
||||
|
||||
function _setup(context) {
|
||||
|
@ -49,7 +49,7 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="key_td">{{tr "Cost / MByte"}}</td>
|
||||
<td class="value_td">{{valOrDefault element.TEMPLATE.DISK_COST '-'}}</td>
|
||||
<td class="value_td">{{diskCost}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -74,9 +74,13 @@ define(function(require){
|
||||
extendedDisks = [extendedTemplateDisk]
|
||||
}
|
||||
|
||||
|
||||
var disk_cost = template_json.VMTEMPLATE.TEMPLATE.DISK_COST;
|
||||
if (disk_cost && Config.isFeatureEnabled("showback")) {
|
||||
|
||||
if (disk_cost == undefined) {
|
||||
disk_cost = Config.defaultCost.diskCost;
|
||||
}
|
||||
|
||||
if (disk_cost != 0 && Config.isFeatureEnabled("showback")) {
|
||||
$(".provision_create_template_disk_cost_div", disksContext).show();
|
||||
|
||||
disksContext.on("change.fndtn.slider", '.range-slider', function(){
|
||||
|
@ -498,6 +498,23 @@ get '/infrastructure' do
|
||||
[200, infrastructure.to_json]
|
||||
end
|
||||
|
||||
get '/onedconf' do
|
||||
serveradmin_client = $cloud_auth.client(nil, session[:active_zone_endpoint])
|
||||
|
||||
rc = OpenNebula::System.new(serveradmin_client).get_configuration
|
||||
|
||||
if OpenNebula.is_error?(rc)
|
||||
logger.error { rc.message }
|
||||
error 500, ""
|
||||
end
|
||||
|
||||
onedconf = {
|
||||
:DEFAULT_COST => rc.to_hash()['TEMPLATE']['DEFAULT_COST']
|
||||
}
|
||||
|
||||
[200, onedconf.to_json]
|
||||
end
|
||||
|
||||
get '/vm/:id/log' do
|
||||
@SunstoneServer.get_vm_log(params[:id])
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user