Bug #:5975

Merge from 2.1.x

- Fixed issue where listAccounts only return one less than the actual number of accounts in the system.  That is because the SQL query asks for X accounts, but the API filters out the SYSTEM account.  The fix is to add the filter of the system account in the actual query itself rather than have the code do it.

Conflicts:

	server/src/com/cloud/api/commands/ListAccountsCmd.java
This commit is contained in:
will 2010-08-25 18:20:49 -07:00
parent e5bdec33f9
commit f8c93cd5fa
2 changed files with 207 additions and 205 deletions

View File

@ -130,109 +130,107 @@ public class ListAccountsCmd extends BaseCmd{
for (AccountVO accountO : accounts) { for (AccountVO accountO : accounts) {
boolean accountIsAdmin = (accountO.getType() == Account.ACCOUNT_TYPE_ADMIN); boolean accountIsAdmin = (accountO.getType() == Account.ACCOUNT_TYPE_ADMIN);
if ((accountO.getRemoved() == null)&&(accountO.getId() != 1)) { List<Pair<String, Object>> accountData = new ArrayList<Pair<String, Object>>();
List<Pair<String, Object>> accountData = new ArrayList<Pair<String, Object>>(); accountData.add(new Pair<String, Object>(BaseCmd.Properties.ID.getName(), Long.valueOf(accountO.getId()).toString()));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.ID.getName(), Long.valueOf(accountO.getId()).toString())); accountData.add(new Pair<String, Object>(BaseCmd.Properties.NAME.getName(), accountO.getAccountName()));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.NAME.getName(), accountO.getAccountName())); accountData.add(new Pair<String, Object>(BaseCmd.Properties.ACCOUNT_TYPE.getName(), Short.valueOf(accountO.getType()).toString()));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.ACCOUNT_TYPE.getName(), Short.valueOf(accountO.getType()).toString()));
Domain domain = getManagementServer().findDomainIdById(accountO.getDomainId()); Domain domain = getManagementServer().findDomainIdById(accountO.getDomainId());
accountData.add(new Pair<String, Object>(BaseCmd.Properties.DOMAIN_ID.getName(), Long.toString(domain.getId()))); accountData.add(new Pair<String, Object>(BaseCmd.Properties.DOMAIN_ID.getName(), Long.toString(domain.getId())));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.DOMAIN.getName(), domain.getName())); accountData.add(new Pair<String, Object>(BaseCmd.Properties.DOMAIN.getName(), domain.getName()));
//get network stat //get network stat
List<UserStatisticsVO> stats = getManagementServer().listUserStatsBy(accountO.getId()); List<UserStatisticsVO> stats = getManagementServer().listUserStatsBy(accountO.getId());
if (stats == null) { if (stats == null) {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error searching for user stats"); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error searching for user stats");
} }
long bytesSent = 0; long bytesSent = 0;
long bytesReceived = 0; long bytesReceived = 0;
for (UserStatisticsVO stat : stats) { for (UserStatisticsVO stat : stats) {
long rx = stat.getNetBytesReceived() + stat.getCurrentBytesReceived(); long rx = stat.getNetBytesReceived() + stat.getCurrentBytesReceived();
long tx = stat.getNetBytesSent() + stat.getCurrentBytesSent(); long tx = stat.getNetBytesSent() + stat.getCurrentBytesSent();
bytesReceived = bytesReceived + Long.valueOf(rx); bytesReceived = bytesReceived + Long.valueOf(rx);
bytesSent = bytesSent + Long.valueOf(tx); bytesSent = bytesSent + Long.valueOf(tx);
} }
accountData.add(new Pair<String, Object>(BaseCmd.Properties.BYTES_RECEIVED.getName(), Long.valueOf(bytesReceived).toString())); accountData.add(new Pair<String, Object>(BaseCmd.Properties.BYTES_RECEIVED.getName(), Long.valueOf(bytesReceived).toString()));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.BYTES_SENT.getName(), Long.valueOf(bytesSent).toString())); accountData.add(new Pair<String, Object>(BaseCmd.Properties.BYTES_SENT.getName(), Long.valueOf(bytesSent).toString()));
// Get resource limits and counts // Get resource limits and counts
long vmLimit = getManagementServer().findCorrectResourceLimit(ResourceType.user_vm, accountO.getId()); long vmLimit = getManagementServer().findCorrectResourceLimit(ResourceType.user_vm, accountO.getId());
String vmLimitDisplay = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit); String vmLimitDisplay = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit);
long vmTotal = getManagementServer().getResourceCount(ResourceType.user_vm, accountO.getId()); long vmTotal = getManagementServer().getResourceCount(ResourceType.user_vm, accountO.getId());
String vmAvail = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit - vmTotal); String vmAvail = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit - vmTotal);
accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_LIMIT.getName(), vmLimitDisplay)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_LIMIT.getName(), vmLimitDisplay));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_TOTAL.getName(), vmTotal)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_TOTAL.getName(), vmTotal));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_AVAIL.getName(), vmAvail)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_AVAIL.getName(), vmAvail));
long ipLimit = getManagementServer().findCorrectResourceLimit(ResourceType.public_ip, accountO.getId()); long ipLimit = getManagementServer().findCorrectResourceLimit(ResourceType.public_ip, accountO.getId());
String ipLimitDisplay = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit); String ipLimitDisplay = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit);
long ipTotal = getManagementServer().getResourceCount(ResourceType.public_ip, accountO.getId()); long ipTotal = getManagementServer().getResourceCount(ResourceType.public_ip, accountO.getId());
String ipAvail = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit - ipTotal); String ipAvail = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit - ipTotal);
accountData.add(new Pair<String, Object>(BaseCmd.Properties.IP_LIMIT.getName(), ipLimitDisplay)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.IP_LIMIT.getName(), ipLimitDisplay));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.IP_TOTAL.getName(), ipTotal)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.IP_TOTAL.getName(), ipTotal));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.IP_AVAIL.getName(), ipAvail)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.IP_AVAIL.getName(), ipAvail));
long volumeLimit = getManagementServer().findCorrectResourceLimit(ResourceType.volume, accountO.getId()); long volumeLimit = getManagementServer().findCorrectResourceLimit(ResourceType.volume, accountO.getId());
String volumeLimitDisplay = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit); String volumeLimitDisplay = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit);
long volumeTotal = getManagementServer().getResourceCount(ResourceType.volume, accountO.getId()); long volumeTotal = getManagementServer().getResourceCount(ResourceType.volume, accountO.getId());
String volumeAvail = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit - volumeTotal); String volumeAvail = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit - volumeTotal);
accountData.add(new Pair<String, Object>(BaseCmd.Properties.VOLUME_LIMIT.getName(), volumeLimitDisplay)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.VOLUME_LIMIT.getName(), volumeLimitDisplay));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.VOLUME_TOTAL.getName(), volumeTotal)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.VOLUME_TOTAL.getName(), volumeTotal));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.VOLUME_AVAIL.getName(), volumeAvail)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.VOLUME_AVAIL.getName(), volumeAvail));
long snapshotLimit = getManagementServer().findCorrectResourceLimit(ResourceType.snapshot, accountO.getId()); long snapshotLimit = getManagementServer().findCorrectResourceLimit(ResourceType.snapshot, accountO.getId());
String snapshotLimitDisplay = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit); String snapshotLimitDisplay = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit);
long snapshotTotal = getManagementServer().getResourceCount(ResourceType.snapshot, accountO.getId()); long snapshotTotal = getManagementServer().getResourceCount(ResourceType.snapshot, accountO.getId());
String snapshotAvail = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit - snapshotTotal); String snapshotAvail = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit - snapshotTotal);
accountData.add(new Pair<String, Object>(BaseCmd.Properties.SNAPSHOT_LIMIT.getName(), snapshotLimitDisplay)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.SNAPSHOT_LIMIT.getName(), snapshotLimitDisplay));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.SNAPSHOT_TOTAL.getName(), snapshotTotal)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.SNAPSHOT_TOTAL.getName(), snapshotTotal));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.SNAPSHOT_AVAIL.getName(), snapshotAvail)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.SNAPSHOT_AVAIL.getName(), snapshotAvail));
long templateLimit = getManagementServer().findCorrectResourceLimit(ResourceType.template, accountO.getId()); long templateLimit = getManagementServer().findCorrectResourceLimit(ResourceType.template, accountO.getId());
String templateLimitDisplay = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit); String templateLimitDisplay = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit);
long templateTotal = getManagementServer().getResourceCount(ResourceType.template, accountO.getId()); long templateTotal = getManagementServer().getResourceCount(ResourceType.template, accountO.getId());
String templateAvail = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit - templateTotal); String templateAvail = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit - templateTotal);
accountData.add(new Pair<String, Object>(BaseCmd.Properties.TEMPLATE_LIMIT.getName(), templateLimitDisplay)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.TEMPLATE_LIMIT.getName(), templateLimitDisplay));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.TEMPLATE_TOTAL.getName(), templateTotal)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.TEMPLATE_TOTAL.getName(), templateTotal));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.TEMPLATE_AVAIL.getName(), templateAvail)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.TEMPLATE_AVAIL.getName(), templateAvail));
// Get stopped and running VMs // Get stopped and running VMs
int vmStopped = 0; int vmStopped = 0;
int vmRunning = 0; int vmRunning = 0;
Long[] accountIds = new Long[1]; Long[] accountIds = new Long[1];
accountIds[0] = accountO.getId(); accountIds[0] = accountO.getId();
Criteria c1 = new Criteria(); Criteria c1 = new Criteria();
c1.addCriteria(Criteria.ACCOUNTID, accountIds); c1.addCriteria(Criteria.ACCOUNTID, accountIds);
List<? extends UserVm> virtualMachines = getManagementServer().searchForUserVMs(c1); List<? extends UserVm> virtualMachines = getManagementServer().searchForUserVMs(c1);
//get Running/Stopped VMs //get Running/Stopped VMs
for (Iterator<? extends UserVm> iter = virtualMachines.iterator(); iter.hasNext();) { for (Iterator<? extends UserVm> iter = virtualMachines.iterator(); iter.hasNext();) {
// count how many stopped/running vms we have // count how many stopped/running vms we have
UserVm vm = iter.next(); UserVm vm = iter.next();
if (vm.getState() == State.Stopped) { if (vm.getState() == State.Stopped) {
vmStopped++; vmStopped++;
} else if (vm.getState() == State.Running) { } else if (vm.getState() == State.Running) {
vmRunning++; vmRunning++;
} }
} }
accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_STOPPED.getName(), vmStopped)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_STOPPED.getName(), vmStopped));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_RUNNING.getName(), vmRunning)); accountData.add(new Pair<String, Object>(BaseCmd.Properties.VM_RUNNING.getName(), vmRunning));
//show this info to admins only //show this info to admins only
if (isAdmin == true) { if (isAdmin == true) {
accountData.add(new Pair<String, Object>(BaseCmd.Properties.STATE.getName(), accountO.getState())); accountData.add(new Pair<String, Object>(BaseCmd.Properties.STATE.getName(), accountO.getState()));
accountData.add(new Pair<String, Object>(BaseCmd.Properties.IS_CLEANUP_REQUIRED.getName(), Boolean.valueOf(accountO.getNeedsCleanup()).toString())); accountData.add(new Pair<String, Object>(BaseCmd.Properties.IS_CLEANUP_REQUIRED.getName(), Boolean.valueOf(accountO.getNeedsCleanup()).toString()));
} }
aTag[i++] = accountData; aTag[i++] = accountData;
}
} }
Pair<String, Object> accountTag = new Pair<String, Object>("account", aTag); Pair<String, Object> accountTag = new Pair<String, Object>("account", aTag);
accountTags.add(accountTag); accountTags.add(accountTag);

