diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java new file mode 100644 index 00000000000..7b1b0539014 --- /dev/null +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -0,0 +1,188 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.api; + +import java.util.Iterator; +import java.util.List; + +import com.cloud.api.response.AccountResponse; +import com.cloud.api.response.DiskOfferingResponse; +import com.cloud.api.response.DomainResponse; +import com.cloud.api.response.ResourceLimitResponse; +import com.cloud.api.response.UserResponse; +import com.cloud.configuration.ResourceCount.ResourceType; +import com.cloud.configuration.ResourceLimitVO; +import com.cloud.domain.DomainVO; +import com.cloud.server.Criteria; +import com.cloud.storage.DiskOfferingVO; +import com.cloud.user.Account; +import com.cloud.user.UserAccount; +import com.cloud.user.UserStatisticsVO; +import com.cloud.uservm.UserVm; +import com.cloud.vm.State; + +public class ApiResponseHelper { + + public static UserResponse createUserResponse (UserAccount user) { + UserResponse userResponse = new UserResponse(); + + userResponse.setAccountName(user.getAccountName()); + userResponse.setAccountType(user.getType()); + userResponse.setCreated(user.getCreated()); + userResponse.setDomainId(user.getDomainId()); + userResponse.setDomainName(ApiDBUtils.findDomainById(user.getDomainId()).getName()); + userResponse.setEmail(user.getEmail()); + userResponse.setFirstname(user.getFirstname()); + userResponse.setId(user.getId()); + userResponse.setLastname(user.getLastname()); + userResponse.setState(user.getState()); + userResponse.setTimezone(user.getTimezone()); + userResponse.setUsername(user.getUsername()); + userResponse.setApiKey(user.getApiKey()); + userResponse.setSecretKey(user.getSecretKey()); + + return userResponse; + } + + public static AccountResponse createAccountResponse (Account account) { + + boolean accountIsAdmin = (account.getType() == Account.ACCOUNT_TYPE_ADMIN); + AccountResponse accountResponse = new AccountResponse(); + accountResponse.setId(account.getId()); + accountResponse.setName(account.getAccountName()); + accountResponse.setAccountType(account.getType()); + accountResponse.setDomainId(account.getDomainId()); + accountResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName()); + + //get network stat + List stats = ApiDBUtils.listUserStatsBy(account.getId()); + if (stats == null) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error searching for user stats"); + } + + long bytesSent = 0; + long bytesReceived = 0; + for (UserStatisticsVO stat : stats) { + long rx = stat.getNetBytesReceived() + stat.getCurrentBytesReceived(); + long tx = stat.getNetBytesSent() + stat.getCurrentBytesSent(); + bytesReceived = bytesReceived + Long.valueOf(rx); + bytesSent = bytesSent + Long.valueOf(tx); + } + accountResponse.setBytesReceived(bytesReceived); + accountResponse.setBytesSent(bytesSent); + + // Get resource limits and counts + + long vmLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.user_vm, account.getId()); + String vmLimitDisplay = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit); + long vmTotal = ApiDBUtils.getResourceCount(ResourceType.user_vm, account.getId()); + String vmAvail = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit - vmTotal); + accountResponse.setVmLimit(vmLimitDisplay); + accountResponse.setVmTotal(vmTotal); + accountResponse.setVmAvailable(vmAvail); + + long ipLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.public_ip, account.getId()); + String ipLimitDisplay = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit); + long ipTotal = ApiDBUtils.getResourceCount(ResourceType.public_ip, account.getId()); + String ipAvail = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit - ipTotal); + accountResponse.setIpLimit(ipLimitDisplay); + accountResponse.setIpTotal(ipTotal); + accountResponse.setIpAvailable(ipAvail); + + long volumeLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.volume, account.getId()); + String volumeLimitDisplay = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit); + long volumeTotal = ApiDBUtils.getResourceCount(ResourceType.volume, account.getId()); + String volumeAvail = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit - volumeTotal); + accountResponse.setVolumeLimit(volumeLimitDisplay); + accountResponse.setVolumeTotal(volumeTotal); + accountResponse.setVolumeAvailable(volumeAvail); + + long snapshotLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.snapshot, account.getId()); + String snapshotLimitDisplay = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit); + long snapshotTotal = ApiDBUtils.getResourceCount(ResourceType.snapshot, account.getId()); + String snapshotAvail = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit - snapshotTotal); + accountResponse.setSnapshotLimit(snapshotLimitDisplay); + accountResponse.setSnapshotTotal(snapshotTotal); + accountResponse.setSnapshotAvailable(snapshotAvail); + + long templateLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.template, account.getId()); + String templateLimitDisplay = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit); + long templateTotal = ApiDBUtils.getResourceCount(ResourceType.template, account.getId()); + String templateAvail = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit - templateTotal); + accountResponse.setTemplateLimit(templateLimitDisplay); + accountResponse.setTemplateTotal(templateTotal); + accountResponse.setTemplateAvailable(templateAvail); + + // Get stopped and running VMs + int vmStopped = 0; + int vmRunning = 0; + + Long[] accountIds = new Long[1]; + accountIds[0] = account.getId(); + + Criteria c1 = new Criteria(); + c1.addCriteria(Criteria.ACCOUNTID, accountIds); + List virtualMachines = ApiDBUtils.searchForUserVMs(c1); + + //get Running/Stopped VMs + for (Iterator iter = virtualMachines.iterator(); iter.hasNext();) { + // count how many stopped/running vms we have + UserVm vm = iter.next(); + + if (vm.getState() == State.Stopped) { + vmStopped++; + } else if (vm.getState() == State.Running) { + vmRunning++; + } + } + + accountResponse.setVmStopped(vmStopped); + accountResponse.setVmRunning(vmRunning); + + return accountResponse; + } + + public static DomainResponse createDomainResponse (DomainVO domain) { + DomainResponse domainResponse = new DomainResponse(); + domainResponse.setDomainName(domain.getName()); + domainResponse.setId(domain.getId()); + domainResponse.setLevel(domain.getLevel()); + domainResponse.setParentDomainId(domain.getParent()); + if (domain.getParent() != null) { + domainResponse.setParentDomainName(ApiDBUtils.findDomainById(domain.getParent()).getName()); + } + return domainResponse; + } + + public static DiskOfferingResponse createDiskOfferingResponse (DiskOfferingVO offering) { + DiskOfferingResponse diskOfferingResponse = new DiskOfferingResponse(); + diskOfferingResponse.setId(offering.getId()); + diskOfferingResponse.setName(offering.getName()); + diskOfferingResponse.setDisplayText(offering.getDisplayText()); + diskOfferingResponse.setCreated(offering.getCreated()); + diskOfferingResponse.setDiskSize(offering.getDiskSize()); + if(offering.getDomainId() != null){ + diskOfferingResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName()); + diskOfferingResponse.setDomainId(offering.getDomainId()); + } + diskOfferingResponse.setTags(offering.getTags()); + + return diskOfferingResponse; + } + +} diff --git a/server/src/com/cloud/api/commands/CreateDiskOfferingCmd.java b/server/src/com/cloud/api/commands/CreateDiskOfferingCmd.java index 66d7a5172f3..c8267a82228 100755 --- a/server/src/com/cloud/api/commands/CreateDiskOfferingCmd.java +++ b/server/src/com/cloud/api/commands/CreateDiskOfferingCmd.java @@ -20,7 +20,7 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; +import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -89,23 +89,13 @@ public class CreateDiskOfferingCmd extends BaseCmd { @Override @SuppressWarnings("unchecked") public DiskOfferingResponse getResponse() { - DiskOfferingResponse response = new DiskOfferingResponse(); - DiskOfferingVO responseObject = (DiskOfferingVO)getResponseObject(); - if (responseObject != null) { - response.setId(responseObject.getId()); - response.setCreated(responseObject.getCreated()); - response.setDiskSize(responseObject.getDiskSizeInBytes()); - response.setDisplayText(responseObject.getDisplayText()); - response.setDomainId(responseObject.getDomainId()); - response.setDomain(ApiDBUtils.findDomainById(responseObject.getDomainId()).getName()); - response.setName(responseObject.getName()); - response.setTags(responseObject.getTags()); - response.setMirrored(responseObject.isMirrored()); + DiskOfferingVO offering = (DiskOfferingVO)getResponseObject(); + if (offering != null) { + DiskOfferingResponse response = ApiResponseHelper.createDiskOfferingResponse(offering); + response.setResponseName(getName()); + return response; } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create disk offering"); - } - - response.setResponseName(getName()); - return response; + } } } diff --git a/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java b/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java index 4956ed99998..0a8557111d1 100644 --- a/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java +++ b/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; +import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.DiskOfferingResponse; import com.cloud.api.response.ListResponse; -import com.cloud.domain.DomainVO; import com.cloud.storage.DiskOfferingVO; @Implementation(method="searchForDiskOfferings", description="Lists all available disk offerings.") @@ -83,17 +82,7 @@ public class ListDiskOfferingsCmd extends BaseListCmd { ListResponse response = new ListResponse(); List diskOfferingResponses = new ArrayList(); for (DiskOfferingVO offering : offerings) { - DiskOfferingResponse diskOffResp = new DiskOfferingResponse(); - diskOffResp.setCreated(offering.getCreated()); - diskOffResp.setDiskSize(offering.getDiskSizeInBytes()); - diskOffResp.setDisplayText(offering.getDisplayText()); - diskOffResp.setDomainId(offering.getDomainId()); - diskOffResp.setId(offering.getId()); - diskOffResp.setName(offering.getName()); - diskOffResp.setTags(offering.getTags()); - DomainVO domain = ApiDBUtils.findDomainById(offering.getDomainId()); - diskOffResp.setDomain(domain.getName()); - + DiskOfferingResponse diskOffResp = ApiResponseHelper.createDiskOfferingResponse(offering); diskOffResp.setResponseName("diskoffering"); diskOfferingResponses.add(diskOffResp); } diff --git a/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java b/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java index 0700aa8040f..8af4a52eaa7 100644 --- a/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java +++ b/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java @@ -20,17 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; +import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; import com.cloud.api.response.DiskOfferingResponse; -import com.cloud.api.response.ServiceOfferingResponse; -import com.cloud.api.response.SuccessResponse; import com.cloud.configuration.ConfigurationManager; -import com.cloud.offering.NetworkOffering.GuestIpType; -import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.DiskOfferingVO; @Implementation(method="updateDiskOffering", manager=ConfigurationManager.class, description="Updates a disk offering.") @@ -83,37 +78,10 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ return s_name; } -// @SuppressWarnings("unchecked") -// public SuccessResponse getResponse() { -// SuccessResponse response = new SuccessResponse(); -// DiskOfferingVO responseObject = (DiskOfferingVO)getResponseObject(); -// if (responseObject != null) { -// response.setSuccess(Boolean.TRUE); -// } else { -// throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update disk offering"); -// } -// -// response.setResponseName(getName()); -// return response; -// } -// @Override @SuppressWarnings("unchecked") public DiskOfferingResponse getResponse() { DiskOfferingVO offering = (DiskOfferingVO) getResponseObject(); - - DiskOfferingResponse response = new DiskOfferingResponse(); - response.setId(offering.getId()); - response.setName(offering.getName()); - response.setDisplayText(offering.getDisplayText()); - response.setTags(offering.getTags()); - response.setCreated(offering.getCreated()); - response.setDiskSize(offering.getDiskSize()); - if(offering.getDomainId() != null){ - response.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName()); - response.setDomainId(offering.getDomainId()); - } - response.setMirrored(offering.isMirrored()); - response.setTags(offering.getTags()); + DiskOfferingResponse response = ApiResponseHelper.createDiskOfferingResponse(offering); response.setResponseName(getName()); return response; }