System, main routers page: Split into subsections (WIP)

This commit is contained in:
Brian Federle 2013-11-21 13:54:50 -08:00
parent 285c06865c
commit b4282c214f

View File

@ -7391,7 +7391,11 @@
return listView;
},
virtualRouters: function() {
var listView = $.extend(true, {}, cloudStack.sections.system.subsections.virtualRouters.listView, {
var listView = $.extend(true, {}, cloudStack.sections.system.subsections.virtualRouters, {
//???????
sections: {
virtualRouterNoGrouping: {
listView: {
actions: {
upgradeRouterToUseNewerTemplate: {
isHeader: true,
@ -7802,6 +7806,10 @@
};
}
}
}
}
}
//???????
});
return listView;
@ -7882,9 +7890,17 @@
}),
subsections: {
virtualRouters: {
listView: {
label: 'label.virtual.appliances',
sectionSelect: {
label: 'label.select-view'
},
sections: {
routerNoGroup: {
id: 'routers',
type: 'select',
title: '(no grouping)',
listView: {
id: 'routers',
label: 'label.virtual.appliances',
fields: {
name: {
label: 'label.name'
@ -8053,7 +8069,7 @@
var routers = [];
$.ajax({
url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
data: data2,
success: function(json) {
var items = json.listroutersresponse.router ?
@ -8064,7 +8080,7 @@
});
// Get project routers
$.ajax({
url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
data: data2,
success: function(json) {
var items = json.listroutersresponse.router ?
@ -8457,9 +8473,22 @@
hiddenFields.push('project');
hiddenFields.push('projectid');
}
if (selectedZoneObj.networktype == 'Basic') {
$.ajax({
url: createURL('listZones'),
data: {
id: args.context.routers[0].zoneid
},
async: false,
success: function(json) {
if (json.listzonesresponse.zone != undefined) {
var zoneObj = json.listzonesresponse.zone[0];
if (zoneObj.networktype == 'Basic') {
hiddenFields.push('publicip'); //In Basic zone, guest IP is public IP. So, publicip is not returned by listRouters API. Only guestipaddress is returned by listRouters API.
}
}
}
});
return hiddenFields;
},
fields: [{
@ -8608,6 +8637,751 @@
}
}
},
routerByZone: {
id: 'routers',
type: 'select',
title: 'By zone',
listView: {
label: 'label.virtual.appliances',
id: 'routers',
fields: {
name: {
label: 'label.name'
},
zonename: {
label: 'label.zone'
},
routerType: {
label: 'label.type'
},
state: {
converter: function(str) {
// For localization
return str;
},
label: 'label.status',
indicator: {
'Running': 'on',
'Stopped': 'off',
'Error': 'off'
}
}
},
advSearchFields: {
name: {
label: 'Name'
},
zoneid: {
label: 'Zone',
select: function(args) {
$.ajax({
url: createURL('listZones'),
data: {
listAll: true
},
success: function(json) {
var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone : [];
args.response.success({
data: $.map(zones, function(zone) {
return {
id: zone.id,
description: zone.name
};
})
});
}
});
}
},
podid: {
label: 'Pod',
dependsOn: 'zoneid',
select: function (args) {
$.ajax({
url: createURL("listPods&zoneid=" + args.zoneid),
dataType: "json",
async: true,
success: function (json) {
var pods = json.listpodsresponse.pod ? json.listpodsresponse.pod : [];
args.response.success({
data: $.map(pods, function(pod) {
return {
id: pod.id,
description: pod.name
};
})
});
}
});
}
},
clusterid: {
label: 'label.cluster',
dependsOn: 'podid',
select: function(args) {
$.ajax({
url: createURL("listClusters&podid=" + args.podid),
dataType: "json",
async: false,
success: function(json) {
var clusters = json.listclustersresponse.cluster ? json.listclustersresponse.cluster : [];
args.response.success({
data: $.map(clusters, function(cluster) {
return {
id: cluster.id,
description: cluster.name
};
})
});
}
});
}
},
domainid: {
label: 'Domain',
select: function(args) {
if (isAdmin() || isDomainAdmin()) {
$.ajax({
url: createURL('listDomains'),
data: {
listAll: true,
details: 'min'
},
success: function(json) {
var array1 = [{
id: '',
description: ''
}];
var domains = json.listdomainsresponse.domain;
if (domains != null && domains.length > 0) {
for (var i = 0; i < domains.length; i++) {
array1.push({
id: domains[i].id,
description: domains[i].path
});
}
}
args.response.success({
data: array1
});
}
});
} else {
args.response.success({
data: null
});
}
},
isHidden: function(args) {
if (isAdmin() || isDomainAdmin())
return false;
else
return true;
}
},
account: {
label: 'Account',
isHidden: function(args) {
if (isAdmin() || isDomainAdmin())
return false;
else
return true;
}
}
},
dataProvider: function(args) {
var array1 = [];
if (args.filterBy != null) {
if (args.filterBy.search != null && args.filterBy.search.by != null && args.filterBy.search.value != null) {
switch (args.filterBy.search.by) {
case "name":
if (args.filterBy.search.value.length > 0)
array1.push("&keyword=" + args.filterBy.search.value);
break;
}
}
}
var data2 = {
forvpc: false
};
var routers = [];
$.ajax({
url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
data: data2,
success: function(json) {
var items = json.listroutersresponse.router ?
json.listroutersresponse.router : [];
$(items).map(function(index, item) {
routers.push(item);
});
// Get project routers
$.ajax({
url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
data: data2,
success: function(json) {
var items = json.listroutersresponse.router ?
json.listroutersresponse.router : [];
$(items).map(function(index, item) {
routers.push(item);
});
args.response.success({
actionFilter: routerActionfilter,
data: $(routers).map(mapRouterType)
});
}
});
}
});
},
detailView: {
name: 'Virtual applicance details',
actions: {
start: {
label: 'label.action.start.router',
messages: {
confirm: function(args) {
return 'message.action.start.router';
},
notification: function(args) {
return 'label.action.start.router';
}
},
action: function(args) {
$.ajax({
url: createURL('startRouter&id=' + args.context.routers[0].id),
dataType: 'json',
async: true,
success: function(json) {
var jid = json.startrouterresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function(json) {
return json.queryasyncjobresultresponse.jobresult.domainrouter;
},
getActionFilter: function() {
return routerActionfilter;
}
}
});
}
});
},
notification: {
poll: pollAsyncJobResult
}
},
stop: {
label: 'label.action.stop.router',
createForm: {
title: 'label.action.stop.router',
desc: 'message.action.stop.router',
fields: {
forced: {
label: 'force.stop',
isBoolean: true,
isChecked: false
}
}
},
messages: {
notification: function(args) {
return 'label.action.stop.router';
}
},
action: function(args) {
var array1 = [];
array1.push("&forced=" + (args.data.forced == "on"));
$.ajax({
url: createURL('stopRouter&id=' + args.context.routers[0].id + array1.join("")),
dataType: 'json',
async: true,
success: function(json) {
var jid = json.stoprouterresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function(json) {
return json.queryasyncjobresultresponse.jobresult.domainrouter;
},
getActionFilter: function() {
return routerActionfilter;
}
}
});
}
});
},
notification: {
poll: pollAsyncJobResult
}
},
upgradeRouterToUseNewerTemplate: {
label: 'Upgrade Router to Use Newer Template',
messages: {
confirm: function(args) {
return 'Please confirm that you want to upgrade router to use newer template';
},
notification: function (args) {
return 'Upgrade Router to Use Newer Template';
}
},
action: function (args) {
$.ajax({
url: createURL('upgradeRouterTemplate'),
data: {
id: args.context.routers[0].id
},
success: function (json) {
var jobs = json.upgraderoutertemplateresponse.asyncjobs;
if (jobs != undefined) {
args.response.success({
_custom: {
jobId: jobs[0].jobid
}
});
}
}
});
},
notification: {
poll: pollAsyncJobResult
}
},
'remove': {
label: 'label.destroy.router',
messages: {
confirm: function(args) {
return 'message.confirm.destroy.router';
},
notification: function(args) {
return 'label.destroy.router';
}
},
action: function(args) {
$.ajax({
url: createURL("destroyRouter&id=" + args.context.routers[0].id),
dataType: "json",
async: true,
success: function(json) {
var jid = json.destroyrouterresponse.jobid;
args.response.success({
_custom: {
jobId: jid
}
});
}
});
},
notification: {
poll: pollAsyncJobResult
}
},
restart: {
label: 'label.action.reboot.router',
messages: {
confirm: function(args) {
return 'message.action.reboot.router';
},
notification: function(args) {
return 'label.action.reboot.router';
}
},
action: function(args) {
$.ajax({
url: createURL('rebootRouter&id=' + args.context.routers[0].id),
dataType: 'json',
async: true,
success: function(json) {
var jid = json.rebootrouterresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function(json) {
return json.queryasyncjobresultresponse.jobresult.domainrouter;
},
getActionFilter: function() {
return routerActionfilter;
}
}
});
}
});
},
notification: {
poll: pollAsyncJobResult
}
},
migrate: {
label: 'label.action.migrate.router',
createForm: {
title: 'label.action.migrate.router',
desc: '',
fields: {
hostId: {
label: 'label.host',
validation: {
required: true
},
select: function(args) {
$.ajax({
url: createURL("findHostsForMigration&VirtualMachineId=" + args.context.routers[0].id),
dataType: "json",
async: true,
success: function(json) {
var hostObjs = json.findhostsformigrationresponse.host;
var items = [];
$(hostObjs).each(function() {
items.push({
id: this.id,
description: (this.name + " (" + (this.suitableformigration ? "Suitable" : "Not Suitable") + ")")
});
});
args.response.success({
data: items
});
}
});
},
error: function(XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
args.response.error(errorMsg);
}
}
}
},
messages: {
notification: function(args) {
return 'label.action.migrate.router';
}
},
action: function(args) {
$.ajax({
url: createURL("migrateSystemVm&hostid=" + args.data.hostId + "&virtualmachineid=" + args.context.routers[0].id),
dataType: "json",
async: true,
success: function(json) {
var jid = json.migratesystemvmresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function(json) {
//return json.queryasyncjobresultresponse.jobresult.systemvminstance; //not all properties returned in systemvminstance
$.ajax({
url: createURL("listRouters&id=" + json.queryasyncjobresultresponse.jobresult.systemvminstance.id),
dataType: "json",
async: false,
success: function(json) {
var items = json.listroutersresponse.router;
if (items != null && items.length > 0) {
return items[0];
}
}
});
},
getActionFilter: function() {
return routerActionfilter;
}
}
});
}
});
},
notification: {
poll: pollAsyncJobResult
}
},
scaleUp: {
label: 'label.change.service.offering',
createForm: {
title: 'label.change.service.offering',
desc: function(args) {
var description = '';
var vmObj = args.jsonObj;
//if (vmObj.state == 'Running' && vmObj.hypervisor == 'VMware') { //needs to wait for API fix that will return hypervisor property
if (vmObj.state == 'Running') {
description = 'Please read the dynamic scaling section in the admin guide before scaling up.';
}
return description;
},
fields: {
serviceOfferingId: {
label: 'label.compute.offering',
select: function(args) {
$.ajax({
url: createURL('listServiceOfferings'),
data: {
issystem: true,
systemvmtype: 'domainrouter'
},
success: function(json) {
var serviceofferings = json.listserviceofferingsresponse.serviceoffering;
var items = [];
$(serviceofferings).each(function() {
// if(this.id != args.context.routers[0].serviceofferingid) {
items.push({
id: this.id,
description: this.name
}); //default one (i.e. "System Offering For Software Router") doesn't have displaytext property. So, got to use name property instead.
});
args.response.success({
data: items
});
}
});
}
}
}
},
action: function(args) {
$.ajax({
url: createURL("scaleSystemVm&id=" + args.context.routers[0].id + "&serviceofferingid=" + args.data.serviceOfferingId),
dataType: "json",
async: true,
success: function(json) {
var jid = json.changeserviceforsystemvmresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function(json) {
return json.queryasyncjobresultresponse.jobresult.systemvm;
},
getActionFilter: function() {
return routerActionfilter;
}
}
});
},
error: function(json) {
args.response.error(parseXMLHttpResponse(json));
}
});
},
messages: {
confirm: function(args) {
return 'Do you really want to scale up the Router VM ?';
},
notification: function(args) {
return 'Router VM Scaled Up';
}
},
notification: {
poll: pollAsyncJobResult
}
},
viewConsole: {
label: 'label.view.console',
action: {
externalLink: {
url: function(args) {
return clientConsoleUrl + '?cmd=access&vm=' + args.context.routers[0].id;
},
title: function(args) {
return args.context.routers[0].id.substr(0, 8); //title in window.open() can't have space nor longer than 8 characters. Otherwise, IE browser will have error.
},
width: 820,
height: 640
}
}
}
},
tabs: {
details: {
title: 'label.details',
preFilter: function(args) {
var hiddenFields = [];
if (!args.context.routers[0].project) {
hiddenFields.push('project');
hiddenFields.push('projectid');
}
$.ajax({
url: createURL('listZones'),
data: {
id: args.context.routers[0].zoneid
},
async: false,
success: function(json) {
if (json.listzonesresponse.zone != undefined) {
var zoneObj = json.listzonesresponse.zone[0];
if (zoneObj.networktype == 'Basic') {
hiddenFields.push('publicip'); //In Basic zone, guest IP is public IP. So, publicip is not returned by listRouters API. Only guestipaddress is returned by listRouters API.
}
}
}
});
return hiddenFields;
},
fields: [{
name: {
label: 'label.name'
},
project: {
label: 'label.project'
}
}, {
id: {
label: 'label.id'
},
projectid: {
label: 'label.project.id'
},
state: {
label: 'label.state'
},
version: {
label: 'label.version'
},
requiresupgrade: {
label: 'Requires Upgrade',
converter: cloudStack.converters.toBooleanText
},
guestnetworkid: {
label: 'label.network.id'
},
publicip: {
label: 'label.public.ip'
},
guestipaddress: {
label: 'label.guest.ip'
},
linklocalip: {
label: 'label.linklocal.ip'
},
hostname: {
label: 'label.host'
},
serviceofferingname: {
label: 'label.compute.offering'
},
networkdomain: {
label: 'label.network.domain'
},
domain: {
label: 'label.domain'
},
account: {
label: 'label.account'
},
created: {
label: 'label.created',
converter: cloudStack.converters.toLocalDate
},
isredundantrouter: {
label: 'label.redundant.router',
converter: cloudStack.converters.toBooleanText
},
redundantRouterState: {
label: 'label.redundant.state'
},
vpcid: {
label: 'VPC ID'
}
}],
dataProvider: function(args) {
$.ajax({
url: createURL("listRouters&id=" + args.context.routers[0].id),
dataType: 'json',
async: true,
success: function(json) {
var jsonObj = json.listroutersresponse.router[0];
addExtraPropertiesToRouterInstanceObject(jsonObj);
args.response.success({
actionFilter: routerActionfilter,
data: jsonObj
});
}
});
}
},
nics: {
title: 'label.nics',
multiple: true,
fields: [{
name: {
label: 'label.name',
header: true
},
type: {
label: 'label.type'
},
traffictype: {
label: 'label.traffic.type'
},
networkname: {
label: 'label.network.name'
},
netmask: {
label: 'label.netmask'
},
ipaddress: {
label: 'label.ip.address'
},
id: {
label: 'label.id'
},
networkid: {
label: 'label.network.id'
},
isolationuri: {
label: 'label.isolation.uri'
},
broadcasturi: {
label: 'label.broadcast.uri'
}
}],
dataProvider: function(args) {
$.ajax({
url: createURL("listRouters&id=" + args.context.routers[0].id),
dataType: 'json',
async: true,
success: function(json) {
var jsonObj = json.listroutersresponse.router[0].nic;
args.response.success({
actionFilter: routerActionfilter,
data: $.map(jsonObj, function(nic, index) {
var name = 'NIC ' + (index + 1);
if (nic.isdefault) {
name += ' (' + _l('label.default') + ')';
}
return $.extend(nic, {
name: name
});
})
});
}
});
}
}
}
}
}
}
}
},
systemVms: {
listView: {
label: 'label.system.vms',