mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
Add DISK accounting
This commit is contained in:
parent
fef6cedab0
commit
5fde51755f
@ -1,5 +1,6 @@
|
||||
<div class="row totals-info">
|
||||
<div class="large-3 medium-6 small-12 columns">
|
||||
<br>
|
||||
<div class="small-12 large-12 columns text-center">
|
||||
<h2 class="subheader">
|
||||
<small>{{tr "USERS"}}</small>
|
||||
@ -17,19 +18,25 @@
|
||||
<div class="large-9 medium-6 small-12 columns text-center" id="dashboard_vdc_user_accounting">
|
||||
<input style="display:none;" value="user" id="acct_group_by"/>
|
||||
<div class="small-12 large-6 columns">
|
||||
<h4 class="subheader">
|
||||
<h4 class="subheader" style="margin-bottom: 0px">
|
||||
<small>{{tr "CPU hours"}}</small>
|
||||
</h4>
|
||||
<div class="large-12 columns centered graph text-center" id="acct_cpu_graph" style="height: 100px;">{{> ./empty-graph}}</div>
|
||||
</div>
|
||||
<div class="small-12 large-6 columns">
|
||||
<h4 class="subheader">
|
||||
<h4 class="subheader" style="margin-bottom: 0px">
|
||||
<small>{{tr "Memory GB hours"}}</small>
|
||||
</h4>
|
||||
<div class="large-12 columns centered graph text-center" id="acct_mem_graph" style="height: 100px;">{{> ./empty-graph}}</div>
|
||||
</div>
|
||||
<div class="small-12 large-6 left columns">
|
||||
<h4 class="subheader" style="margin-bottom: 0px">
|
||||
<small>{{tr "Disk MB hours"}}</small>
|
||||
</h4>
|
||||
<div class="large-12 columns centered graph text-center" id="acct_disk_graph" style="height: 100px;">{{> ./empty-graph}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row dashboard-widget-footer">
|
||||
<div class="small-3 large-3 columns text-center"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,5 +1,6 @@
|
||||
<div class="row totals-info">
|
||||
<div class="small-12 medium-6 large-3 columns">
|
||||
<br>
|
||||
<div class="small-12 large-12 columns text-center">
|
||||
<h2 class="subheader">
|
||||
<small>{{tr "VMs"}}</small>
|
||||
@ -40,19 +41,25 @@
|
||||
<div class="large-9 medium-6 small-12 columns text-center" id="dashboard_vm_accounting">
|
||||
<input style="display:none;" value="vm" id="acct_group_by"/>
|
||||
<div class="small-12 large-6 columns">
|
||||
<h4 class="subheader">
|
||||
<h4 class="subheader" style="margin-bottom: 0px">
|
||||
<small>{{tr "CPU hours"}}</small>
|
||||
</h4>
|
||||
<div class="large-12 columns centered graph text-center" id="acct_cpu_graph" style="height: 180px;">{{> ./empty-graph}}</div>
|
||||
<div class="large-12 columns centered graph text-center" id="acct_cpu_graph" style="height: 100px;">{{> ./empty-graph}}</div>
|
||||
</div>
|
||||
<div class="small-12 large-6 columns">
|
||||
<h4 class="subheader">
|
||||
<h4 class="subheader" style="margin-bottom: 0px">
|
||||
<small>{{tr "Memory GB hours"}}</small>
|
||||
</h4>
|
||||
<div class="large-12 columns centered graph text-center" id="acct_mem_graph" style="height: 180px;">{{> ./empty-graph}}</div>
|
||||
<div class="large-12 columns centered graph text-center" id="acct_mem_graph" style="height: 100px;">{{> ./empty-graph}}</div>
|
||||
</div>
|
||||
<div class="small-12 large-6 left columns">
|
||||
<h4 class="subheader" style="margin-bottom: 0px">
|
||||
<small>{{tr "Disk MB hours"}}</small>
|
||||
</h4>
|
||||
<div class="large-12 columns centered graph text-center" id="acct_disk_graph" style="height: 100px;">{{> ./empty-graph}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row dashboard-widget-footer">
|
||||
<div class="small-3 large-3 columns text-center"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -702,106 +702,6 @@ define(function(require) {
|
||||
|
||||
$("#provision_dashboard").html("");
|
||||
|
||||
if (Config.provision.dashboard.isEnabled("quotas")) {
|
||||
$("#provision_dashboard").append(TemplateDashboardQuotas());
|
||||
|
||||
|
||||
OpenNebula.User.show({
|
||||
data : {
|
||||
id: "-1"
|
||||
},
|
||||
success: function(request,user_json){
|
||||
var user = user_json.USER;
|
||||
|
||||
QuotaWidgets.initEmptyQuotas(user);
|
||||
|
||||
if (!$.isEmptyObject(user.VM_QUOTA)){
|
||||
var default_user_quotas = QuotasDefault.default_quotas(user.DEFAULT_USER_QUOTAS);
|
||||
|
||||
var vms = QuotaWidgets.quotaInfo(
|
||||
user.VM_QUOTA.VM.VMS_USED,
|
||||
user.VM_QUOTA.VM.VMS,
|
||||
default_user_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_rvms_percentage").html(vms["percentage"]);
|
||||
$("#provision_dashboard_rvms_str").html(vms["str"]);
|
||||
$("#provision_dashboard_rvms_meter").css("width", vms["percentage"]+"%");
|
||||
|
||||
var memory = QuotaWidgets.quotaMBInfo(
|
||||
user.VM_QUOTA.VM.MEMORY_USED,
|
||||
user.VM_QUOTA.VM.MEMORY,
|
||||
default_user_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_memory_percentage").html(memory["percentage"]);
|
||||
$("#provision_dashboard_memory_str").html(memory["str"]);
|
||||
$("#provision_dashboard_memory_meter").css("width", memory["percentage"]+"%");
|
||||
|
||||
var cpu = QuotaWidgets.quotaFloatInfo(
|
||||
user.VM_QUOTA.VM.CPU_USED,
|
||||
user.VM_QUOTA.VM.CPU,
|
||||
default_user_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_cpu_percentage").html(cpu["percentage"]);
|
||||
$("#provision_dashboard_cpu_str").html(cpu["str"]);
|
||||
$("#provision_dashboard_cpu_meter").css("width", cpu["percentage"]+"%");
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (Config.provision.dashboard.isEnabled("vdcquotas")) {
|
||||
$("#provision_dashboard").append(TemplateDashboardVdcQuotas());
|
||||
|
||||
|
||||
OpenNebula.Group.show({
|
||||
data : {
|
||||
id: "-1"
|
||||
},
|
||||
success: function(request,group_json){
|
||||
var group = group_json.GROUP;
|
||||
|
||||
QuotaWidgets.initEmptyQuotas(group);
|
||||
|
||||
if (!$.isEmptyObject(group.VM_QUOTA)){
|
||||
var default_group_quotas = QuotaDefaults.default_quotas(group.DEFAULT_GROUP_QUOTAS);
|
||||
|
||||
var vms = QuotaWidgets.quotaInfo(
|
||||
group.VM_QUOTA.VM.VMS_USED,
|
||||
group.VM_QUOTA.VM.VMS,
|
||||
default_group_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_vdc_rvms_percentage").html(vms["percentage"]);
|
||||
$("#provision_dashboard_vdc_rvms_str").html(vms["str"]);
|
||||
$("#provision_dashboard_vdc_rvms_meter").css("width", vms["percentage"]+"%");
|
||||
|
||||
var memory = QuotaWidgets.quotaMBInfo(
|
||||
group.VM_QUOTA.VM.MEMORY_USED,
|
||||
group.VM_QUOTA.VM.MEMORY,
|
||||
default_group_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_vdc_memory_percentage").html(memory["percentage"]);
|
||||
$("#provision_dashboard_vdc_memory_str").html(memory["str"]);
|
||||
$("#provision_dashboard_vdc_memory_meter").css("width", memory["percentage"]+"%");
|
||||
|
||||
var cpu = QuotaWidgets.quotaFloatInfo(
|
||||
group.VM_QUOTA.VM.CPU_USED,
|
||||
group.VM_QUOTA.VM.CPU,
|
||||
default_group_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_vdc_cpu_percentage").html(cpu["percentage"]);
|
||||
$("#provision_dashboard_vdc_cpu_str").html(cpu["str"]);
|
||||
$("#provision_dashboard_vdc_cpu_meter").css("width", cpu["percentage"]+"%");
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (Config.provision.dashboard.isEnabled("vms")) {
|
||||
$("#provision_dashboard").append(TemplateDashboardVms());
|
||||
|
||||
@ -990,6 +890,105 @@ define(function(require) {
|
||||
});
|
||||
}
|
||||
|
||||
if (Config.provision.dashboard.isEnabled("quotas")) {
|
||||
$("#provision_dashboard").append(TemplateDashboardQuotas());
|
||||
|
||||
|
||||
OpenNebula.User.show({
|
||||
data : {
|
||||
id: "-1"
|
||||
},
|
||||
success: function(request,user_json){
|
||||
var user = user_json.USER;
|
||||
|
||||
QuotaWidgets.initEmptyQuotas(user);
|
||||
|
||||
if (!$.isEmptyObject(user.VM_QUOTA)){
|
||||
var default_user_quotas = QuotasDefault.default_quotas(user.DEFAULT_USER_QUOTAS);
|
||||
|
||||
var vms = QuotaWidgets.quotaInfo(
|
||||
user.VM_QUOTA.VM.VMS_USED,
|
||||
user.VM_QUOTA.VM.VMS,
|
||||
default_user_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_rvms_percentage").html(vms["percentage"]);
|
||||
$("#provision_dashboard_rvms_str").html(vms["str"]);
|
||||
$("#provision_dashboard_rvms_meter").css("width", vms["percentage"]+"%");
|
||||
|
||||
var memory = QuotaWidgets.quotaMBInfo(
|
||||
user.VM_QUOTA.VM.MEMORY_USED,
|
||||
user.VM_QUOTA.VM.MEMORY,
|
||||
default_user_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_memory_percentage").html(memory["percentage"]);
|
||||
$("#provision_dashboard_memory_str").html(memory["str"]);
|
||||
$("#provision_dashboard_memory_meter").css("width", memory["percentage"]+"%");
|
||||
|
||||
var cpu = QuotaWidgets.quotaFloatInfo(
|
||||
user.VM_QUOTA.VM.CPU_USED,
|
||||
user.VM_QUOTA.VM.CPU,
|
||||
default_user_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_cpu_percentage").html(cpu["percentage"]);
|
||||
$("#provision_dashboard_cpu_str").html(cpu["str"]);
|
||||
$("#provision_dashboard_cpu_meter").css("width", cpu["percentage"]+"%");
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (Config.provision.dashboard.isEnabled("vdcquotas")) {
|
||||
$("#provision_dashboard").append(TemplateDashboardVdcQuotas());
|
||||
|
||||
|
||||
OpenNebula.Group.show({
|
||||
data : {
|
||||
id: "-1"
|
||||
},
|
||||
success: function(request,group_json){
|
||||
var group = group_json.GROUP;
|
||||
|
||||
QuotaWidgets.initEmptyQuotas(group);
|
||||
|
||||
if (!$.isEmptyObject(group.VM_QUOTA)){
|
||||
var default_group_quotas = QuotaDefaults.default_quotas(group.DEFAULT_GROUP_QUOTAS);
|
||||
|
||||
var vms = QuotaWidgets.quotaInfo(
|
||||
group.VM_QUOTA.VM.VMS_USED,
|
||||
group.VM_QUOTA.VM.VMS,
|
||||
default_group_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_vdc_rvms_percentage").html(vms["percentage"]);
|
||||
$("#provision_dashboard_vdc_rvms_str").html(vms["str"]);
|
||||
$("#provision_dashboard_vdc_rvms_meter").css("width", vms["percentage"]+"%");
|
||||
|
||||
var memory = QuotaWidgets.quotaMBInfo(
|
||||
group.VM_QUOTA.VM.MEMORY_USED,
|
||||
group.VM_QUOTA.VM.MEMORY,
|
||||
default_group_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_vdc_memory_percentage").html(memory["percentage"]);
|
||||
$("#provision_dashboard_vdc_memory_str").html(memory["str"]);
|
||||
$("#provision_dashboard_vdc_memory_meter").css("width", memory["percentage"]+"%");
|
||||
|
||||
var cpu = QuotaWidgets.quotaFloatInfo(
|
||||
group.VM_QUOTA.VM.CPU_USED,
|
||||
group.VM_QUOTA.VM.CPU,
|
||||
default_group_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
|
||||
$("#provision_dashboard_vdc_cpu_percentage").html(cpu["percentage"]);
|
||||
$("#provision_dashboard_vdc_cpu_str").html(cpu["str"]);
|
||||
$("#provision_dashboard_vdc_cpu_meter").css("width", cpu["percentage"]+"%");
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1983,4 +1982,4 @@ define(function(require) {
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
@ -56,9 +56,19 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns graph_legend">
|
||||
<h3 class="subheader"><small>{{tr "Disk MB hours"}}</small></h3>
|
||||
</div>
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph text-center" id="acct_disk_graph" style="height: 100px;">
|
||||
{{> ./empty-graphs}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
|
@ -93,9 +93,19 @@
|
||||
<div class="large-12 columns centered graph text-center" id="acct_mem_graph" style="height: 100px;">{{> ./empty-graphs}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns graph_legend">
|
||||
<h3 class="subheader">
|
||||
<small>{{tr "Disk MB hours"}}</small>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph text-center" id="acct_disk_graph" style="height: 100px;">{{> ./empty-graphs}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
|
@ -93,9 +93,19 @@
|
||||
<div class="large-12 columns centered graph text-center" id="acct_mem_graph" style="height: 100px;">{{> ./empty-graphs}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns graph_legend">
|
||||
<h3 class="subheader">
|
||||
<small>{{tr "Disk MB hours"}}</small>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph text-center" id="acct_disk_graph" style="height: 100px;">{{> ./empty-graphs}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
|
@ -28,13 +28,23 @@
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="large-4 columns">
|
||||
<div class="large-12 columns">
|
||||
<ul class="provision-pricing-table_user_info provision-pricing-table" style="border: 0px !important; background: #fff;"></ul>
|
||||
</div>
|
||||
<div class="large-8 columns">
|
||||
<div class="large-12 columns">
|
||||
<div class="row dashboard_vm_accounting">
|
||||
<div id="acct_content">
|
||||
<div class="large-6 columns">
|
||||
<div class="large-4 columns">
|
||||
<div class="row">
|
||||
<div class="large-12 columns graph_legend text-center">
|
||||
<span style="color: #777; font-size: 14px">{{tr "Disk MB hours"}}</span>
|
||||
</div>
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph" id="acct_disk_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-4 columns">
|
||||
<input style="display:none;" value="vm" id="acct_group_by"/>
|
||||
<div class="row">
|
||||
<div class="large-12 columns graph_legend text-center">
|
||||
@ -46,7 +56,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-6 columns">
|
||||
<div class="large-4 columns">
|
||||
<div class="row">
|
||||
<div class="large-12 columns graph_legend text-center">
|
||||
<span style="color: #777; font-size: 14px">{{tr "Memory GB hours"}}</span>
|
||||
@ -73,4 +83,4 @@
|
||||
<div class="row">
|
||||
<div class="provision_vdc_info_container large-12 columns"></div>
|
||||
</div>
|
||||
<br></div>
|
||||
<br></div>
|
||||
|
@ -246,88 +246,90 @@ define(function(require) {
|
||||
|
||||
if (!$.isEmptyObject(data.VM_QUOTA)) {
|
||||
var default_user_quotas = QuotaDefaults.default_quotas(data.DEFAULT_USER_QUOTAS);
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
vms_quotas = QuotaWidgets.quotaFloatInfo(
|
||||
data.VM_QUOTA.VM.VMS_USED,
|
||||
data.VM_QUOTA.VM.VMS,
|
||||
default_user_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-th"></i> '+ Locale.tr("VMs") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
cpu_quotas = QuotaWidgets.quotaFloatInfo(
|
||||
data.VM_QUOTA.VM.CPU_USED,
|
||||
data.VM_QUOTA.VM.CPU,
|
||||
default_user_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-tachometer"></i> '+ Locale.tr("CPU") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
|
||||
quotas = QuotaWidgets.quotaMBInfo(
|
||||
mem_quotas = QuotaWidgets.quotaMBInfo(
|
||||
data.VM_QUOTA.VM.MEMORY_USED,
|
||||
data.VM_QUOTA.VM.MEMORY,
|
||||
default_user_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-align-left"></i> '+ Locale.tr("Memory") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'<div class="large-4 columns">'+
|
||||
'<i class="fa fa-fw fa-th"></i> '+ Locale.tr("VMs") +
|
||||
'<span class="right">' + vms_quotas.str + "</span>" +
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<i class="fa fa-fw fa-tachometer"></i> '+ Locale.tr("CPU") +
|
||||
'<span class="right">' + cpu_quotas.str + "</span>" +
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<i class="fa fa-fw fa-align-left"></i> '+ Locale.tr("Memory") +
|
||||
'<span class="right">' + mem_quotas.str + "</span>" +
|
||||
'</div>'+
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'<div class="large-4 columns">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + vms_quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + cpu_quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + mem_quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</div>'+
|
||||
'</li>');
|
||||
} else {
|
||||
quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
vms_quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
cpu_quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
mem_quotas = QuotaWidgets.quotaMBInfo(0, 0, null, true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-th"></i> '+ Locale.tr("VMs") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'<div class="large-4 columns">'+
|
||||
'<i class="fa fa-fw fa-th"></i> '+ Locale.tr("VMs") +
|
||||
'<span class="right">' + vms_quotas.str + "</span>" +
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<i class="fa fa-fw fa-tachometer"></i> '+ Locale.tr("CPU") +
|
||||
'<span class="right">' + cpu_quotas.str + "</span>" +
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<i class="fa fa-fw fa-align-left"></i> '+ Locale.tr("Memory") +
|
||||
'<span class="right">' + mem_quotas.str + "</span>" +
|
||||
'</div>'+
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
|
||||
quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-tachometer"></i> '+ Locale.tr("CPU") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
|
||||
quotas = QuotaWidgets.quotaMBInfo(0, 0, null, true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-align-left"></i> '+ Locale.tr("Memory") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'<div class="large-4 columns">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + vms_quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + cpu_quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + mem_quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</div>'+
|
||||
'</li>');
|
||||
}
|
||||
|
||||
|
@ -952,7 +952,7 @@ define(function(require) {
|
||||
}
|
||||
|
||||
function get_provision_ips(data) {
|
||||
return '<i class="fa fa-fw fa-lg fa-globe"></i> ' + OpenNebula.VM.ipsStr(data);
|
||||
return '<i class="fa fa-fw fa-lg fa-globe"></i> ' + OpenNebula.VM.ipsStr(data, ', ');
|
||||
}
|
||||
|
||||
// @params
|
||||
|
@ -200,7 +200,7 @@ define(function(require) {
|
||||
if (disk.IMAGE_ID &&
|
||||
StateActions.enabledStateAction("VM.disk_saveas", that.element.STATE, that.element.LCM_STATE)) {
|
||||
actions += '<a href="VM.disk_saveas" class="disk_saveas nowrap" >\
|
||||
<i class="fa fa-save"></i>' + Locale.tr("Save as") + '</a>  ';
|
||||
<i class="fa fa-save fa-fw"></i>' + Locale.tr("Save as") + '</a>  ';
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,7 +208,7 @@ define(function(require) {
|
||||
if (Config.isTabActionEnabled("vms-tab", "VM.detachdisk")) {
|
||||
if (StateActions.enabledStateAction("VM.detachdisk", that.element.STATE, that.element.LCM_STATE) && !disk.CONTEXT) {
|
||||
actions += ('<a href="VM.detachdisk" class="detachdisk nowrap" >\
|
||||
<i class="fa fa-times"></i>' + Locale.tr("Detach") +
|
||||
<i class="fa fa-times fa-fw"></i>' + Locale.tr("Detach") +
|
||||
'</a>  ');
|
||||
}
|
||||
}
|
||||
@ -216,7 +216,7 @@ define(function(require) {
|
||||
if (Config.isTabActionEnabled("vms-tab", "VM.disk_snapshot_create")) {
|
||||
if (StateActions.enabledStateAction("VM.disk_snapshot_create", that.element.STATE, that.element.LCM_STATE) && !disk.CONTEXT) {
|
||||
actions += ('<a href="VM.disk_snapshot_create" class="disk_snapshot_create nowrap" >\
|
||||
<i class="fa fa-camera"></i>' + Locale.tr("Snapshot") +
|
||||
<i class="fa fa-camera fa-fw"></i>' + Locale.tr("Snapshot") +
|
||||
'</a>');
|
||||
}
|
||||
}
|
||||
@ -441,26 +441,27 @@ define(function(require) {
|
||||
}
|
||||
|
||||
html += Humanize.prettyTime(snapshot.DATE) + SPACE +
|
||||
Humanize.sizeFromMB(snapshot.SIZE) + SPACE +
|
||||
(snapshot.NAME ? snapshot.NAME + SPACE : '');
|
||||
|
||||
if (Config.isTabActionEnabled("vms-tab", "VM.disk_saveas") &&
|
||||
StateActions.enabledStateAction("VM.disk_saveas", that.element.STATE, that.element.LCM_STATE)) {
|
||||
|
||||
html += '<a href="" class="disk_snapshot_saveas" >\
|
||||
<i class="fa fa-save"></i>' + Locale.tr("Save as") + '</a>  ';
|
||||
<i class="fa fa-save fa-fw"></i>' + Locale.tr("Save as") + '</a>  ';
|
||||
}
|
||||
|
||||
if (Config.isTabActionEnabled("vms-tab", "VM.disk_snapshot_revert") &&
|
||||
StateActions.enabledStateAction("VM.disk_snapshot_revert", that.element.STATE, that.element.LCM_STATE)) {
|
||||
|
||||
html += '<a href="VM.disk_snapshot_revert" class="disk_snapshot_revert" ><i class="fa fa-reply"/>' + Locale.tr("Revert") + '</a>  ';
|
||||
html += '<a href="VM.disk_snapshot_revert" class="disk_snapshot_revert" ><i class="fa fa-reply fa-fw"/>' + Locale.tr("Revert") + '</a>  ';
|
||||
}
|
||||
|
||||
if(!active){
|
||||
if (Config.isTabActionEnabled("vms-tab", "VM.disk_snapshot_delete") &&
|
||||
StateActions.enabledStateAction("VM.disk_snapshot_delete", that.element.STATE, that.element.LCM_STATE)) {
|
||||
|
||||
html += '<a href="VM.disk_snapshot_delete" class="disk_snapshot_delete" ><i class="fa fa-times"/>' + Locale.tr("Delete") + '</a>';
|
||||
html += '<a href="VM.disk_snapshot_delete" class="disk_snapshot_delete" ><i class="fa fa-times fa-fw"/>' + Locale.tr("Delete") + '</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -212,6 +212,7 @@ define(function(require) {
|
||||
function _fillAccounting(context, req, response, no_table) {
|
||||
$("#acct_cpu_graph", context).html(TemplateEmptyGraph());
|
||||
$("#acct_mem_graph", context).html(TemplateEmptyGraph());
|
||||
$("#acct_disk_graph", context).html(TemplateEmptyGraph());
|
||||
|
||||
var options = req.request.data[0];
|
||||
|
||||
@ -402,6 +403,9 @@ define(function(require) {
|
||||
series[group_by].data_points[times[0]].MEM_HOURS = 0;
|
||||
series[group_by].data_points[times[times.length-2]].MEM_HOURS = 0;
|
||||
|
||||
series[group_by].data_points[times[0]].DISK_HOURS = 0;
|
||||
series[group_by].data_points[times[times.length-2]].DISK_HOURS = 0;
|
||||
|
||||
var name = group_by_name(history);
|
||||
series[group_by].name = name;
|
||||
series[group_by].label = group_by_prefix+" "+group_by+" "+name;
|
||||
@ -420,6 +424,7 @@ define(function(require) {
|
||||
serie[t] = {};
|
||||
serie[t].CPU_HOURS = 0;
|
||||
serie[t].MEM_HOURS = 0;
|
||||
serie[t].DISK_HOURS = 0;
|
||||
}
|
||||
|
||||
if( (history.ETIME*1000 > t || history.ETIME == 0) &&
|
||||
@ -437,9 +442,11 @@ define(function(require) {
|
||||
|
||||
var n_hours = (etime - stime) / 1000 / 60 / 60;
|
||||
|
||||
var template = history.VM.TEMPLATE;
|
||||
|
||||
// --- cpu ---
|
||||
|
||||
var val = parseFloat(history.VM.TEMPLATE.CPU) * n_hours;
|
||||
var val = parseFloat(template.CPU) * n_hours;
|
||||
|
||||
if (!isNaN(val)){
|
||||
serie[t].CPU_HOURS += val;
|
||||
@ -447,11 +454,48 @@ define(function(require) {
|
||||
|
||||
// --- mem ---
|
||||
|
||||
var val = parseInt(history.VM.TEMPLATE.MEMORY)/1024 * n_hours;
|
||||
var val = parseInt(template.MEMORY)/1024 * n_hours;
|
||||
|
||||
if (!isNaN(val)){
|
||||
serie[t].MEM_HOURS += val;
|
||||
}
|
||||
|
||||
// --- DISK ---
|
||||
|
||||
var disks = [];
|
||||
if ($.isArray(template.DISK))
|
||||
disks = template.DISK;
|
||||
else if (!$.isEmptyObject(template.DISK))
|
||||
disks = [template.DISK];
|
||||
|
||||
var snapshots = [];
|
||||
if ($.isArray(template.SNAPSHOTS)){
|
||||
snapshots = template.SNAPSHOTS;
|
||||
} else if (!$.isEmptyObject(template.SNAPSHOTS)) {
|
||||
snapshots = [template.SNAPSHOTS];
|
||||
}
|
||||
|
||||
var val = 0;
|
||||
$.each(disks, function(index, disk){
|
||||
val += parseInt(disk.SIZE) * n_hours;
|
||||
})
|
||||
|
||||
// snapshots is an array that contains the snapshots for each DISK
|
||||
$.each(snapshots, function(index, snapshotForDisk){
|
||||
var diskSnapshots = []
|
||||
if (!$.isArray(snapshotForDisk.SNAPSHOT)){
|
||||
diskSnapshots = [snapshotForDisk.SNAPSHOT];
|
||||
}
|
||||
|
||||
// diskSnapshots contains the snapshots for a specific DISK
|
||||
$.each(diskSnapshots, function(index, snapshot){
|
||||
val += parseInt(snapshot.SIZE) * n_hours;
|
||||
})
|
||||
})
|
||||
|
||||
if (!isNaN(val)){
|
||||
serie[t].DISK_HOURS += val;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -462,14 +506,17 @@ define(function(require) {
|
||||
|
||||
var cpu_plot_series = [];
|
||||
var mem_plot_series = [];
|
||||
var disk_plot_series = [];
|
||||
|
||||
$.each(series, function(key, val){
|
||||
var cpu_data = [];
|
||||
var mem_data = [];
|
||||
var disk_data = [];
|
||||
|
||||
$.each(val.data_points, function(time,num){
|
||||
cpu_data.push([parseInt(time),num.CPU_HOURS]);
|
||||
mem_data.push([parseInt(time),num.MEM_HOURS]);
|
||||
disk_data.push([parseInt(time),num.DISK_HOURS]);
|
||||
});
|
||||
|
||||
cpu_plot_series.push(
|
||||
@ -487,10 +534,19 @@ define(function(require) {
|
||||
id: key,
|
||||
data: mem_data
|
||||
});
|
||||
|
||||
disk_plot_series.push(
|
||||
{
|
||||
label: val.label,
|
||||
name: val.name,
|
||||
id: key,
|
||||
data: disk_data
|
||||
});
|
||||
});
|
||||
|
||||
var cpu_plot = $.plot($("#acct_cpu_graph", context), cpu_plot_series, options);
|
||||
var mem_plot = $.plot($("#acct_mem_graph", context), mem_plot_series, options);
|
||||
var disk_plot = $.plot($("#acct_disk_graph", context), disk_plot_series, options);
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Init dataTables
|
||||
@ -513,8 +569,16 @@ define(function(require) {
|
||||
$("#acct_mem_datatable",context).width("100%");
|
||||
|
||||
|
||||
$("#acct_disk_datatable",context).dataTable().fnClearTable();
|
||||
$("#acct_disk_datatable",context).dataTable().fnDestroy();
|
||||
|
||||
$("#acct_disk_datatable thead",context).remove();
|
||||
$("#acct_disk_datatable",context).width("100%");
|
||||
|
||||
|
||||
cpu_plot_data = cpu_plot.getData();
|
||||
mem_plot_data = mem_plot.getData();
|
||||
disk_plot_data = disk_plot.getData();
|
||||
|
||||
var thead =
|
||||
'<thead>\
|
||||
@ -550,26 +614,48 @@ define(function(require) {
|
||||
|
||||
$("#acct_mem_datatable",context).append(thead);
|
||||
|
||||
thead =
|
||||
'<thead>\
|
||||
<tr>\
|
||||
<th>'+Locale.tr("Date UTC")+'</th>\
|
||||
<th>'+Locale.tr("Total")+'</th>';
|
||||
|
||||
$.each(disk_plot_data, function(i, serie){
|
||||
thead += '<th style="border-bottom: '+serie.color+' 4px solid !important;'+
|
||||
' border-left: 10px solid white; border-right: 5px solid white;'+
|
||||
' white-space: nowrap">'+
|
||||
group_by_prefix+' '+serie.id+'<br/>'+serie.name+'</th>';
|
||||
});
|
||||
|
||||
thead += '</tr></thead>';
|
||||
|
||||
$("#acct_disk_datatable",context).append(thead);
|
||||
|
||||
|
||||
var cpu_dataTable_data = [];
|
||||
var mem_dataTable_data = [];
|
||||
var disk_dataTable_data = [];
|
||||
|
||||
for (var i = 0; i<times.length-1; i++){
|
||||
var t = times[i];
|
||||
|
||||
var cpu_row = [];
|
||||
var mem_row = [];
|
||||
var disk_row = [];
|
||||
|
||||
var time_st = time_UTC(t);
|
||||
|
||||
cpu_row.push(time_st);
|
||||
mem_row.push(time_st);
|
||||
disk_row.push(time_st);
|
||||
|
||||
cpu_row.push(0);
|
||||
mem_row.push(0);
|
||||
disk_row.push(0);
|
||||
|
||||
var cpu_total = 0;
|
||||
var mem_total = 0;
|
||||
var disk_total = 0;
|
||||
|
||||
$.each(series, function(key, val){
|
||||
var v = val.data_points[t];
|
||||
@ -577,23 +663,29 @@ define(function(require) {
|
||||
if(v != undefined){
|
||||
var cpu_v = (v.CPU_HOURS * 100).toFixed() / 100;
|
||||
var mem_v = (v.MEM_HOURS * 100).toFixed() / 100;
|
||||
var disk_v = (v.DISK_HOURS * 100).toFixed() / 100;
|
||||
|
||||
cpu_total += cpu_v;
|
||||
mem_total += mem_v;
|
||||
disk_total += disk_v;
|
||||
|
||||
cpu_row.push(cpu_v);
|
||||
mem_row.push(mem_v);
|
||||
disk_row.push(disk_v);
|
||||
} else {
|
||||
cpu_row.push(0);
|
||||
mem_row.push(0);
|
||||
disk_row.push(0);
|
||||
}
|
||||
});
|
||||
|
||||
cpu_row[1] = (cpu_total * 100).toFixed() / 100;
|
||||
mem_row[1] = (mem_total * 100).toFixed() / 100;
|
||||
disk_row[1] = (disk_total * 100).toFixed() / 100;
|
||||
|
||||
cpu_dataTable_data.push(cpu_row);
|
||||
mem_dataTable_data.push(mem_row);
|
||||
disk_dataTable_data.push(disk_row);
|
||||
}
|
||||
|
||||
var acct_cpu_dataTable = $("#acct_cpu_datatable",context).dataTable({
|
||||
@ -612,6 +704,14 @@ define(function(require) {
|
||||
]
|
||||
});
|
||||
|
||||
var acct_disk_dataTable = $("#acct_disk_datatable",context).dataTable({
|
||||
"bSortClasses" : false,
|
||||
"bDeferRender": true,
|
||||
"aoColumnDefs": [
|
||||
{ "bSortable": false, "aTargets": ['_all'] },
|
||||
]
|
||||
});
|
||||
|
||||
if (cpu_dataTable_data.length > 0) {
|
||||
acct_cpu_dataTable.fnAddData(cpu_dataTable_data);
|
||||
}
|
||||
@ -619,6 +719,10 @@ define(function(require) {
|
||||
if (mem_dataTable_data.length > 0) {
|
||||
acct_mem_dataTable.fnAddData(mem_dataTable_data);
|
||||
}
|
||||
|
||||
if (disk_dataTable_data.length > 0) {
|
||||
acct_disk_dataTable.fnAddData(disk_dataTable_data);
|
||||
}
|
||||
}
|
||||
|
||||
$("#acct_placeholder", context).hide();
|
||||
|
@ -74,6 +74,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns graph_legend">
|
||||
<h3 class="subheader"><small>{{tr "Disk MB hours"}}</small></h3>
|
||||
</div>
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph" id="acct_disk_graph" style="height: 200px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
{{#advancedSection (tr "Accounting Tables") }}
|
||||
<div class="row acct_table">
|
||||
@ -108,5 +117,21 @@
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row acct_table">
|
||||
<div class="large-12 columns graph_legend">
|
||||
<h3 class="subheader"><small>{{tr "Disk MB hours"}}</small></h3>
|
||||
</div>
|
||||
<div class="large-12 columns" style="overflow:auto">
|
||||
<table id="acct_disk_datatable" class="datatable twelve">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{tr "Date"}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody_acct_disk_datatable">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{{/advancedSection}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -51,7 +51,7 @@ define(function(require) {
|
||||
}
|
||||
|
||||
var humanize = info.humanize_figures ?
|
||||
Humanize.size : function(val) { return val };
|
||||
Humanize.size : function(val) { return (val * 100).toFixed() / 100 };
|
||||
|
||||
var options = {
|
||||
// colors: [ "#cdebf5", "#2ba6cb", "#6f6f6f" ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user