mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
244 lines
13 KiB
Java
244 lines
13 KiB
Java
// 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.
|
|
package com.cloud.api.query.dao;
|
|
|
|
import java.util.List;
|
|
|
|
import javax.ejb.Local;
|
|
import javax.inject.Inject;
|
|
|
|
import org.apache.log4j.Logger;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import org.apache.cloudstack.api.ResponseObject.ResponseView;
|
|
import org.apache.cloudstack.api.response.AccountResponse;
|
|
import org.apache.cloudstack.api.response.AclGroupResponse;
|
|
import org.apache.cloudstack.api.response.ResourceLimitAndCountResponse;
|
|
import org.apache.cloudstack.api.response.UserResponse;
|
|
|
|
import com.cloud.api.ApiDBUtils;
|
|
import com.cloud.api.query.ViewResponseHelper;
|
|
import com.cloud.api.query.vo.AccountJoinVO;
|
|
import com.cloud.api.query.vo.AclGroupJoinVO;
|
|
import com.cloud.api.query.vo.UserAccountJoinVO;
|
|
import com.cloud.configuration.Resource.ResourceType;
|
|
import com.cloud.user.Account;
|
|
import com.cloud.user.AccountManager;
|
|
import com.cloud.utils.db.GenericDaoBase;
|
|
import com.cloud.utils.db.SearchBuilder;
|
|
import com.cloud.utils.db.SearchCriteria;
|
|
|
|
@Component
|
|
@Local(value={AccountJoinDao.class})
|
|
public class AccountJoinDaoImpl extends GenericDaoBase<AccountJoinVO, Long> implements AccountJoinDao {
|
|
public static final Logger s_logger = Logger.getLogger(AccountJoinDaoImpl.class);
|
|
|
|
private final SearchBuilder<AccountJoinVO> acctIdSearch;
|
|
@Inject
|
|
public AccountManager _accountMgr;
|
|
|
|
protected AccountJoinDaoImpl() {
|
|
|
|
acctIdSearch = createSearchBuilder();
|
|
acctIdSearch.and("id", acctIdSearch.entity().getId(), SearchCriteria.Op.EQ);
|
|
acctIdSearch.done();
|
|
|
|
_count = "select count(distinct id) from account_view WHERE ";
|
|
}
|
|
|
|
@Override
|
|
public AccountResponse newAccountResponse(ResponseView view, AccountJoinVO account) {
|
|
AccountResponse accountResponse = new AccountResponse();
|
|
accountResponse.setId(account.getUuid());
|
|
accountResponse.setName(account.getAccountName());
|
|
accountResponse.setAccountType(account.getType());
|
|
accountResponse.setDomainId(account.getDomainUuid());
|
|
accountResponse.setDomainName(account.getDomainName());
|
|
accountResponse.setState(account.getState().toString());
|
|
accountResponse.setNetworkDomain(account.getNetworkDomain());
|
|
accountResponse.setDefaultZone(account.getDataCenterUuid());
|
|
accountResponse.setIsDefault(account.isDefault());
|
|
|
|
// get network stat
|
|
accountResponse.setBytesReceived(account.getBytesReceived());
|
|
accountResponse.setBytesSent(account.getBytesSent());
|
|
|
|
boolean fullView = (view == ResponseView.Full);
|
|
setResourceLimits(account, fullView, accountResponse);
|
|
|
|
//get resource limits for projects
|
|
long projectLimit = ApiDBUtils.findCorrectResourceLimit(account.getProjectLimit(), account.getId(), ResourceType.project);
|
|
String projectLimitDisplay = (fullView || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit);
|
|
long projectTotal = (account.getProjectTotal() == null) ? 0 : account.getProjectTotal();
|
|
String projectAvail = (fullView || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit - projectTotal);
|
|
accountResponse.setProjectLimit(projectLimitDisplay);
|
|
accountResponse.setProjectTotal(projectTotal);
|
|
accountResponse.setProjectAvailable(projectAvail);
|
|
|
|
// set async job
|
|
if (account.getJobId() != null) {
|
|
accountResponse.setJobId(account.getJobUuid());
|
|
accountResponse.setJobStatus(account.getJobStatus());
|
|
}
|
|
|
|
// adding all the users for an account as part of the response obj
|
|
List<UserAccountJoinVO> usersForAccount = ApiDBUtils.findUserViewByAccountId(account.getId());
|
|
List<UserResponse> userResponses = ViewResponseHelper.createUserResponse(usersForAccount.toArray(new UserAccountJoinVO[usersForAccount.size()]));
|
|
accountResponse.setUsers(userResponses);
|
|
|
|
// set details
|
|
accountResponse.setDetails(ApiDBUtils.getAccountDetails(account.getId()));
|
|
accountResponse.setObjectName("account");
|
|
|
|
// add all the acl groups for an account
|
|
List<AclGroupJoinVO> groupsForAccount = ApiDBUtils.findAclGroupByAccountId(account.getId());
|
|
List<AclGroupResponse> groupResponses = ViewResponseHelper.createAclGroupResponses(groupsForAccount);
|
|
accountResponse.setGroups(groupResponses);
|
|
|
|
return accountResponse;
|
|
}
|
|
|
|
|
|
@Override
|
|
public void setResourceLimits(AccountJoinVO account, boolean fullView, ResourceLimitAndCountResponse response) {
|
|
// Get resource limits and counts
|
|
long vmLimit = ApiDBUtils.findCorrectResourceLimit(account.getVmLimit(), account.getId(), ResourceType.user_vm);
|
|
String vmLimitDisplay = (fullView || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit);
|
|
long vmTotal = (account.getVmTotal() == null) ? 0 : account.getVmTotal();
|
|
String vmAvail = (fullView || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit - vmTotal);
|
|
response.setVmLimit(vmLimitDisplay);
|
|
response.setVmTotal(vmTotal);
|
|
response.setVmAvailable(vmAvail);
|
|
|
|
long ipLimit = ApiDBUtils.findCorrectResourceLimit(account.getIpLimit(), account.getId(), ResourceType.public_ip);
|
|
String ipLimitDisplay = (fullView || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit);
|
|
long ipTotal = (account.getIpTotal() == null) ? 0 : account.getIpTotal();
|
|
|
|
Long ips = ipLimit - ipTotal;
|
|
// check how many free ips are left, and if it's less than max allowed number of ips from account - use this
|
|
// value
|
|
Long ipsLeft = account.getIpFree();
|
|
boolean unlimited = true;
|
|
if (ips.longValue() > ipsLeft.longValue()) {
|
|
ips = ipsLeft;
|
|
unlimited = false;
|
|
}
|
|
|
|
String ipAvail = ((fullView || ipLimit == -1) && unlimited) ? "Unlimited" : String.valueOf(ips);
|
|
|
|
response.setIpLimit(ipLimitDisplay);
|
|
response.setIpTotal(ipTotal);
|
|
response.setIpAvailable(ipAvail);
|
|
|
|
long volumeLimit = ApiDBUtils.findCorrectResourceLimit(account.getVolumeLimit(), account.getId(), ResourceType.volume);
|
|
String volumeLimitDisplay = (fullView || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit);
|
|
long volumeTotal = (account.getVolumeTotal() == 0) ? 0 : account.getVolumeTotal();
|
|
String volumeAvail = (fullView || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit - volumeTotal);
|
|
response.setVolumeLimit(volumeLimitDisplay);
|
|
response.setVolumeTotal(volumeTotal);
|
|
response.setVolumeAvailable(volumeAvail);
|
|
|
|
long snapshotLimit = ApiDBUtils.findCorrectResourceLimit(account.getSnapshotLimit(), account.getId(), ResourceType.snapshot);
|
|
String snapshotLimitDisplay = (fullView || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit);
|
|
long snapshotTotal = (account.getSnapshotTotal() == null) ? 0 : account.getSnapshotTotal();
|
|
String snapshotAvail = (fullView || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit - snapshotTotal);
|
|
response.setSnapshotLimit(snapshotLimitDisplay);
|
|
response.setSnapshotTotal(snapshotTotal);
|
|
response.setSnapshotAvailable(snapshotAvail);
|
|
|
|
Long templateLimit = ApiDBUtils.findCorrectResourceLimit(account.getTemplateLimit(), account.getId(), ResourceType.template);
|
|
String templateLimitDisplay = (fullView || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit);
|
|
Long templateTotal = (account.getTemplateTotal() == null) ? 0 : account.getTemplateTotal();
|
|
String templateAvail = (fullView || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit - templateTotal);
|
|
response.setTemplateLimit(templateLimitDisplay);
|
|
response.setTemplateTotal(templateTotal);
|
|
response.setTemplateAvailable(templateAvail);
|
|
|
|
// Get stopped and running VMs
|
|
response.setVmStopped(account.getVmStopped());
|
|
response.setVmRunning(account.getVmRunning());
|
|
|
|
//get resource limits for networks
|
|
long networkLimit = ApiDBUtils.findCorrectResourceLimit(account.getNetworkLimit(), account.getId(), ResourceType.network);
|
|
String networkLimitDisplay = (fullView || networkLimit == -1) ? "Unlimited" : String.valueOf(networkLimit);
|
|
long networkTotal = (account.getNetworkTotal() == null) ? 0 : account.getNetworkTotal();
|
|
String networkAvail = (fullView || networkLimit == -1) ? "Unlimited" : String.valueOf(networkLimit - networkTotal);
|
|
response.setNetworkLimit(networkLimitDisplay);
|
|
response.setNetworkTotal(networkTotal);
|
|
response.setNetworkAvailable(networkAvail);
|
|
|
|
//get resource limits for vpcs
|
|
long vpcLimit = ApiDBUtils.findCorrectResourceLimit(account.getVpcLimit(), account.getId(), ResourceType.vpc);
|
|
String vpcLimitDisplay = (fullView || vpcLimit == -1) ? "Unlimited" : String.valueOf(vpcLimit);
|
|
long vpcTotal = (account.getVpcTotal() == null) ? 0 : account.getVpcTotal();
|
|
String vpcAvail = (fullView || vpcLimit == -1) ? "Unlimited" : String.valueOf(vpcLimit - vpcTotal);
|
|
response.setVpcLimit(vpcLimitDisplay);
|
|
response.setVpcTotal(vpcTotal);
|
|
response.setVpcAvailable(vpcAvail);
|
|
|
|
//get resource limits for cpu cores
|
|
long cpuLimit = ApiDBUtils.findCorrectResourceLimit(account.getCpuLimit(), account.getId(), ResourceType.cpu);
|
|
String cpuLimitDisplay = (fullView || cpuLimit == -1) ? "Unlimited" : String.valueOf(cpuLimit);
|
|
long cpuTotal = (account.getCpuTotal() == null) ? 0 : account.getCpuTotal();
|
|
String cpuAvail = (fullView || cpuLimit == -1) ? "Unlimited" : String.valueOf(cpuLimit - cpuTotal);
|
|
response.setCpuLimit(cpuLimitDisplay);
|
|
response.setCpuTotal(cpuTotal);
|
|
response.setCpuAvailable(cpuAvail);
|
|
|
|
//get resource limits for memory
|
|
long memoryLimit = ApiDBUtils.findCorrectResourceLimit(account.getMemoryLimit(), account.getId(), ResourceType.memory);
|
|
String memoryLimitDisplay = (fullView || memoryLimit == -1) ? "Unlimited" : String.valueOf(memoryLimit);
|
|
long memoryTotal = (account.getMemoryTotal() == null) ? 0 : account.getMemoryTotal();
|
|
String memoryAvail = (fullView || memoryLimit == -1) ? "Unlimited" : String.valueOf(memoryLimit - memoryTotal);
|
|
response.setMemoryLimit(memoryLimitDisplay);
|
|
response.setMemoryTotal(memoryTotal);
|
|
response.setMemoryAvailable(memoryAvail);
|
|
|
|
//get resource limits for primary storage space and convert it from Bytes to GiB
|
|
long primaryStorageLimit = ApiDBUtils.findCorrectResourceLimit(account.getPrimaryStorageLimit(), account.getId(), ResourceType.primary_storage);
|
|
String primaryStorageLimitDisplay = (fullView || primaryStorageLimit == -1) ? "Unlimited" : String.valueOf(primaryStorageLimit / ResourceType.bytesToGiB);
|
|
long primaryStorageTotal = (account.getPrimaryStorageTotal() == null) ? 0 : (account.getPrimaryStorageTotal() / ResourceType.bytesToGiB);
|
|
String primaryStorageAvail = (fullView || primaryStorageLimit == -1) ? "Unlimited" : String.valueOf((primaryStorageLimit / ResourceType.bytesToGiB) - primaryStorageTotal);
|
|
response.setPrimaryStorageLimit(primaryStorageLimitDisplay);
|
|
response.setPrimaryStorageTotal(primaryStorageTotal);
|
|
response.setPrimaryStorageAvailable(primaryStorageAvail);
|
|
|
|
//get resource limits for secondary storage space and convert it from Bytes to GiB
|
|
long secondaryStorageLimit = ApiDBUtils.findCorrectResourceLimit(account.getSecondaryStorageLimit(), account.getId(), ResourceType.secondary_storage);
|
|
String secondaryStorageLimitDisplay = (fullView || secondaryStorageLimit == -1) ? "Unlimited" : String.valueOf(secondaryStorageLimit / ResourceType.bytesToGiB);
|
|
long secondaryStorageTotal = (account.getSecondaryStorageTotal() == null) ? 0 : (account.getSecondaryStorageTotal() / ResourceType.bytesToGiB);
|
|
String secondaryStorageAvail = (fullView || secondaryStorageLimit == -1) ? "Unlimited" : String.valueOf((secondaryStorageLimit / ResourceType.bytesToGiB)
|
|
- secondaryStorageTotal);
|
|
response.setSecondaryStorageLimit(secondaryStorageLimitDisplay);
|
|
response.setSecondaryStorageTotal(secondaryStorageTotal);
|
|
response.setSecondaryStorageAvailable(secondaryStorageAvail);
|
|
}
|
|
|
|
|
|
@Override
|
|
public AccountJoinVO newAccountView(Account acct) {
|
|
SearchCriteria<AccountJoinVO> sc = acctIdSearch.create();
|
|
sc.setParameters("id", acct.getId());
|
|
List<AccountJoinVO> accounts = searchIncludingRemoved(sc, null, null, false);
|
|
assert accounts != null && accounts.size() == 1 : "No account found for account id " + acct.getId();
|
|
return accounts.get(0);
|
|
|
|
}
|
|
|
|
|
|
}
|