mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-19 06:50:07 +03:00
feature #3748: refactor provision vms
This commit is contained in:
parent
9a88b7f992
commit
2476b91f16
File diff suppressed because it is too large
Load Diff
@ -1,31 +1,35 @@
|
||||
<div style=" padding: 15px 0px 10px 0px; margin-bottom: 10px">
|
||||
<div class="row">
|
||||
<div class="large-10 large-centered columns">
|
||||
<div class="large-12 columns">
|
||||
<a href="#" class="provision_image_header" >
|
||||
<img src="{{logo}}" style="height:40px; vertical-align:top"></a>
|
||||
<img src="{{logo}}" style="height:40px; vertical-align:top;"></a>
|
||||
<br>
|
||||
<br>
|
||||
<ul class="inline-list text-center" style="font-size:13px; padding-bottom: 10px; border-bottom: 1px solid #efefef;">
|
||||
<ul class="inline-list provision-header text-center">
|
||||
{{#isTabPanelEnabled "provision-tab" "users"}}
|
||||
<li>
|
||||
<a href"#" class="medium off-color" id="provision_vdc_info_button"> <i class="fa fa-fw fa-2x fa-bar-chart-o"/>{{tr "Group Info"}}
|
||||
<a href"#" class="medium off-color" id="provision_vdc_info_button">
|
||||
<i class="fa fa-fw fa-lg fa-bar-chart-o"/>
|
||||
{{tr "Group Info"}}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href"#" class="medium off-color provision_users_list_button" id=""> <i class="fa fa-fw fa-2x fa-users"/>{{tr "Users"}}
|
||||
<a href"#" class="medium off-color provision_users_list_button" id="">
|
||||
<i class="fa fa-fw fa-lg fa-users"/>
|
||||
{{tr "Users"}}
|
||||
</a>
|
||||
</li>
|
||||
{{/isTabPanelEnabled}}
|
||||
<li>
|
||||
<a href"#" class="medium off-color provision_vms_list_button" id="">
|
||||
<i class="fa fa-fw fa-2x fa-th"/>
|
||||
<i class="fa fa-fw fa-lg fa-th"/>
|
||||
{{tr "VMs"}}
|
||||
</a>
|
||||
</li>
|
||||
{{#isTabPanelEnabled "provision-tab" "templates"}}
|
||||
<li>
|
||||
<a href"#" class="medium off-color provision_templates_list_button">
|
||||
<i class="fa fa-fw fa-2x fa-save"/>
|
||||
<i class="fa fa-fw fa-lg fa-save"/>
|
||||
{{tr "Templates"}}
|
||||
</a>
|
||||
</li>
|
||||
@ -33,7 +37,7 @@
|
||||
{{#isTabPanelEnabled "provision-tab" "flows"}}
|
||||
<li>
|
||||
<a href"#" class="medium off-color provision_flows_list_button" id="">
|
||||
<i class="fa fa-2x fa-fw fa-cubes"/>
|
||||
<i class="fa fa-lg fa-fw fa-cubes"/>
|
||||
{{tr "Services"}}
|
||||
</a>
|
||||
</li>
|
||||
@ -42,13 +46,13 @@
|
||||
<li style="border-left: 1px solid #efefef; height: 40px"></li>
|
||||
<li>
|
||||
<a href"#" class="medium off-color" id="provision_user_info_button">
|
||||
<i class="fa fa-fw fa-2x fa-user"/>
|
||||
<i class="fa fa-fw fa-lg fa-user"/>
|
||||
config[display_name]+
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" data-dropdown="provision_zone_selector" class="button small radius secondary dropdown off-color" id="zonelector" style="padding:0px; font-size: 12px;">
|
||||
<i class="fa fa-home fa-2x header-icon" style="margin-bottom: 2px"/>
|
||||
<i class="fa fa-home fa-lg header-icon" style="margin-bottom: 2px"/>
|
||||
+ config[zone_name] +
|
||||
</a>
|
||||
<ul id="provision_zone_selector" data-dropdown-content class="zone-ul f-dropdown"></ul>
|
||||
|
@ -10,33 +10,33 @@
|
||||
<div class="large-12 large-centered columns">
|
||||
<ul class="inline-list provision_action_icons">
|
||||
<li>
|
||||
<a href"#" data-tooltip title="{{tr "Open a remote console in a new window"}}" class="left button medium radius provision_vnc_button tip-top">
|
||||
<a href"#" data-tooltip title="{{tr "Open a remote console in a new window"}}" class="left button small radius provision_vnc_button tip-top">
|
||||
<i class="fa fa-fw fa-lg fa-desktop"/></a>
|
||||
<a data-tooltip title="{{tr "You have to boot the Virtual Machine first"}}" class="left button medium radius white provision_vnc_button_disabled tip-top" style="color: #999">
|
||||
<a data-tooltip title="{{tr "You have to boot the Virtual Machine first"}}" class="left button small radius white provision_vnc_button_disabled tip-top" style="color: #999">
|
||||
<i class="fa fa-fw fa-lg fa-desktop"/></a>
|
||||
{{#isTabPanelEnabled "provision-tab" "templates"}}
|
||||
<a href"#" data-tooltip title="{{tr "The main disk of the Virtual Machine will be saved in a new Image"}}" class="left button medium radius success provision_snapshot_button tip-top">
|
||||
<a href"#" data-tooltip title="{{tr "The main disk of the Virtual Machine will be saved in a new Image"}}" class="left button small radius success provision_snapshot_button tip-top">
|
||||
<i class="fa fa-fw fa-lg fa-save"/>
|
||||
</a>
|
||||
<a data-tooltip title="{{tr "You have to power-off the virtual machine first"}}" class="left button medium radius white provision_snapshot_button_disabled tip-top" style="color: #999">
|
||||
<a data-tooltip title="{{tr "You have to power-off the virtual machine first"}}" class="left button small radius white provision_snapshot_button_disabled tip-top" style="color: #999">
|
||||
<i class="fa fa-fw fa-lg fa-save"/>
|
||||
</a>
|
||||
{{/isTabPanelEnabled}}
|
||||
</li>
|
||||
<li class="right">
|
||||
<a href"#" data-tooltip title="{{tr "Delete"}}" class="button medium radius alert provision_delete_confirm_button tip-top right">
|
||||
<a href"#" data-tooltip title="{{tr "Delete"}}" class="button small radius alert provision_delete_confirm_button tip-top right">
|
||||
<i class="fa fa-fw fa-lg fa-trash-o"/>
|
||||
</a>
|
||||
<a href"#" data-tooltip title="{{tr "Delete"}}" class="button medium radius alert provision_shutdownhard_confirm_button tip-top right">
|
||||
<a href"#" data-tooltip title="{{tr "Delete"}}" class="button small radius alert provision_shutdownhard_confirm_button tip-top right">
|
||||
<i class="fa fa-fw fa-lg fa-trash-o"/>
|
||||
</a>
|
||||
<a href"#" data-tooltip title="{{tr "Power off"}}" class="button medium radius secondary provision_poweroff_confirm_button tip-top right">
|
||||
<a href"#" data-tooltip title="{{tr "Power off"}}" class="button small radius secondary provision_poweroff_confirm_button tip-top right">
|
||||
<i class="fa fa-fw fa-lg fa-power-off"/>
|
||||
</a>
|
||||
<a href"#" data-tooltip title="{{tr "Power on"}}" class="button medium radius secondary provision_poweron_button tip-top right">
|
||||
<a href"#" data-tooltip title="{{tr "Power on"}}" class="button small radius secondary provision_poweron_button tip-top right">
|
||||
<i class="fa fa-fw fa-lg fa-play"/>
|
||||
</a>
|
||||
<a href"#" data-tooltip title="{{tr "Reboot"}}" class="button medium radius secondary provision_reboot_confirm_button tip-top right">
|
||||
<a href"#" data-tooltip title="{{tr "Reboot"}}" class="button small radius secondary provision_reboot_confirm_button tip-top right">
|
||||
<i class="fa fa-fw fa-lg fa-repeat"/>
|
||||
</a>
|
||||
</li>
|
||||
@ -44,21 +44,20 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="provision_confirm_action large-10 large-centered columns"></div>
|
||||
<div class="provision_confirm_action large-12 large-centered columns"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="large-4 columns">
|
||||
<ul class="provision-pricing-table_vm_info provision-pricing-table" style="border: 0px !important; background: #fff;"></ul>
|
||||
<div class="large-5 columns">
|
||||
<ul class="provision-pricing-table_vm_info provision-pricing-table" style="border: 0px !important; margin-top: 20px;"></ul>
|
||||
</div>
|
||||
<div class="large-8 columns">
|
||||
<div class="large-6 columns right">
|
||||
<div class="row">
|
||||
<div class="large-6 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h3 class="subheader">
|
||||
<h4 class="subheader" style="margin: 0px">
|
||||
<small>{{tr "CPU"}}</small>
|
||||
</h3>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@ -73,9 +72,9 @@
|
||||
<div class="large-6 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h3 class="subheader">
|
||||
<small>{{tr "MEMORY"}}</small>
|
||||
</h3>
|
||||
<h4 class="subheader" style="margin: 0px">
|
||||
<small>{{tr "Memory"}}</small>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@ -88,77 +87,77 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-12 columns">
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="large-6 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h3 class="subheader">
|
||||
<small>{{tr "NET RX"}}</small>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph vm_net_rx_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row graph_legend">
|
||||
<div class="large-12 columns centered vm_net_rx_legend"></div>
|
||||
<div class="large-3 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h4 class="subheader" style="margin: 0px">
|
||||
<small>{{tr "Net RX"}}</small>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-6 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h3 class="subheader">
|
||||
<small>{{tr "NET TX"}}</small>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph vm_net_tx_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row graph_legend">
|
||||
<div class="large-12 columns centered vm_net_tx_legend"></div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph vm_net_rx_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row graph_legend">
|
||||
<div class="large-12 columns centered vm_net_rx_legend"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-6 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h3 class="subheader">
|
||||
<small>{{tr "NET DOWNLOAD SPEED"}}</small>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph vm_net_rx_speed_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row graph_legend">
|
||||
<div class="large-12 columns centered vm_net_rx_speed_legend"></div>
|
||||
<div class="large-3 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h4 class="subheader" style="margin: 0px">
|
||||
<small>{{tr "Net TX"}}</small>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-6 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h3 class="subheader">
|
||||
<small>{{tr "NET UPLOAD SPEED"}}</small>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph vm_net_tx_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph vm_net_tx_speed_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row graph_legend">
|
||||
<div class="large-12 columns centered vm_net_tx_legend"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-3 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h4 class="subheader" style="margin: 0px">
|
||||
<small>{{tr "Net Download Speed"}}</small>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="row graph_legend">
|
||||
<div class="large-12 columns centered vm_net_tx_speed_legend"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph vm_net_rx_speed_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row graph_legend">
|
||||
<div class="large-12 columns centered vm_net_rx_speed_legend"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-3 medium-6 columns">
|
||||
<div class="row text-center">
|
||||
<div class="large-12 columns">
|
||||
<h4 class="subheader" style="margin: 0px">
|
||||
<small>{{tr "Net Upload Speed"}}</small>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph vm_net_tx_speed_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row graph_legend">
|
||||
<div class="large-12 columns centered vm_net_tx_speed_legend"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,31 +1,33 @@
|
||||
<dl class="accordion accordion_list provision_list_vms" data-accordion>
|
||||
<dd class="{{#if opts.active}}active{{/if}} accordion-navigation">
|
||||
<a href="#provision_list_vm_accordion{{accordionId}}" class="provision_back right only-not-active">
|
||||
<span class="button medium radius"> <i class="fa fa-fw fa-lg fa-th"/><i class="fa fa-fw fa-lg fa-chevron-left"/>
|
||||
<span class="button small radius"> <i class="fa fa-fw fa-lg fa-th"/><i class="fa fa-fw fa-lg fa-chevron-left"/>
|
||||
</span>
|
||||
</a>
|
||||
<h2 class="subheader">
|
||||
{{opts.title}}
|
||||
<span class="provision_info_vm_name only-not-active" style="margin-left: 20px; color: #777; font-size: 20px"></span>
|
||||
<span href"#" class="right only-active button medium radius secondary provision_vms_list_refresh_button"
|
||||
{{#if opts.refresh}}style="display:none"{{/if}} data-tooltip title=" {{tr "Refresh"}}">
|
||||
<h3 class="subheader">
|
||||
<span style="color: #777">
|
||||
{{!opts.title}}
|
||||
</span>
|
||||
<span class="provision_info_vm_name only-not-active"></span>
|
||||
<span href"#" class="right only-active button small radius secondary provision_vms_list_refresh_button"
|
||||
{{#unless opts.refresh}}style="display:none"{{/unless}} data-tooltip title=" {{tr "Refresh"}}">
|
||||
<i class="fa fa-fw fa-lg fa-refresh"/></span>
|
||||
<span href"#" class="right only-not-active button medium radius secondary provision_refresh_info"
|
||||
{{#if opts.refresh}}style="display:none"{{/if}} data-tooltip title=" {{tr "Refresh"}}">
|
||||
<span href"#" class="right only-not-active button small radius secondary provision_refresh_info"
|
||||
{{#unless opts.refresh}}style="display:none"{{/unless}} data-tooltip title=" {{tr "Refresh"}}">
|
||||
<i class="fa fa-fw fa-lg fa-refresh"/>
|
||||
</span>
|
||||
<span href"#" class="right only-active button medium radius secondary provision_vms_list_filter_button"
|
||||
{{#if opts.filter}}style="display:none"{{/if}} data-tooltip title=" {{tr "Filter by User"}}">
|
||||
<span href"#" class="right only-active button small radius secondary provision_vms_list_filter_button"
|
||||
{{#unless opts.filter}}style="display:none"{{/unless}} data-tooltip title=" {{tr "Filter by User"}}">
|
||||
<i class="fa fa-fw fa-lg fa-filter"/>
|
||||
</span>
|
||||
<span class="right only-active provision_list_vms_filter" style="display: none"></span>
|
||||
<span>
|
||||
<input type="search" class="right only-active provision_list_vms_search provision-search-input right" placeholder="Search"/>
|
||||
<span href"#" class="right only-active button medium radius success provision_create_vm_button"
|
||||
{{#if opts.create}}style="display:none"{{/if}}>
|
||||
<span href"#" class="right only-active button small radius success provision_create_vm_button"
|
||||
{{#unless opts.create}}style="display:none"{{/unless}}>
|
||||
<i class="fa fa-fw fa-lg fa-plus-square"/>
|
||||
</span>
|
||||
</h2>
|
||||
<input type="search" class="only-active provision_list_vms_search provision-search-input " placeholder="Search VMs"/>
|
||||
</h3>
|
||||
<div id="provision_list_vm_accordion{{accordionId}}" class="content {{#if opts.active}}active{{/if}}">
|
||||
<div class="row">
|
||||
<div class="large-12 large-centered columns">
|
||||
|
961
src/sunstone/public/app/tabs/provision-tab/vms/list.js
Normal file
961
src/sunstone/public/app/tabs/provision-tab/vms/list.js
Normal file
@ -0,0 +1,961 @@
|
||||
define(function(require) {
|
||||
var OpenNebula = require('opennebula');
|
||||
var Locale = require('utils/locale');
|
||||
var Config = require('sunstone-config');
|
||||
var Notifier = require('utils/notifier');
|
||||
var Humanize = require('utils/humanize');
|
||||
var ResourceSelect = require('utils/resource-select');
|
||||
var Graphs = require('utils/graphs');
|
||||
|
||||
var TemplateVmsList = require('hbs!./list');
|
||||
|
||||
var _accordionId = 0;
|
||||
|
||||
return {
|
||||
'generate': generate_provision_vms_list,
|
||||
'show': show_provision_vm_list,
|
||||
'state': get_provision_vm_state
|
||||
};
|
||||
|
||||
function show_provision_vm_list(timeout, context) {
|
||||
$(".section_content").hide();
|
||||
$(".provision_vms_list_section").fadeIn();
|
||||
|
||||
$("dd:not(.active) .provision_back", $(".provision_vms_list_section")).trigger("click");
|
||||
$(".provision_vms_list_refresh_button", $(".provision_vms_list_section")).trigger("click");
|
||||
}
|
||||
|
||||
function generate_provision_vms_list(context, opts) {
|
||||
context.off();
|
||||
context.html(html(opts));
|
||||
|
||||
if (opts.data) {
|
||||
$(".provision_vms_table", context).data("opennebula", opts.data)
|
||||
}
|
||||
|
||||
setup_provision_vms_list(context, opts);
|
||||
setup_info_vm(context);
|
||||
}
|
||||
|
||||
function html(opts_arg) {
|
||||
opts = $.extend({
|
||||
title: Locale.tr("Virtual Machines"),
|
||||
refresh: true,
|
||||
create: true,
|
||||
filter: true
|
||||
}, opts_arg)
|
||||
|
||||
_accordionId += 1;
|
||||
return TemplateVmsList({'accordionId': _accordionId, 'opts': opts});
|
||||
}
|
||||
|
||||
function fill_provision_vms_datatable(datatable, item_list) {
|
||||
datatable.fnClearTable(true);
|
||||
if (item_list.length == 0) {
|
||||
datatable.html('<div class="text-center">' +
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">' +
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>' +
|
||||
'<i class="fa fa-info-circle fa-stack-1x fa-inverse"></i>' +
|
||||
'</span>' +
|
||||
'<br>' +
|
||||
'<br>' +
|
||||
'<span style="font-size: 18px; color: #999">' +
|
||||
Locale.tr("There are no Virtual Machines") +
|
||||
'</span>' +
|
||||
'<br>' +
|
||||
'<br>' +
|
||||
'</div>');
|
||||
} else {
|
||||
datatable.fnAddData(item_list);
|
||||
}
|
||||
}
|
||||
|
||||
function update_provision_vms_datatable(datatable, timeout) {
|
||||
datatable.html('<div class="text-center">' +
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">' +
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>' +
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>' +
|
||||
'</span>' +
|
||||
'<br>' +
|
||||
'<br>' +
|
||||
'<span style="font-size: 18px; color: #999">' +
|
||||
'</span>' +
|
||||
'</div>');
|
||||
|
||||
var data = datatable.data('opennebula');
|
||||
if (data) {
|
||||
fill_provision_vms_datatable(datatable, data)
|
||||
} else {
|
||||
setTimeout(function() {
|
||||
OpenNebula.VM.list({
|
||||
timeout: true,
|
||||
success: function (request, item_list) {
|
||||
fill_provision_vms_datatable(datatable, item_list)
|
||||
},
|
||||
error: Notifier.onError
|
||||
})
|
||||
}, timeout);
|
||||
}
|
||||
}
|
||||
|
||||
function setup_provision_vms_list(context, opts) {
|
||||
var provision_vms_datatable = $('.provision_vms_table', context).dataTable({
|
||||
"iDisplayLength": 6,
|
||||
"sDom" : '<"H">t<"F"lp>',
|
||||
"aLengthMenu": [[6, 12, 36, 72], [6, 12, 36, 72]],
|
||||
"aaSorting" : [[0, "desc"]],
|
||||
"aoColumnDefs": [
|
||||
{ "bVisible": false, "aTargets": ["all"]}
|
||||
],
|
||||
"aoColumns": [
|
||||
{ "mDataProp": "VM.ID" },
|
||||
{ "mDataProp": "VM.NAME" },
|
||||
{ "mDataProp": "VM.UID" }
|
||||
],
|
||||
"fnPreDrawCallback": function (oSettings) {
|
||||
// create a thumbs container if it doesn't exist. put it in the dataTables_scrollbody div
|
||||
if (this.$('tr', {"filter": "applied"} ).length == 0) {
|
||||
this.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-info-circle fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
Locale.tr("There are no Virtual Machines")+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
} else {
|
||||
$(".provision_vms_table", context).html('<ul class="provision_vms_ul large-block-grid-3 medium-block-grid-3 small-block-grid-1 text-center"></ul>');
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
"fnDrawCallback": function (oSettings) {
|
||||
$(".provision_vms_ul", context).foundation('reflow', 'tooltip');
|
||||
|
||||
return true;
|
||||
},
|
||||
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
|
||||
var data = aData.VM;
|
||||
var state = get_provision_vm_state(data);
|
||||
|
||||
$(".provision_vms_ul", context).append('<li>'+
|
||||
'<ul class="provision-pricing-table" opennebula_id="'+data.ID+'" datatable_index="'+iDisplayIndexFull+'">'+
|
||||
'<li class="provision-title text-left">'+
|
||||
'<a class="provision_info_vm_button" style="color:#555" href="#">'+
|
||||
'<span class="'+ state.color +'-color" data-tooltip title="'+state.str+'">'+
|
||||
'<i class="fa fa-fw fa-square"/> '+
|
||||
'</span>'+
|
||||
data.NAME + '</a>'+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left" >'+
|
||||
'<i class="fa fa-fw fa-lg fa-laptop"/> '+
|
||||
'x'+data.TEMPLATE.CPU+' - '+
|
||||
((data.TEMPLATE.MEMORY > 1000) ?
|
||||
(Math.floor(data.TEMPLATE.MEMORY/1024)+'GB') :
|
||||
(data.TEMPLATE.MEMORY+'MB'))+
|
||||
' - '+
|
||||
get_provision_disk_image(data) +
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left" >'+
|
||||
'<span class="">'+
|
||||
get_provision_ips(data) +
|
||||
'</span>'+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item-last text-left" >'+
|
||||
'<span class="">'+
|
||||
'<i class="fa fa-fw fa-lg fa-user"/> '+
|
||||
data.UNAME+
|
||||
'</span>'+
|
||||
'<span class="right">'+
|
||||
Humanize.prettyTimeAgo(data.STIME)+
|
||||
'</span>'+
|
||||
'</li>'+
|
||||
'</ul>'+
|
||||
'</li>');
|
||||
|
||||
return nRow;
|
||||
}
|
||||
});
|
||||
|
||||
$('.provision_list_vms_search', context).keyup(function(){
|
||||
provision_vms_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
$('.provision_list_vms_search', context).change(function(){
|
||||
provision_vms_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
context.on("click", ".provision_vms_list_refresh_button", function(){
|
||||
OpenNebula.Action.clear_cache("VM");
|
||||
update_provision_vms_datatable(provision_vms_datatable, 0);
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".provision_list_vms_filter", context).on("change", ".resource_list_select", function(){
|
||||
if ($(this).val() != "-2"){
|
||||
provision_vms_datatable.fnFilter("^" + $(this).val() + "$", 2, true, false);
|
||||
} else {
|
||||
provision_vms_datatable.fnFilter("", 2);
|
||||
}
|
||||
})
|
||||
|
||||
ResourceSelect.insert(
|
||||
".provision_list_vms_filter",
|
||||
context,
|
||||
"User",
|
||||
(opts.filter_expression ? opts.filter_expression : "-2"),
|
||||
false,
|
||||
'<option value="-2">'+Locale.tr("ALL")+'</option>',
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true);
|
||||
|
||||
context.on("click", ".provision_vms_list_filter_button", function(){
|
||||
$(".provision_list_vms_filter", context).fadeIn();
|
||||
return false;
|
||||
});
|
||||
|
||||
OpenNebula.Action.clear_cache("VM");
|
||||
update_provision_vms_datatable(provision_vms_datatable, 0);
|
||||
|
||||
$(document).foundation();
|
||||
}
|
||||
|
||||
function setup_info_vm(context) {
|
||||
function update_provision_vm_info(vm_id, context) {
|
||||
//var tempScrollTop = $(window).scrollTop();
|
||||
$(".provision_info_vm_name", context).text("");
|
||||
$(".provision_info_vm_loading", context).show();
|
||||
$(".provision_info_vm", context).css('visibility', 'hidden');
|
||||
|
||||
OpenNebula.VM.show({
|
||||
data : {
|
||||
id: vm_id
|
||||
},
|
||||
error: Notifier.onError,
|
||||
success: function(request, response){
|
||||
var data = response.VM
|
||||
var state = get_provision_vm_state(data);
|
||||
|
||||
switch (state.color) {
|
||||
case "deploying":
|
||||
$(".provision_reboot_confirm_button", context).hide();
|
||||
$(".provision_poweroff_confirm_button", context).hide();
|
||||
$(".provision_poweron_button", context).hide();
|
||||
$(".provision_delete_confirm_button", context).show();
|
||||
$(".provision_shutdownhard_confirm_button", context).hide();
|
||||
$(".provision_snapshot_button", context).hide();
|
||||
$(".provision_vnc_button", context).hide();
|
||||
$(".provision_snapshot_button_disabled", context).hide();
|
||||
$(".provision_vnc_button_disabled", context).hide();
|
||||
break;
|
||||
case "running":
|
||||
$(".provision_reboot_confirm_button", context).show();
|
||||
$(".provision_poweroff_confirm_button", context).show();
|
||||
$(".provision_poweron_button", context).hide();
|
||||
$(".provision_delete_confirm_button", context).hide();
|
||||
$(".provision_shutdownhard_confirm_button", context).show();
|
||||
$(".provision_snapshot_button", context).hide();
|
||||
$(".provision_vnc_button", context).show();
|
||||
$(".provision_snapshot_button_disabled", context).show();
|
||||
$(".provision_vnc_button_disabled", context).hide();
|
||||
break;
|
||||
case "off":
|
||||
$(".provision_reboot_confirm_button", context).hide();
|
||||
$(".provision_poweroff_confirm_button", context).hide();
|
||||
$(".provision_poweron_button", context).show();
|
||||
$(".provision_delete_confirm_button", context).show();
|
||||
$(".provision_shutdownhard_confirm_button", context).hide();
|
||||
$(".provision_snapshot_button", context).show();
|
||||
$(".provision_vnc_button", context).hide();
|
||||
$(".provision_snapshot_button_disabled", context).hide();
|
||||
$(".provision_vnc_button_disabled", context).show();
|
||||
break;
|
||||
case "powering_off":
|
||||
case "error":
|
||||
$(".provision_reboot_confirm_button", context).hide();
|
||||
$(".provision_poweroff_confirm_button", context).hide();
|
||||
$(".provision_poweron_button", context).hide();
|
||||
$(".provision_delete_confirm_button", context).show();
|
||||
$(".provision_shutdownhard_confirm_button", context).hide();
|
||||
$(".provision_snapshot_button", context).hide();
|
||||
$(".provision_vnc_button", context).hide();
|
||||
$(".provision_snapshot_button_disabled", context).hide();
|
||||
$(".provision_vnc_button_disabled", context).hide();
|
||||
break;
|
||||
default:
|
||||
color = 'secondary';
|
||||
$(".provision_reboot_confirm_button", context).hide();
|
||||
$(".provision_poweroff_confirm_button", context).hide();
|
||||
$(".provision_poweron_button", context).hide();
|
||||
$(".provision_delete_confirm_button", context).show();
|
||||
$(".provision_shutdownhard_confirm_button", context).hide();
|
||||
$(".provision_snapshot_button", context).hide();
|
||||
$(".provision_vnc_button", context).hide();
|
||||
$(".provision_snapshot_button_disabled", context).hide();
|
||||
$(".provision_vnc_button_disabled", context).hide();
|
||||
break;
|
||||
}
|
||||
|
||||
if (!OpenNebula.VM.isVNCSupported(data) && !OpenNebula.VM.isSPICESupported(data)) {
|
||||
$(".provision_vnc_button", context).hide();
|
||||
$(".provision_vnc_button_disabled", context).hide();
|
||||
}
|
||||
|
||||
$(".provision_info_vm", context).attr("vm_id", data.ID);
|
||||
$(".provision_info_vm", context).data("vm", data);
|
||||
|
||||
$(".provision_info_vm_name", context).text(data.NAME);
|
||||
|
||||
$(".provision-pricing-table_vm_info", context).html(
|
||||
'<li class="text-left provision-bullet-item">'+
|
||||
'<span class="'+ state.color +'-color">'+
|
||||
'<i class="fa fa-fw fa-lg fa-square"/> '+
|
||||
state.str+
|
||||
'</span>'+
|
||||
'</li>'+
|
||||
'<li class="text-left provision-bullet-item">'+
|
||||
'<hr style="margin: 0px">'+
|
||||
'</li>'+
|
||||
'<li class="text-left provision-bullet-item" >'+
|
||||
'<span>'+
|
||||
'<i class="fa fa-fw fa-lg fa-laptop"/> '+
|
||||
'x'+data.TEMPLATE.CPU+' - '+
|
||||
((data.TEMPLATE.MEMORY > 1000) ?
|
||||
(Math.floor(data.TEMPLATE.MEMORY/1024)+'GB') :
|
||||
(data.TEMPLATE.MEMORY+'MB'))+
|
||||
'</span>'+
|
||||
' - '+
|
||||
'<span>'+
|
||||
get_provision_disk_image(data) +
|
||||
'</span>'+
|
||||
'</li>'+
|
||||
'<li class="text-left provision-bullet-item" >'+
|
||||
'<span>'+
|
||||
get_provision_ips(data) +
|
||||
'</span>'+
|
||||
'</li>'+
|
||||
//'<li class="text-left provision-bullet-item" >'+
|
||||
// '<span style="color: #afafaf;" style="font-size: 16px">'+
|
||||
// "ID: " +
|
||||
// data.ID+
|
||||
// '</span>' +
|
||||
//'</li>'+
|
||||
'<li class="text-left provision-bullet-item">'+
|
||||
'<hr style="margin: 0px">'+
|
||||
'</li>'+
|
||||
'<li class="text-right provision-bullet-item">'+
|
||||
'<span class="left" style="color: #999;">'+
|
||||
'<i class="fa fa-fw fa-lg fa-user"/> '+
|
||||
data.UNAME+
|
||||
'</span>'+
|
||||
'<span class="right" style="color: #999;">'+
|
||||
'<i class="fa fa-fw fa-lg fa-clock-o"/> '+
|
||||
Humanize.prettyTimeAgo(data.STIME)+
|
||||
' - '+
|
||||
'ID: '+
|
||||
data.ID+
|
||||
'</span>'+
|
||||
'</li>');
|
||||
|
||||
$(".provision_confirm_action:first", context).html("");
|
||||
|
||||
$(".provision_info_vm", context).css('visibility', 'visible');
|
||||
$(".provision_info_vm_loading", context).hide();
|
||||
|
||||
//$(window).scrollTop(tempScrollTop);
|
||||
|
||||
OpenNebula.VM.monitor({
|
||||
data : {
|
||||
timeout: true,
|
||||
id: data.ID,
|
||||
monitor: {
|
||||
monitor_resources : "CPU,MEMORY,NET_TX,NET_RX"
|
||||
}
|
||||
},
|
||||
success: function(request, response){
|
||||
var vm_graphs = [
|
||||
{
|
||||
monitor_resources : "CPU",
|
||||
labels : "Real CPU",
|
||||
humanize_figures : false,
|
||||
div_graph : $(".vm_cpu_graph", context)
|
||||
},
|
||||
{
|
||||
monitor_resources : "MEMORY",
|
||||
labels : "Real MEM",
|
||||
humanize_figures : true,
|
||||
div_graph : $(".vm_memory_graph", context)
|
||||
},
|
||||
{
|
||||
labels : "Network reception",
|
||||
monitor_resources : "NET_RX",
|
||||
humanize_figures : true,
|
||||
convert_from_bytes : true,
|
||||
div_graph : $(".vm_net_rx_graph", context)
|
||||
},
|
||||
{
|
||||
labels : "Network transmission",
|
||||
monitor_resources : "NET_TX",
|
||||
humanize_figures : true,
|
||||
convert_from_bytes : true,
|
||||
div_graph : $(".vm_net_tx_graph", context)
|
||||
},
|
||||
{
|
||||
labels : "Network reception speed",
|
||||
monitor_resources : "NET_RX",
|
||||
humanize_figures : true,
|
||||
convert_from_bytes : true,
|
||||
y_sufix : "B/s",
|
||||
derivative : true,
|
||||
div_graph : $(".vm_net_rx_speed_graph", context)
|
||||
},
|
||||
{
|
||||
labels : "Network transmission speed",
|
||||
monitor_resources : "NET_TX",
|
||||
humanize_figures : true,
|
||||
convert_from_bytes : true,
|
||||
y_sufix : "B/s",
|
||||
derivative : true,
|
||||
div_graph : $(".vm_net_tx_speed_graph", context)
|
||||
}
|
||||
];
|
||||
|
||||
for(var i=0; i<vm_graphs.length; i++) {
|
||||
Graphs.plot(
|
||||
response,
|
||||
vm_graphs[i]
|
||||
);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (Config.isTabPanelEnabled("provision-tab", "templates")) {
|
||||
context.on("click", ".provision_snapshot_button", function(){
|
||||
$(".provision_confirm_action:first", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-12 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("This Virtual Machine will be saved in a new Template. Only the main disk will be preserved!")+
|
||||
'<br>'+
|
||||
Locale.tr("You can then create a new Virtual Machine using this Template")+
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-11 large-centered columns">'+
|
||||
'<input type="text" class="provision_snapshot_name" placeholder="'+Locale.tr("Template Name")+'" style="height: 40px !important; font-size: 16px; padding: 0.5rem !important; margin: 0px"/>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-11 large-centered columns">'+
|
||||
'<a href"#" class="provision_snapshot_create_button success button large-12 radius right">'+Locale.tr("Save Virtual Machine to Template")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close" style="top: 20px">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_snapshot_create_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var context = $(".provision_info_vm[vm_id]");
|
||||
|
||||
var vm_id = context.attr("vm_id");
|
||||
var template_name = $('.provision_snapshot_name', context).val();
|
||||
|
||||
OpenNebula.VM.save_as_template({
|
||||
data : {
|
||||
id: vm_id,
|
||||
extra_param: {
|
||||
name : template_name
|
||||
}
|
||||
},
|
||||
success: function(request, response){
|
||||
OpenNebula.Action.clear_cache("VMTEMPLATE");
|
||||
Notifier.notifyMessage(Locale.tr("Image") + ' ' + request.request.data[0][1].name + ' ' + Locale.tr("saved successfully"))
|
||||
update_provision_vm_info(vm_id, context);
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
context.on("click", ".provision_delete_confirm_button", function(){
|
||||
$(".provision_confirm_action:first", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-9 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("Be careful, this action will inmediately destroy your Virtual Machine")+
|
||||
'<br>'+
|
||||
Locale.tr("All the information will be lost!")+
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'<div class="large-3 columns">'+
|
||||
'<a href"#" class="provision_delete_button alert button large-12 radius right" style="margin-right: 15px">'+Locale.tr("Delete")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_shutdownhard_confirm_button", function(){
|
||||
$(".provision_confirm_action:first", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-9 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("Be careful, this action will inmediately destroy your Virtual Machine")+
|
||||
'<br>'+
|
||||
Locale.tr("All the information will be lost!")+
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'<div class="large-3 columns">'+
|
||||
'<a href"#" class="provision_shutdownhard_button alert button large-12 radius right" style="margin-right: 15px">'+Locale.tr("Delete")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close" style="top: 20px">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_poweroff_confirm_button", function(){
|
||||
$(".provision_confirm_action:first", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-11 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("This action will power off this Virtual Machine. The Virtual Machine will remain in the poweroff state, and can be powered on later")+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
Locale.tr("You can send the power off signal to the Virtual Machine (this is equivalent to execute the command from the console). If that doesn't effect your Virtual Machine, try to Power off the machine (this is equivalent to pressing the power off button in a physical computer).")+
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-12 columns">'+
|
||||
'<a href"#" class="provision_poweroff_button button radius right" style="margin-right: 15px">'+Locale.tr("Power off")+'</a>'+
|
||||
'<label class="left" style="margin-left: 25px">'+
|
||||
'<input type="radio" name="provision_poweroff_radio" value="poweroff_hard" class="provision_poweroff_hard_radio">'+
|
||||
' <i class="fa fa-fw fa-bolt"/> '+Locale.tr("Power off the machine")+
|
||||
'</label>'+
|
||||
'<label class="left" style="margin-left: 25px">'+
|
||||
'<input type="radio" name="provision_poweroff_radio" value="poweroff" class="provision_poweroff_radio" checked>'+
|
||||
' <i class="fa fa-fw fa-power-off"/> '+Locale.tr("Send the power off signal")+
|
||||
'</label>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close" style="top: 20px">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_reboot_confirm_button", function(){
|
||||
$(".provision_confirm_action:first", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-11 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("This action will reboot this Virtual Machine.")+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
Locale.tr("You can send the reboot signal to the Virtual Machine (this is equivalent to execute the reboot command form the console). If that doesn't effect your Virtual Machine, try to Reboot the machine (this is equivalent to pressing the reset button a physical computer).")+
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-12 columns">'+
|
||||
'<a href"#" class="provision_reboot_button button radius right" style="margin-right: 15px">'+Locale.tr("Reboot")+'</a>'+
|
||||
'<label class="left" style="margin-left: 25px">'+
|
||||
'<input type="radio" name="provision_reboot_radio" value="reset" class="provision_reboot_hard_radio">'+
|
||||
' <i class="fa fa-fw fa-bolt"/> '+Locale.tr("Reboot the machine")+
|
||||
'</label>'+
|
||||
'<label class="left" style="margin-left: 25px">'+
|
||||
'<input type="radio" name="provision_reboot_radio" value="reboot" class="provision_reboot_radio" checked>'+
|
||||
' <i class="fa fa-fw fa-power-off"/> '+Locale.tr("Send the reboot signal")+
|
||||
'</label>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close" style="top: 20px">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_delete_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var vm_id = $(".provision_info_vm", context).attr("vm_id");
|
||||
|
||||
OpenNebula.VM.del({
|
||||
data : {
|
||||
id: vm_id
|
||||
},
|
||||
success: function(request, response){
|
||||
$(".provision_back", context).click();
|
||||
$(".provision_vms_list_refresh_button", context).click();
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
context.on("click", ".provision_shutdownhard_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var vm_id = $(".provision_info_vm", context).attr("vm_id");
|
||||
|
||||
OpenNebula.VM.cancel({
|
||||
data : {
|
||||
id: vm_id
|
||||
},
|
||||
success: function(request, response){
|
||||
$(".provision_back", context).click();
|
||||
$(".provision_vms_list_refresh_button", context).click();
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
context.on("click", ".provision_poweroff_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var vm_id = $(".provision_info_vm", context).attr("vm_id");
|
||||
var poweroff_action = $('input[name=provision_poweroff_radio]:checked').val()
|
||||
|
||||
OpenNebula.VM[poweroff_action]({
|
||||
data : {
|
||||
id: vm_id
|
||||
},
|
||||
success: function(request, response){
|
||||
update_provision_vm_info(vm_id, context);
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
context.on("click", ".provision_reboot_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
|
||||
var vm_id = $(".provision_info_vm", context).attr("vm_id");
|
||||
var reboot_action = $('input[name=provision_reboot_radio]:checked').val()
|
||||
|
||||
OpenNebula.VM[reboot_action]({
|
||||
data : {
|
||||
id: vm_id
|
||||
},
|
||||
success: function(request, response){
|
||||
update_provision_vm_info(vm_id, context);
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
context.on("click", ".provision_poweron_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var vm_id = $(".provision_info_vm", context).attr("vm_id");
|
||||
|
||||
OpenNebula.VM.resume({
|
||||
data : {
|
||||
id: vm_id
|
||||
},
|
||||
success: function(request, response){
|
||||
update_provision_vm_info(vm_id, context);
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
context.on("click", ".provision_vnc_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var vm_id = $(".provision_info_vm", context).attr("vm_id");
|
||||
var vm_data = $(".provision_info_vm", context).data("vm");
|
||||
|
||||
OpenNebula.VM.vnc({
|
||||
data : {
|
||||
id: vm_id
|
||||
},
|
||||
success: function(request, response){
|
||||
if (OpenNebula.VM.isVNCSupported(vm_data)) {
|
||||
var proxy_host = window.location.hostname;
|
||||
var proxy_port = config['system_config']['vnc_proxy_port'];
|
||||
var pw = response["password"];
|
||||
var token = response["token"];
|
||||
var vm_name = response["vm_name"];
|
||||
var path = '?token='+token;
|
||||
|
||||
var url = "vnc?";
|
||||
url += "host=" + proxy_host;
|
||||
url += "&port=" + proxy_port;
|
||||
url += "&token=" + token;
|
||||
url += "&password=" + pw;
|
||||
url += "&encrypt=" + config['user_config']['vnc_wss'];
|
||||
url += "&title=" + vm_name;
|
||||
|
||||
window.open(url, '', '_blank');
|
||||
button.removeAttr("disabled");
|
||||
} else if (OpenNebula.VM.isSPICESupported(vm_data)) {
|
||||
var host, port, password, scheme = "ws://", uri, token, vm_name;
|
||||
|
||||
if (config['user_config']['vnc_wss'] == "yes") {
|
||||
scheme = "wss://";
|
||||
}
|
||||
|
||||
host = window.location.hostname;
|
||||
port = config['system_config']['vnc_proxy_port'];
|
||||
password = response["password"];
|
||||
token = response["token"];
|
||||
vm_name = response["vm_name"];
|
||||
|
||||
uri = scheme + host + ":" + port + "?token=" + token;
|
||||
|
||||
var url = "spice?";
|
||||
url += "host=" + host;
|
||||
url += "&port=" + port;
|
||||
url += "&token=" + token;
|
||||
url += "&password=" + password;
|
||||
url += "&encrypt=" + config['user_config']['vnc_wss'];
|
||||
url += "&title=" + vm_name;
|
||||
|
||||
window.open(url, '', '_blank');
|
||||
button.removeAttr("disabled");
|
||||
} else {
|
||||
Notifier.notifyError("The remote console is not enabled for this VM")
|
||||
}
|
||||
},
|
||||
error: function(request, response){
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
context.on("click", ".provision_refresh_info", function(){
|
||||
var vm_id = $(".provision_info_vm", context).attr("vm_id");
|
||||
update_provision_vm_info(vm_id, context);
|
||||
return false;
|
||||
});
|
||||
|
||||
//
|
||||
// Info VM
|
||||
//
|
||||
|
||||
$(".provision_list_vms", context).on("click", ".provision_info_vm_button", function(){
|
||||
$("a.provision_show_vm_accordion", context).trigger("click");
|
||||
// TODO loading
|
||||
|
||||
var vm_id = $(this).parents(".provision-pricing-table").attr("opennebula_id")
|
||||
update_provision_vm_info(vm_id, context);
|
||||
return false;
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// @params
|
||||
// data: and VM object
|
||||
// Example: data.ID
|
||||
// @returns and object containing the following properties
|
||||
// color: css class for this state.
|
||||
// color + '-color' font color class
|
||||
// color + '-bg' background class
|
||||
// str: user friendly state string
|
||||
function get_provision_vm_state(data) {
|
||||
var state = OpenNebula.VM.stateStr(data.STATE);
|
||||
var state_color;
|
||||
var state_str;
|
||||
|
||||
switch (state) {
|
||||
case "INIT":
|
||||
case "PENDING":
|
||||
case "HOLD":
|
||||
state_color = 'deploying';
|
||||
state_str = Locale.tr("DEPLOYING") + " (1/3)";
|
||||
break;
|
||||
case "FAILED":
|
||||
state_color = 'error';
|
||||
state_str = Locale.tr("ERROR");
|
||||
break;
|
||||
case "ACTIVE":
|
||||
var lcm_state = OpenNebula.VM.shortLcmStateStr(data.LCM_STATE);
|
||||
|
||||
switch (lcm_state) {
|
||||
case "LCM_INIT":
|
||||
state_color = 'deploying';
|
||||
state_str = Locale.tr("DEPLOYING") + " (1/3)";
|
||||
break;
|
||||
case "PROLOG":
|
||||
state_color = 'deploying';
|
||||
state_str = Locale.tr("DEPLOYING") + " (2/3)";
|
||||
break;
|
||||
case "BOOT":
|
||||
state_color = 'deploying';
|
||||
state_str = Locale.tr("DEPLOYING") + " (3/3)";
|
||||
break;
|
||||
case "RUNNING":
|
||||
case "SNAPSHOT":
|
||||
case "MIGRATE":
|
||||
state_color = 'running';
|
||||
state_str = Locale.tr("RUNNING");
|
||||
break;
|
||||
case "HOTPLUG":
|
||||
state_color = 'deploying';
|
||||
state_str = Locale.tr("SAVING IMAGE");
|
||||
break;
|
||||
case "FAILURE":
|
||||
state_color = 'error';
|
||||
state_str = Locale.tr("ERROR");
|
||||
break;
|
||||
case "SAVE":
|
||||
case "EPILOG":
|
||||
case "SHUTDOWN":
|
||||
case "CLEANUP":
|
||||
state_color = 'powering_off';
|
||||
state_str = Locale.tr("POWERING OFF");
|
||||
break;
|
||||
case "UNKNOWN":
|
||||
state_color = 'powering_off';
|
||||
state_str = Locale.tr("UNKNOWN");
|
||||
break;
|
||||
default:
|
||||
state_color = 'powering_off';
|
||||
state_str = Locale.tr("UNKNOWN");
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case "STOPPED":
|
||||
case "SUSPENDED":
|
||||
case "POWEROFF":
|
||||
state_color = 'off';
|
||||
state_str = Locale.tr("OFF");
|
||||
|
||||
break;
|
||||
default:
|
||||
state_color = 'powering_off';
|
||||
state_str = Locale.tr("UNKNOWN");
|
||||
break;
|
||||
}
|
||||
|
||||
return {
|
||||
color: state_color,
|
||||
str: state_str
|
||||
}
|
||||
}
|
||||
|
||||
function get_provision_disk_image(data) {
|
||||
var disks = []
|
||||
if ($.isArray(data.TEMPLATE.DISK))
|
||||
disks = data.TEMPLATE.DISK
|
||||
else if (!$.isEmptyObject(data.TEMPLATE.DISK))
|
||||
disks = [data.TEMPLATE.DISK]
|
||||
|
||||
if (disks.length > 0) {
|
||||
return disks[0].IMAGE;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
function get_provision_ips(data) {
|
||||
return '<i class="fa fa-fw fa-lg fa-globe"></i> ' + OpenNebula.VM.ipsStr(data);
|
||||
}
|
||||
|
||||
// @params
|
||||
// data: and IMAGE object
|
||||
// Example: data.ID
|
||||
// @returns and object containing the following properties
|
||||
// color: css class for this state.
|
||||
// color + '-color' font color class
|
||||
// color + '-bg' background class
|
||||
// str: user friendly state string
|
||||
function get_provision_image_state(data) {
|
||||
var state = OpenNebula.Image.stateStr(data.STATE);
|
||||
var state_color;
|
||||
var state_str;
|
||||
|
||||
switch (state) {
|
||||
case "READY":
|
||||
case "USED":
|
||||
state_color = 'running';
|
||||
state_str = Locale.tr("READY");
|
||||
break;
|
||||
case "DISABLED":
|
||||
case "USED_PERS":
|
||||
state_color = 'off';
|
||||
state_str = Locale.tr("OFF");
|
||||
break;
|
||||
case "LOCKED":
|
||||
case "CLONE":
|
||||
case "INIT":
|
||||
state_color = 'deploying';
|
||||
state_str = Locale.tr("DEPLOYING") + " (1/3)";
|
||||
break;
|
||||
case "ERROR":
|
||||
state_color = 'error';
|
||||
state_str = Locale.tr("ERROR");
|
||||
break;
|
||||
case "DELETE":
|
||||
state_color = 'error';
|
||||
state_str = Locale.tr("DELETING");
|
||||
break;
|
||||
default:
|
||||
state_color = 'powering_off';
|
||||
state_str = Locale.tr("UNKNOWN");
|
||||
break;
|
||||
}
|
||||
|
||||
return {
|
||||
color: state_color,
|
||||
str: state_str
|
||||
}
|
||||
}
|
||||
});
|
@ -65,7 +65,10 @@ define(function(require) {
|
||||
return Humanize.prettyTimeAxis(val, info.show_date);
|
||||
},
|
||||
color: "#efefef",
|
||||
size: 8
|
||||
font: {
|
||||
color: "#999",
|
||||
size: 10
|
||||
}
|
||||
},
|
||||
yaxis : {
|
||||
tickFormatter: function(val, axis) {
|
||||
@ -73,8 +76,10 @@ define(function(require) {
|
||||
},
|
||||
min: 0,
|
||||
color: "#efefef",
|
||||
|
||||
size: 8
|
||||
font: {
|
||||
color: "#999",
|
||||
size: 10
|
||||
}
|
||||
},
|
||||
series: {
|
||||
lines: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user