mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Use new API call to list capacities, ordered by usage and limited to the top 5 capacites. --Note that, due to API limitations, the UI cannot display what particular pod/cluster the capacity belongs to anymore, as that information is not returned in the response. This can be added again if relevant API changes are made.
264 lines
8.6 KiB
JavaScript
264 lines
8.6 KiB
JavaScript
(function($, cloudStack) {
|
|
// Admin dashboard
|
|
cloudStack.sections.dashboard = {
|
|
title: 'Dashboard',
|
|
show: cloudStack.uiCustom.dashboard,
|
|
|
|
adminCheck: function(args) {
|
|
return isAdmin() ? true : false;
|
|
},
|
|
|
|
// User dashboard
|
|
user: {
|
|
dataProvider: function(args) {
|
|
var dataFns = {
|
|
instances: function(data) {
|
|
$.ajax({
|
|
url: createURL('listVirtualMachines'),
|
|
success: function(json) {
|
|
var instances = json.listvirtualmachinesresponse.virtualmachine ?
|
|
json.listvirtualmachinesresponse.virtualmachine : [];
|
|
|
|
dataFns.account($.extend(data, {
|
|
runningInstances: $.grep(instances, function(instance) {
|
|
return instance.state == 'Running';
|
|
}).length,
|
|
stoppedInstances: $.grep(instances, function(instance) {
|
|
return instance.state == 'Stopped';
|
|
}).length,
|
|
totalInstances: instances.length
|
|
}));
|
|
}
|
|
});
|
|
},
|
|
|
|
account: function(data) {
|
|
var user = cloudStack.context.users[0];
|
|
dataFns.events($.extend(data, {
|
|
accountID: user.userid,
|
|
accountName: user.account,
|
|
userName: user.username,
|
|
accountType: cloudStack.converters.toRole(user.type),
|
|
accountDomainID: user.domainid
|
|
}));
|
|
},
|
|
|
|
events: function(data) {
|
|
$.ajax({
|
|
url: createURL('listEvents'),
|
|
data: {
|
|
listAll: true,
|
|
page: 1,
|
|
pageSize: 4
|
|
},
|
|
success: function(json) {
|
|
dataFns.ipAddresses($.extend(data, {
|
|
events: json.listeventsresponse.event ?
|
|
json.listeventsresponse.event : []
|
|
}));
|
|
}
|
|
});
|
|
},
|
|
|
|
ipAddresses: function(data) {
|
|
$.ajax({
|
|
url: createURL('listNetworks'),
|
|
data: {
|
|
listAll: true,
|
|
type: 'isolated',
|
|
supportedServices: 'SourceNat'
|
|
},
|
|
success: function(json) {
|
|
var netTotal = json.listnetworksresponse.count ?
|
|
json.listnetworksresponse.count : 0;
|
|
|
|
$.ajax({
|
|
url: createURL('listPublicIpAddresses'),
|
|
success: function(json) {
|
|
var ipTotal = json.listpublicipaddressesresponse.count ?
|
|
json.listpublicipaddressesresponse.count : 0;
|
|
|
|
complete($.extend(data, {
|
|
netTotal: netTotal,
|
|
ipTotal: ipTotal
|
|
}));
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
var complete = function(data) {
|
|
args.response.success({
|
|
data: data
|
|
});
|
|
};
|
|
|
|
dataFns.instances({});
|
|
}
|
|
},
|
|
|
|
// Admin dashboard
|
|
admin: {
|
|
zoneDetailView: {
|
|
tabs: {
|
|
resources: {
|
|
title: 'Resources',
|
|
custom: cloudStack.uiCustom.systemChart('resources')
|
|
}
|
|
}
|
|
},
|
|
|
|
dataProvider: function(args) {
|
|
var dataFns = {
|
|
zones: function(data) {
|
|
$.ajax({
|
|
url: createURL('listZones'),
|
|
success: function(json) {
|
|
dataFns.capacity({
|
|
zones: json.listzonesresponse.zone
|
|
});
|
|
}
|
|
});
|
|
},
|
|
capacity: function(data) {
|
|
if (data.zones) {
|
|
$.ajax({
|
|
url: createURL('listCapacity'),
|
|
success: function(json) {
|
|
var capacities = json.listcapacityresponse.capacity;
|
|
|
|
var capacity = function(id, converter) {
|
|
var result = $.grep(capacities, function(capacity) {
|
|
return capacity.type == id;
|
|
});
|
|
return result[0] ? result[0] : {
|
|
capacityused: 0,
|
|
capacitytotal: 0,
|
|
percentused: 0
|
|
};
|
|
};
|
|
|
|
dataFns.alerts($.extend(data, {
|
|
publicIPAllocated: capacity(8).capacityused,
|
|
publicIPTotal: capacity(8).capacitytotal,
|
|
publicIPPercentage: parseInt(capacity(8).percentused),
|
|
privateIPAllocated: capacity(5).capacityused,
|
|
privateIPTotal: capacity(5).capacitytotal,
|
|
privateIPPercentage: parseInt(capacity(8).percentused),
|
|
memoryAllocated: cloudStack.converters.convertBytes(capacity(0).capacityused),
|
|
memoryTotal: cloudStack.converters.convertBytes(capacity(0).capacitytotal),
|
|
memoryPercentage: parseInt(capacity(0).percentused),
|
|
cpuAllocated: cloudStack.converters.convertHz(capacity(1).capacityused),
|
|
cpuTotal: cloudStack.converters.convertHz(capacity(1).capacitytotal),
|
|
cpuPercentage: parseInt(capacity(1).percentused)
|
|
}));
|
|
}
|
|
});
|
|
} else {
|
|
dataFns.alerts($.extend(data, {
|
|
publicIPAllocated: 0,
|
|
publicIPTotal: 0,
|
|
publicIPPercentage: 0,
|
|
privateIPAllocated: 0,
|
|
privateIPTotal: 0,
|
|
privateIPPercentage: 0,
|
|
memoryAllocated: 0,
|
|
memoryTotal: 0,
|
|
memoryPercentage: 0,
|
|
cpuAllocated: 0,
|
|
cpuTotal: 0,
|
|
cpuPercentage: 0
|
|
}));
|
|
}
|
|
},
|
|
|
|
alerts: function(data) {
|
|
$.ajax({
|
|
url: createURL('listAlerts'),
|
|
data: {
|
|
page: 1,
|
|
pageSize: 4
|
|
},
|
|
success: function(json) {
|
|
var alerts = json.listalertsresponse.alert ?
|
|
json.listalertsresponse.alert : [];
|
|
|
|
dataFns.hostAlerts($.extend(data, {
|
|
alerts: $.map(alerts, function(alert) {
|
|
return {
|
|
name: cloudStack.converters.toAlertType(alert.type),
|
|
description: alert.description
|
|
};
|
|
})
|
|
}));
|
|
}
|
|
});
|
|
},
|
|
|
|
hostAlerts: function(data) {
|
|
$.ajax({
|
|
url: createURL('listHosts'),
|
|
data: {
|
|
state: 'Alert',
|
|
page: 1,
|
|
pageSize: 4
|
|
},
|
|
success: function(json) {
|
|
var hosts = json.listhostsresponse.host ?
|
|
json.listhostsresponse.host : [];
|
|
|
|
dataFns.zoneCapacity($.extend(data, {
|
|
hostAlerts: $.map(hosts, function(host) {
|
|
return {
|
|
name: host.name,
|
|
description: 'Alert state detected for ' + host.name
|
|
};
|
|
})
|
|
}));
|
|
}
|
|
});
|
|
},
|
|
|
|
zoneCapacity: function(data) {
|
|
$.ajax({
|
|
url: createURL('listCapacity'),
|
|
data: {
|
|
sortBy: 'usage',
|
|
page: 1,
|
|
pageSize: 5
|
|
},
|
|
success: function(json) {
|
|
var capacities = json.listcapacityresponse.capacity ?
|
|
json.listcapacityresponse.capacity : [];
|
|
|
|
complete($.extend(data, {
|
|
zoneCapacities: $.map(capacities, function(capacity) {
|
|
return {
|
|
zoneID: capacity.zoneid, // Temporary fix for dashboard
|
|
zoneName: capacity.zonename,
|
|
type: cloudStack.converters.toAlertType(capacity.type),
|
|
percent: parseInt(capacity.percentused),
|
|
used: cloudStack.converters.convertByType(capacity.type, capacity.capacityused),
|
|
total: cloudStack.converters.convertByType(capacity.type, capacity.capacitytotal)
|
|
};
|
|
})
|
|
}));
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
var complete = function(data) {
|
|
args.response.success({
|
|
data: data
|
|
});
|
|
};
|
|
|
|
dataFns.zones({});
|
|
}
|
|
}
|
|
};
|
|
})(jQuery, cloudStack);
|