blob: bd328634bb79f6ecdf1ce405241555a989ecdec5 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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.
(function($, cloudStack) {
// Admin dashboard
cloudStack.sections.dashboard = {
title: 'label.menu.dashboard',
show: cloudStack.uiCustom.dashboard,
adminCheck: function(args) {
return isAdmin() ? true : false;
},
// User dashboard
user: {
dataProvider: function(args) {
var dataFns = {
instances: function(data) {
var totalInstanceCount = 0;
$.ajax({
url: createURL("listVirtualMachines"),
data: {
listAll: true,
page: 1,
pageSize: 1
},
async: false,
success: function(json) {
if (json.listvirtualmachinesresponse.count != undefined) {
totalInstanceCount = json.listvirtualmachinesresponse.count;
}
}
});
var RunningInstanceCount = 0;
$.ajax({
url: createURL("listVirtualMachines"),
data: {
listAll: true,
page: 1,
pageSize: 1,
state: "Running"
},
async: false,
success: function(json) {
if (json.listvirtualmachinesresponse.count != undefined) {
RunningInstanceCount = json.listvirtualmachinesresponse.count;
}
}
});
var stoppedInstanceCount = 0;
$.ajax({
url: createURL("listVirtualMachines"),
data: {
listAll: true,
page: 1,
pageSize: 1,
state: "Stopped"
},
async: false,
success: function(json) {
if (json.listvirtualmachinesresponse.count != undefined) {
stoppedInstanceCount = json.listvirtualmachinesresponse.count;
}
}
});
dataFns.account($.extend(data, {
runningInstances: RunningInstanceCount,
stoppedInstances: stoppedInstanceCount,
totalInstances: totalInstanceCount
}));
},
account: function(data) {
var user = cloudStack.context.users[0];
dataFns.events($.extend(data, {
accountID: user.userid,
accountName: user.account,
userName: user.username,
accountType: user.role,
accountDomainID: user.domainid
}));
},
events: function(data) {
$.ajax({
url: createURL('listEvents'),
data: {
listAll: true,
page: 1,
pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited)
//pageSize: 1 //for testing only
},
success: function(json) {
dataFns.ipAddresses($.extend(data, {
events: json.listeventsresponse.event ? json.listeventsresponse.event : []
}));
}
});
},
ipAddresses: function(data) {
$.ajax({
url: createURL('listNetworks'),
data: {
listAll: true,
page: 1,
pageSize: 1,
type: 'isolated',
supportedServices: 'SourceNat'
},
success: function(json) {
var netTotal = json.listnetworksresponse.count ?
json.listnetworksresponse.count : 0;
$.ajax({
url: createURL('listPublicIpAddresses'),
data: {
page: 1,
pageSize: 1
},
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: 'label.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 (window.fetchLatestflag == 1) {
data.fetchLatest = true;
} else {
data.fetchLatest = false;
}
window.fetchLatestflag = 0;
dataFns.alerts(data);
},
alerts: function(data) {
$.ajax({
url: createURL('listAlerts'),
data: {
page: 1,
pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited)
},
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,
sent: cloudStack.converters.toLocalDate(alert.sent)
};
})
}));
}
});
},
hostAlerts: function(data) {
$.ajax({
url: createURL('listHosts'),
data: {
state: 'Alert',
page: 1,
pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited)
},
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: 'message.alert.state.detected'
};
})
}));
}
});
},
zoneCapacity: function(data) {
$.ajax({
url: createURL('listCapacity'),
data: {
fetchLatest: data.fetchLatest,
sortBy: 'usage',
page: 0,
pageSize: (pageSize > 8? 8: pageSize)
},
success: function(json) {
var capacities = json.listcapacityresponse.capacity ?
json.listcapacityresponse.capacity : [];
complete($.extend(data, {
zoneCapacities: $.map(capacities, function(capacity) {
if (capacity.podname) {
capacity.zonename = capacity.zonename.concat(', ' + _l('label.pod') + ': ' + capacity.podname);
}
if (capacity.clustername) {
capacity.zonename = capacity.zonename.concat(', ' + _l('label.cluster') + ': ' + capacity.clustername);
}
capacity.zonename.replace('Zone:', _l('label.zone') + ':');
return {
zoneID: capacity.zoneid, // Temporary fix for dashboard
zoneName: capacity.zonename,
type: cloudStack.converters.toCapacityCountType(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);