" + msg;
-
- $.jGrowl(msg, {theme: "jGrowl-notify-error", sticky: true });
-}
-
-// Returns an HTML string with the json keys and values in the form
-// key: value
-// It recursively explores objects, and flattens their contents in
-// the result.
-function prettyPrintJSON(template_json){
- str = ""
- for (field in template_json) {
- if (typeof template_json[field] == 'object'){
- str += prettyPrintJSON(template_json[field]) + '
';
- } else {
- str += '
'+field+'
'+template_json[field]+'
';
- };
- };
- return str;
-}
-
-//Replaces all class"tip" divs with an information icon that
-//displays the tip information on mouseover.
-function setupTips(){
- $('div.tip').each(function(){
- tip = $(this).html();
- $(this).html('');
- $(this).append('');
-
- $(this).append('');
-
-
- $('span.tipspan',this).html(tip);
- $(this).parent().append('');
- $('span.tipspan',this).hide();
- $('span.info_icon',this).hover(function(e){
- var top, left;
- top = e.pageY - 15;// - $(this).parents('#create_vm_dialog').offset().top - 15;
- left = e.pageX + 15;// - $(this).parents('#create_vm_dialog').offset().left;
- $(this).next().css(
- {"top":top+"px",
- "left":left+"px"});
- $(this).next().fadeIn();
- },function(){
- $(this).next().fadeOut();
- });
- });
-}
-
-//Returns the username of a user providing the uid.
-//Crawls the user dataTable for that. If such user is not found,
-//we return the uid.
-function getUserName(uid){
- var user = "uid "+uid;
- if (!dataTable_users) {
- return user;
- }
- nodes = dataTable_users.fnGetData();
-
- $.each(nodes,function(){
- if (uid == this[1]) {
- user = this[2];
- return false;
- }
- });
- return user;
-
-}
-
-// Returns an string in the form key=value key=value ...
-// Does not explore objects in depth.
-function stringJSON(json){
- str = ""
- for (field in json) {
- str+= field + '=' + json[field] + ' ';
- }
- return str;
-}
-
-// Returns the running time data
-function str_start_time(vm){
- return pretty_time(vm.STIME);
-}
-
-// Updates a data_table, with a 2D array containing
-// Does a partial redraw, so the filter and pagination are kept
-function updateView(item_list,data_table){
- if (data_table!=null) {
- data_table.fnClearTable();
- data_table.fnAddData(item_list);
- data_table.fnDraw(false);
- };
-}
-
-function updateSingleElement(element,data_table,tag){
- tr = $(tag).parents('tr')[0];
- position = data_table.fnGetPosition(tr);
- data_table.fnUpdate(element,position,0);
- $('input',data_table).trigger("change");
-
-}
-
-function tableCheckboxesListener(dataTable){
-
- context = dataTable.parents('form');
- last_action_b = $('.last_action_button',context);
- $('.top_button, .list_button',context).button("disable");
- if (last_action_b.length && last_action_b.val().length){
- last_action_b.button("disable");
- };
- $('.new_button',context).button("enable");
-
- //listen to changes
- $('input',dataTable).live("change",function(){
- dataTable = $(this).parents('table').dataTable();
- context = dataTable.parents('form');
- last_action_b = $('.last_action_button',context);
- nodes = dataTable.fnGetNodes();
- total_length = nodes.length;
- checked_length = $('input:checked',nodes).length;
-
- if (total_length == checked_length){
- $('.check_all',dataTable).attr("checked","checked");
- } else {
- $('.check_all',dataTable).removeAttr("checked");
- }
-
- if (checked_length){
- $('.top_button, .list_button',context).button("enable");
- if (last_action_b.length && last_action_b.val().length){
- last_action_b.button("enable");
- };
- $('.new_button',context).button("enable");
- } else {
- $('.top_button, .list_button',context).button("disable");
- last_action_b.button("disable");
- $('.new_button',context).button("enable");
- }
- });
-
-}
-
-function deleteElement(data_table,tag){
- tr = $(tag).parents('tr')[0];
- data_table.fnDeleteRow(tr);
- $('input',data_table).trigger("change");
-}
-
-function addElement(element,data_table){
- data_table.fnAddData(element);
-}
-
-function hostElementArray(host_json){
- host = host_json.HOST;
- acpu = parseInt(host.HOST_SHARE.MAX_CPU);
- if (!acpu) {acpu=100};
- acpu = acpu - parseInt(host.HOST_SHARE.CPU_USAGE);
-
- total_mem = parseInt(host.HOST_SHARE.MAX_MEM);
- free_mem = parseInt(host.HOST_SHARE.FREE_MEM);
-
- if (total_mem == 0) {
- ratio_mem = 0;
- } else {
- ratio_mem = Math.round(((total_mem - free_mem) / total_mem) * 100);
- }
-
-
- total_cpu = parseInt(host.HOST_SHARE.MAX_CPU);
- used_cpu = Math.max(total_cpu - parseInt(host.HOST_SHARE.USED_CPU),acpu);
-
- if (total_cpu == 0) {
- ratio_cpu = 0;
- } else {
- ratio_cpu = Math.round(((total_cpu - used_cpu) / total_cpu) * 100);
- }
-
- pb_mem =
-'
\
- \
- '+ratio_mem+'%\
-
\
-';
-
- pb_cpu =
-'
\
- \
- '+ratio_cpu+'%\
-
\
-';
-
-
- return [ '',
- host.ID,
- host.NAME,
- host.CLUSTER,
- host.HOST_SHARE.RUNNING_VMS, //rvm
- pb_cpu,
- pb_mem,
- OpenNebula.Helper.resource_state("host",host.STATE) ];
-
-
- //~ return [ '',
- //~ host.ID,
- //~ host.NAME,
- //~ host.CLUSTER,
- //~ host.HOST_SHARE.RUNNING_VMS, //rvm
- //~ host.HOST_SHARE.MAX_CPU, //tcpu
- //~ parseInt(host.HOST_SHARE.MAX_CPU) - parseInt(host.HOST_SHARE.USED_CPU), //fcpu
- //~ acpu,
- //~ humanize_size(host.HOST_SHARE.MAX_MEM),
- //~ humanize_size(host.HOST_SHARE.FREE_MEM),
- //~ OpenNebula.Helper.resource_state("host",host.STATE) ];
-}
-
-//Adds a listener to show the extended info when clicking on a row
-function hostInfoListener(){
- $('#tbodyhosts tr').live("click",function(e){
-
- //do nothing if we are clicking a checkbox!
- if ($(e.target).is('input')) {return true;}
-
- popDialogLoading();
- aData = dataTable_hosts.fnGetData(this);
- id = $(aData[0]).val();
- OpenNebula.Host.show({data:{id:id},success: updateHostInfo,error: onError});
- return false;
- });
-}
-
-//~ function clusterElementArray(cluster_json){
- //~ cluster = cluster_json.CLUSTER;
- //~ return ['',
- //~ cluster.ID,
- //~ cluster.NAME
- //~ ]
-//~ }
-
-function vMachineElementArray(vm_json){
- var vm = vm_json.VM;
- var state = OpenNebula.Helper.resource_state("vm",vm.STATE);
- if (state == "ACTIVE") {
- state = OpenNebula.Helper.resource_state("vm_lcm",vm.LCM_STATE);
- }
- return [
- '',
- vm.ID,
- vm.USERNAME ? vm.USERNAME : getUserName(vm.UID),
- vm.NAME,
- state,
- vm.CPU,
- humanize_size(vm.MEMORY),
- vm.HISTORY ? vm.HISTORY.HOSTNAME : "--",
- str_start_time(vm)
- ]
-}
-
-//Adds a listener to show the extended info when clicking on a row
-function vMachineInfoListener(){
-
- $('#tbodyvmachines tr').live("click", function(e){
- if ($(e.target).is('input')) {return true;}
- aData = dataTable_vMachines.fnGetData(this);
- id = $(aData[0]).val();
- OpenNebula.VM.show({data: {id:id},success: updateVMInfo,error: onError});
- return false;
- });
-}
-
-function vNetworkElementArray(vn_json){
- network = vn_json.VNET;
- if (network.TOTAL_LEASES){
- total_leases = network.TOTAL_LEASES;
- }else if (network.LEASES && network.LEASES.LEASE){
- total_leases = network.LEASES.LEASE.length ? network.LEASES.LEASE.length : "1";
- } else{
- total_leases = "0";
- }
- username = network.USERNAME? network.USERNAME : getUserName(network.UID)
- return ['',
- network.ID,
- username,
- network.NAME,
- parseInt(network.TYPE) ? "FIXED" : "RANGED",
- network.BRIDGE,
- parseInt(network.PUBLIC) ? "yes" : "no",
- total_leases ];
-}
-//Adds a listener to show the extended info when clicking on a row
-function vNetworkInfoListener(){
-
- $('#tbodyvnetworks tr').live("click", function(e){
- if ($(e.target).is('input')) {return true;}
- aData = dataTable_vNetworks.fnGetData(this);
- id = $(aData[0]).val();
- OpenNebula.Network.show({data:{id: id},success: updateVNetworkInfo,error: onError});
- return false;
- });
-}
-
-function userElementArray(user_json){
- user = user_json.USER;
- if (!user.NAME || user.NAME == {}){
- name = "";
- } else {
- name = user.NAME;
- }
-
- return [
- '',
- user.ID,
- name
- ]
-}
-
-function imageElementArray(image_json){
- image = image_json.IMAGE;
- return [
- '',
- image.ID,
- image.USERNAME ? image.USERNAME : getUserName(image.ID),
- image.NAME,
- OpenNebula.Helper.image_type(image.TYPE),
- pretty_time(image.REGTIME),
- parseInt(image.PUBLIC) ? "yes" : "no",
- parseInt(image.PERSISTENT) ? "yes" : "no",
- OpenNebula.Helper.resource_state("image",image.STATE),
- image.RUNNING_VMS
- ];
-}
-
-function imageInfoListener(target){
-
- $('#tbodyimages tr').live("click",function(e){
- if ($(e.target).is('input')) {return true;}
- aData = dataTable_images.fnGetData(this);
- id = $(aData[0]).val();
- OpenNebula.Image.show({data: {id: id},success: updateImageInfo,error: onError});
- return false;
- });
-}
-
-function updateHostSelect(host_list){
-
- //update select helper
- hosts_select="";
- hosts_select += "";
- $.each(host_list, function(){
- hosts_select += "";
- });
-
- //update static selectors
- $('#vm_host').html(hosts_select);
-}
-
-function updateClusterSelect(cluster_list){
-
- //update select helper
- clusters_select= "";
- clusters_select+="";
- $.each(cluster_list, function(){
- clusters_select += "";
- });
-
- //update static selectors
- //$('#host_cluster').html(clusters_select);
-
-}
-
-function updateNetworkSelect(network_list){
- //update select helper
- vnetworks_select="";
- vnetworks_select += "";
- $.each(network_list, function(){
- vnetworks_select += "";
-
- });
-
- //update static selectors
- $('div.vm_section#networks select#NETWORK').html(vnetworks_select);
-}
-
-function updateImageSelect(image_list){
- images_select="";
- images_select += "";
- $.each(image_list, function(){
- if ((this.IMAGE.STATE < 3) && (this.IMAGE.STATE > 0)){
- images_select += '';
- }
- });
-
- //update static selectors
- $('div.vm_section#disks select#IMAGE').html(images_select);
-}
-
-
-// New layout
-//~ function tabSelect(event,ui){
- //~ // ui.tab // anchor element of the selected (clicked) tab
- //~ // ui.panel // element, that contains the selected/clicked tab contents
- //~ // ui.index // zero-based index of the selected (clicked) tab
- //~ switch(ui.index)
- //~ {
- //~ case 0:
- //~ emptyDashboard();
- //~ preloadTables();
- //~ break;
- //~ case 1: // Hosts
- //~ OpenNebula.Host.list(updateHostsView,onError);
- //~ break;
- //~ case 2: // Clusters
- //~ OpenNebula.Cluster.list(updateClustersView,onError);
- //~ break;
- //~ case 3: //VMs
- //~ OpenNebula.VM.list(updateVMachinesView,onError);
- //~ break;
- //~ case 4: //VNs
- //~ OpenNebula.Network.list(updateVNetworksView,onError);
- //~ break;
- //~ case 5: //Users
- //~ OpenNebula.User.list(updateUsersView,onError);
- //~ break;
- //~ }
-//~ }
-
-//puts the dashboard values into "retrieving"
-function emptyDashboard(){
- $("#dashboard .value_td span").html(spinner);
-}
-
-function updateDashboard(what,json_info){
- db = $('#dashboard');
- switch (what){
- case "hosts":
- total_hosts=json_info.length;
- active_hosts=0;
- $.each(json_info,function(){
- if (parseInt(this.HOST.STATE) < 3){
- active_hosts++;}
- });
- $('#total_hosts',db).html(total_hosts);
- $('#active_hosts',db).html(active_hosts);
- break;
- case "clusters":
- total_clusters=json_info.length;
- $('#total_clusters',db).html(total_clusters);
- break;
- case "vms":
- total_vms=json_info.length;
- running_vms=0;
- failed_vms=0;
- $.each(json_info,function(){
- vm_state = parseInt(this.VM.STATE);
- if (vm_state == 3){
- running_vms++;
- }
- else if (vm_state == 7) {
- failed_vms++;
- }
- });
- $('#total_vms',db).html(total_vms);
- $('#running_vms',db).html(running_vms);
- $('#failed_vms',db).html(failed_vms);
- break;
- case "vnets":
- public_vnets=0;
- total_vnets=json_info.length;
- $.each(json_info,function(){
- if (parseInt(this.VNET.PUBLIC)){
- public_vnets++;}
- });
- $('#total_vnets',db).html(total_vnets);
- $('#public_vnets',db).html(public_vnets);
- break;
- case "users":
- total_users=json_info.length;
- $('#total_users',db).html(total_users);
- break;
- case "images":
- total_images=json_info.length;
- public_images=0;
- $.each(json_info,function(){
- if (parseInt(this.IMAGE.PUBLIC)){
- public_images++;}
- });
- $('#total_images',db).html(total_images);
- $('#public_images',db).html(public_images);
- break;
- }
-}
-
-/*######################################################################
- * UPDATE VIEWS - CALLBACKS
- * ##################################################################*/
-function onError(request,error_json) {
- var method;
- var action;
- var object;
- var id;
- var reason;
- var m;
- var message = error_json.error.message;
-
- //redirect to login if unauthenticated
- if (error_json.error.http_status=="401") {
- window.location.href = "/login";
- };
-
- //Parse known errors:
- var action_error = /^\[(\w+)\] Error trying to (\w+) (\w+) \[(\w+)\].*Reason: (.*)\.$/;
- var action_error_noid = /^\[(\w+)\] Error trying to (\w+) (\w+) (.*)\.$/;
- var get_error = /^\[(\w+)\] Error getting (\w+) \[(\w+)\]\.$/;
- var auth_error = /^\[(\w+)\] User \[.\] not authorized to perform (\w+) on (\w+) \[?(\w+)\]?\.?$/;
-
- if (m = message.match(action_error)) {
- method = m[1];
- action = m[2];
- object = m[3];
- id = m[4];
- reason = m[5];
- } else if (m = message.match(action_error_noid)) {
- method = m[1];
- action = m[2];
- object = m[3];
- reason = m[4];
- } else if (m = message.match(get_error)) {
- method = m[1];
- action = "SHOW";
- object = m[2];
- id = m[3];
- } else if (m = message.match(auth_error)) {
- method = m[1];
- action = m[2];
- object = m[3];
- id = m[4];
- }
-
- if (m) {
- var rows;
- var i;
- var value;
- rows = ["method","action","object","id","reason"];
- message = "";
- for (i in rows){
- key = rows[i];
- value = eval(key);
- if (value)
- message += "
"+key+"
"+value+"
";
- }
- message = "
" + message + "
";
- }
-
- notifyError(message);
- return true;
-}
-
-/* All the following functions follow a similar function:
- * 'update*View' functions clear and fully repopulate the tables.
- * 'update*Element' functions find and update a single element with new
- * info.
- * 'delete*Element' functions find and remove an element from the list.
- * 'add*Element' functions add a new element to the list.
- * */
-
-function updateHostElement(request, host_json){
- id = host_json.HOST.ID;
- element = hostElementArray(host_json);
- updateSingleElement(element,dataTable_hosts,'#host_'+id);
-}
-
-function deleteHostElement(req){
- deleteElement(dataTable_hosts,'#host_'+req.request.data);
-}
-
-function addHostElement(request,host_json){
- id = host_json.HOST.ID;
- element = hostElementArray(host_json);
- addElement(element,dataTable_hosts);
-}
-
-function updateHostsView (request,host_list){
- host_list_json = host_list;
- host_list_array = []
-
- $.each(host_list,function(){
- //Grab table data from the host_list
- host_list_array.push(hostElementArray(this));
- });
-
- updateView(host_list_array,dataTable_hosts);
- updateHostSelect(host_list);
- updateDashboard("hosts");
-}
-
-
-//~ function updateClusterElement(request, cluster_json){
- //~ id = cluster_json.CLUSTER.ID;
- //~ element = clusterElementArray(cluster_json);
- //~ updateSingleElement(element,dataTable_clusters,'#cluster_'+id)
-//~ }
-//~
-//~ function deleteClusterElement(req){
- //~ deleteElement(dataTable_clusters,'#cluster_'+req.request.data);
-//~ }
-//~
-//~ function addClusterElement(request,cluster_json){
- //~ element = clusterElementArray(cluster_json);
- //~ addElement(element,dataTable_clusters);
-//~ }
-
-function updateClustersView(request, cluster_list){
- cluster_list_json = cluster_list;
- //~ cluster_list_array = [];
-
- //~ $.each(cluster_list, function(){
- //~ cluster_list_array.push(clusterElementArray(this));
- //~ });
- //~ updateView(cluster_list_array,dataTable_clusters);
- updateClusterSelect(cluster_list);
- updateDashboard("clusters");
-}
-
-
-function updateVMachineElement(request, vm_json){
- id = vm_json.VM.ID;
- element = vMachineElementArray(vm_json);
- updateSingleElement(element,dataTable_vMachines,'#vm_'+id)
-}
-
-function deleteVMachineElement(req){
- deleteElement(dataTable_vMachines,'#vm_'+req.request.data);
-}
-
-function addVMachineElement(request,vm_json){
- id = vm_json.VM.ID;
- notifySubmit('OpenNebula.VM.create',id);
- element = vMachineElementArray(vm_json);
- addElement(element,dataTable_vMachines);
- updateVMInfo(null,vm_json);
-}
-
-function updateVMachinesView(request, vmachine_list){
- vmachine_list_json = vmachine_list;
- vmachine_list_array = [];
-
- $.each(vmachine_list,function(){
- vmachine_list_array.push( vMachineElementArray(this));
- });
-
- updateView(vmachine_list_array,dataTable_vMachines);
- updateDashboard("vms");
-}
-
-
-function updateVNetworkElement(request, vn_json){
- id = vn_json.VNET.ID;
- element = vNetworkElementArray(vn_json);
- updateSingleElement(element,dataTable_vNetworks,'#vnetwork_'+id);
-}
-
-function deleteVNetworkElement(req){
- deleteElement(dataTable_vNetworks,'#vnetwork_'+req.request.data);
- //How to delete vNetwork select option here?
-}
-
-function addVNetworkElement(request,vn_json){
- element = vNetworkElementArray(vn_json);
- addElement(element,dataTable_vNetworks);
- vnetworks_select += "";
- $('div.vm_section#networks select#NETWORK').html(vnetworks_select);
-}
-
-function updateVNetworksView(request, network_list){
- network_list_json = network_list;
- network_list_array = [];
-
- $.each(network_list,function(){
- network_list_array.push(vNetworkElementArray(this));
- });
-
- updateView(network_list_array,dataTable_vNetworks);
- updateNetworkSelect(network_list);
- updateDashboard("vnets");
-
-}
-
-function updateUserElement(request, user_json){
- id = user_json.USER.ID;
- element = userElementArray(user_json);
- updateSingleElement(element,dataTable_users,'#user_'+id);
-}
-
-function deleteUserElement(req){
- deleteElement(dataTable_users,'#user_'+req.request.data);
-}
-
-function addUserElement(request,user_json){
- element = userElementArray(user_json);
- addElement(element,dataTable_users);
-}
-
-function updateUsersView(request,users_list){
- user_list_json = users_list;
- user_list_array = [];
-
- $.each(user_list_json,function(){
- user_list_array.push(userElementArray(this));
- });
- updateView(user_list_array,dataTable_users);
- updateDashboard("users");
-}
-
-
-function updateImageElement(request, image_json){
- id = image_json.IMAGE.ID;
- element = imageElementArray(image_json);
- updateSingleElement(element,dataTable_images,'#image_'+id);
- if ((image_json.IMAGE.STATE < 3) &&
- (image_json.IMAGE.STATE > 0) &&
- ($('#img_sel_'+id,images_select).length == 0)){
- images_select += '';
- }
- else {
- tag = 'option#img_sel_'+id;
- select = $('');
- $(tag,select).remove();
- images_select = $(select).html();
- }
- $('div.vm_section#disks select#IMAGE').html(images_select);
-}
-
-function deleteImageElement(req){
- deleteElement(dataTable_images,'#image_'+req.request.data);
- tag = 'option#img_sel_'+req.request.data;
- select = $('');
- $(tag,select).remove();
- images_select = $(select).html();
- $('div.vm_section#disks select#IMAGE').html(images_select);
-}
-
-function addImageElement(request, image_json){
- element = imageElementArray(image_json);
- addElement(element,dataTable_images);
-}
-
-function updateImagesView(request, images_list){
- image_list_json = images_list;
- image_list_array = [];
- $.each(image_list_json,function(){
- image_list_array.push(imageElementArray(this));
- });
-
- updateView(image_list_array,dataTable_images);
- updateImageSelect(images_list);
- updateDashboard("images");
-
-
-}
-
-
-/*######################################################################
- * UPDATE INFO DIALOGS FUNCTIONS - CALLBACKS
- * ###################################################################*/
-//All functions in this section are callbacks for the "show"
-//action. They receive the element JSON, format it and add it to the
-//shown dialog.
-
-
-function updateHostInfo(request,host){
- host_info = host.HOST
- rendered_info =
-'
';
- popDialog(rendered_info);
- $('#image_informations').tabs();
-}
-
-// Auxiliary functions
-function pad(number,length) {
- var str = '' + number;
- while (str.length < length)
- str = '0' + str;
- return str;
-}
-
-function pretty_time(time_seconds)
-{
- var d = new Date();
- d.setTime(time_seconds*1000);
-
- var secs = pad(d.getSeconds(),2);
- var hour = pad(d.getHours(),2);
- var mins = pad(d.getMinutes(),2);
- var day = pad(d.getDate(),2);
- var month = pad(d.getMonth(),2);
- var year = d.getFullYear();
-
- return hour + ":" + mins +":" + secs + " " + month + "/" + day + "/" + year;
-}
-
-function humanize_size(value) {
- if (typeof(value) === "undefined") {
- value = 0;
- }
- var binarySufix = ["K", "M", "G", "T" ];
- var i=0;
- while (value > 1024 && i < 3){
- value = value / 1024;
- i++;
- }
- value = Math.round(value * 10) / 10;
-
- if (value - Math.round(value) == 0) {
- value = Math.round(value);
- }
-
- var st = value + binarySufix[i];
- return st;
-}
diff --git a/src/sunstone/public/js/one-ui_views.templates.js b/src/sunstone/public/js/one-ui_views.templates.js
deleted file mode 100644
index 6a3a83873d..0000000000
--- a/src/sunstone/public/js/one-ui_views.templates.js
+++ /dev/null
@@ -1,1099 +0,0 @@
-/* -------------------------------------------------------------------------- */
-/* Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) */
-/* */
-/* 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. */
-/* -------------------------------------------------------------------------- */
-
-var dashboard_tmpl =
-'