View File

@ -4402,6 +4402,7 @@ public class ManagementServerImpl implements ManagementServer {
SearchBuilder<AccountVO> sb = _accountDao.createSearchBuilder(); SearchBuilder<AccountVO> sb = _accountDao.createSearchBuilder();
sb.and("accountName", sb.entity().getAccountName(), SearchCriteria.Op.LIKE); sb.and("accountName", sb.entity().getAccountName(), SearchCriteria.Op.LIKE);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("nid", sb.entity().getId(), SearchCriteria.Op.NEQ);
sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ); sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ);
sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
sb.and("needsCleanup", sb.entity().getNeedsCleanup(), SearchCriteria.Op.EQ); sb.and("needsCleanup", sb.entity().getNeedsCleanup(), SearchCriteria.Op.EQ);
@ -4433,6 +4434,9 @@ public class ManagementServerImpl implements ManagementServer {
// I want to join on user_vm.domain_id = domain.id where domain.path like 'foo%' // I want to join on user_vm.domain_id = domain.id where domain.path like 'foo%'
sc.setJoinParameters("domainSearch", "path", domain.getPath() + "%"); sc.setJoinParameters("domainSearch", "path", domain.getPath() + "%");
sc.setParameters("nid", 1L);
} else {
sc.setParameters("nid", 1L);
} }
if (type != null) { if (type != null) {