Search in sources :

Example 6 with QuotaUsageVO

use of org.apache.cloudstack.quota.vo.QuotaUsageVO in project cloudstack by apache.

the class QuotaManagerImpl method processQuotaBalanceForAccount.

public void processQuotaBalanceForAccount(final AccountVO account, final List<QuotaUsageVO> quotaListForAccount) {
    if (quotaListForAccount == null || quotaListForAccount.isEmpty()) {
        return;
    }
    if (s_logger.isDebugEnabled()) {
        s_logger.debug(quotaListForAccount.get(0));
    }
    Date startDate = quotaListForAccount.get(0).getStartDate();
    Date endDate = quotaListForAccount.get(0).getEndDate();
    if (s_logger.isDebugEnabled()) {
        s_logger.debug("processQuotaBalanceForAccount startDate " + startDate + " endDate=" + endDate);
        s_logger.debug("processQuotaBalanceForAccount last items startDate " + quotaListForAccount.get(quotaListForAccount.size() - 1).getStartDate() + " items endDate=" + quotaListForAccount.get(quotaListForAccount.size() - 1).getEndDate());
    }
    quotaListForAccount.add(new QuotaUsageVO());
    BigDecimal aggrUsage = new BigDecimal(0);
    List<QuotaBalanceVO> creditsReceived = null;
    //bootstrapping
    QuotaUsageVO lastQuotaUsage = _quotaUsageDao.findLastQuotaUsageEntry(account.getAccountId(), account.getDomainId(), startDate);
    if (lastQuotaUsage == null) {
        aggrUsage = aggrUsage.add(aggregateCreditBetweenDates(account, new Date(0), startDate));
        // create a balance entry for these accumulated credits
        QuotaBalanceVO firstBalance = new QuotaBalanceVO(account.getAccountId(), account.getDomainId(), aggrUsage, startDate);
        _quotaBalanceDao.saveQuotaBalance(firstBalance);
    } else {
        QuotaBalanceVO lastRealBalanceEntry = _quotaBalanceDao.findLastBalanceEntry(account.getAccountId(), account.getDomainId(), endDate);
        if (lastRealBalanceEntry != null) {
            aggrUsage = aggrUsage.add(lastRealBalanceEntry.getCreditBalance());
        }
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("Last balance entry  " + lastRealBalanceEntry + " AggrUsage=" + aggrUsage);
        }
        // get all the credit entries after this balance and add
        aggrUsage = aggrUsage.add(aggregateCreditBetweenDates(account, lastRealBalanceEntry.getUpdatedOn(), endDate));
    }
    for (QuotaUsageVO entry : quotaListForAccount) {
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("Usage entry found " + entry);
        }
        if (entry.getQuotaUsed().compareTo(BigDecimal.ZERO) == 0) {
            // check if there were credits and aggregate
            aggrUsage = aggrUsage.add(aggregateCreditBetweenDates(account, entry.getStartDate(), entry.getEndDate()));
            continue;
        }
        if (startDate.compareTo(entry.getStartDate()) != 0) {
            saveQuotaBalance(account, aggrUsage, endDate);
            //New balance entry
            aggrUsage = new BigDecimal(0);
            startDate = entry.getStartDate();
            endDate = entry.getEndDate();
            QuotaBalanceVO lastRealBalanceEntry = _quotaBalanceDao.findLastBalanceEntry(account.getAccountId(), account.getDomainId(), endDate);
            Date lastBalanceDate = new Date(0);
            if (lastRealBalanceEntry != null) {
                lastBalanceDate = lastRealBalanceEntry.getUpdatedOn();
                aggrUsage = aggrUsage.add(lastRealBalanceEntry.getCreditBalance());
            }
            if (s_logger.isDebugEnabled()) {
                s_logger.debug("Getting Balance" + account.getAccountName() + ",Balance entry=" + aggrUsage + " on Date=" + endDate);
            }
            aggrUsage = aggrUsage.add(aggregateCreditBetweenDates(account, lastBalanceDate, endDate));
        }
        aggrUsage = aggrUsage.subtract(entry.getQuotaUsed());
    }
    saveQuotaBalance(account, aggrUsage, endDate);
    // update quota_balance
    saveQuotaAccount(account, aggrUsage, endDate);
}
Also used : QuotaBalanceVO(org.apache.cloudstack.quota.vo.QuotaBalanceVO) Date(java.util.Date) BigDecimal(java.math.BigDecimal) QuotaUsageVO(org.apache.cloudstack.quota.vo.QuotaUsageVO)

Example 7 with QuotaUsageVO

use of org.apache.cloudstack.quota.vo.QuotaUsageVO in project cloudstack by apache.

the class QuotaManagerImpl method updateQuotaDiskUsage.

public QuotaUsageVO updateQuotaDiskUsage(UsageVO usageRecord, final BigDecimal aggregationRatio, final int quotaType) {
    QuotaUsageVO quota_usage = null;
    QuotaTariffVO tariff = _quotaTariffDao.findTariffPlanByUsageType(quotaType, usageRecord.getEndDate());
    if (tariff != null && tariff.getCurrencyValue().compareTo(BigDecimal.ZERO) != 0) {
        BigDecimal quotaUsgage;
        BigDecimal onehourcostpergb;
        BigDecimal noofgbinuse;
        onehourcostpergb = tariff.getCurrencyValue().multiply(aggregationRatio);
        noofgbinuse = new BigDecimal(usageRecord.getSize()).divide(s_gb, 8, RoundingMode.HALF_EVEN);
        quotaUsgage = new BigDecimal(usageRecord.getRawUsage()).multiply(onehourcostpergb).multiply(noofgbinuse);
        quota_usage = new QuotaUsageVO(usageRecord.getId(), usageRecord.getZoneId(), usageRecord.getAccountId(), usageRecord.getDomainId(), usageRecord.getUsageType(), quotaUsgage, usageRecord.getStartDate(), usageRecord.getEndDate());
        _quotaUsageDao.persistQuotaUsage(quota_usage);
    }
    usageRecord.setQuotaCalculated(1);
    _usageDao.persistUsage(usageRecord);
    return quota_usage;
}
Also used : QuotaTariffVO(org.apache.cloudstack.quota.vo.QuotaTariffVO) BigDecimal(java.math.BigDecimal) QuotaUsageVO(org.apache.cloudstack.quota.vo.QuotaUsageVO)

Example 8 with QuotaUsageVO

use of org.apache.cloudstack.quota.vo.QuotaUsageVO in project cloudstack by apache.

the class QuotaManagerImpl method calculateQuotaUsage.

@Override
public boolean calculateQuotaUsage() {
    List<AccountVO> accounts = _accountDao.listAll();
    for (AccountVO account : accounts) {
        Pair<List<? extends UsageVO>, Integer> usageRecords = _usageDao.getUsageRecordsPendingQuotaAggregation(account.getAccountId(), account.getDomainId());
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("Usage entries size = " + usageRecords.second().intValue() + ", accId" + account.getAccountId() + ", domId" + account.getDomainId());
        }
        List<QuotaUsageVO> quotaListForAccount = aggregatePendingQuotaRecordsForAccount(account, usageRecords);
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("Quota entries size = " + quotaListForAccount.size() + ", accId" + account.getAccountId() + ", domId" + account.getDomainId());
        }
        processQuotaBalanceForAccount(account, quotaListForAccount);
    }
    return true;
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) QuotaUsageVO(org.apache.cloudstack.quota.vo.QuotaUsageVO) UsageVO(com.cloud.usage.UsageVO) QuotaAccountVO(org.apache.cloudstack.quota.vo.QuotaAccountVO) AccountVO(com.cloud.user.AccountVO) QuotaUsageVO(org.apache.cloudstack.quota.vo.QuotaUsageVO)

Example 9 with QuotaUsageVO

use of org.apache.cloudstack.quota.vo.QuotaUsageVO in project cloudstack by apache.

the class QuotaManagerImpl method updateQuotaAllocatedVMUsage.

public QuotaUsageVO updateQuotaAllocatedVMUsage(UsageVO usageRecord, final BigDecimal aggregationRatio) {
    QuotaUsageVO quota_usage = null;
    QuotaTariffVO tariff = _quotaTariffDao.findTariffPlanByUsageType(QuotaTypes.ALLOCATED_VM, usageRecord.getEndDate());
    if (tariff != null && tariff.getCurrencyValue().compareTo(BigDecimal.ZERO) != 0) {
        BigDecimal vmusage;
        BigDecimal onehourcostforvmusage;
        onehourcostforvmusage = tariff.getCurrencyValue().multiply(aggregationRatio);
        vmusage = new BigDecimal(usageRecord.getRawUsage()).multiply(onehourcostforvmusage);
        quota_usage = new QuotaUsageVO(usageRecord.getId(), usageRecord.getZoneId(), usageRecord.getAccountId(), usageRecord.getDomainId(), QuotaTypes.ALLOCATED_VM, vmusage, usageRecord.getStartDate(), usageRecord.getEndDate());
        _quotaUsageDao.persistQuotaUsage(quota_usage);
    }
    usageRecord.setQuotaCalculated(1);
    _usageDao.persistUsage(usageRecord);
    return quota_usage;
}
Also used : QuotaTariffVO(org.apache.cloudstack.quota.vo.QuotaTariffVO) BigDecimal(java.math.BigDecimal) QuotaUsageVO(org.apache.cloudstack.quota.vo.QuotaUsageVO)

Example 10 with QuotaUsageVO

use of org.apache.cloudstack.quota.vo.QuotaUsageVO in project cloudstack by apache.

the class QuotaManagerImpl method aggregatePendingQuotaRecordsForAccount.

public List<QuotaUsageVO> aggregatePendingQuotaRecordsForAccount(final AccountVO account, final Pair<List<? extends UsageVO>, Integer> usageRecords) {
    List<QuotaUsageVO> quotaListForAccount = new ArrayList<>();
    if (usageRecords == null || usageRecords.first() == null || usageRecords.first().isEmpty()) {
        return quotaListForAccount;
    }
    s_logger.info("Getting pending quota records for account=" + account.getAccountName());
    for (UsageVO usageRecord : usageRecords.first()) {
        BigDecimal aggregationRatio = new BigDecimal(_aggregationDuration).divide(s_minutesInMonth, 8, RoundingMode.HALF_EVEN);
        switch(usageRecord.getUsageType()) {
            case QuotaTypes.RUNNING_VM:
                List<QuotaUsageVO> lq = updateQuotaRunningVMUsage(usageRecord, aggregationRatio);
                if (!lq.isEmpty()) {
                    quotaListForAccount.addAll(lq);
                }
                break;
            case QuotaTypes.ALLOCATED_VM:
                QuotaUsageVO qu = updateQuotaAllocatedVMUsage(usageRecord, aggregationRatio);
                if (qu != null) {
                    quotaListForAccount.add(qu);
                }
                break;
            case QuotaTypes.SNAPSHOT:
            case QuotaTypes.TEMPLATE:
            case QuotaTypes.ISO:
            case QuotaTypes.VOLUME:
            case QuotaTypes.VM_SNAPSHOT:
                qu = updateQuotaDiskUsage(usageRecord, aggregationRatio, usageRecord.getUsageType());
                if (qu != null) {
                    quotaListForAccount.add(qu);
                }
                break;
            case QuotaTypes.LOAD_BALANCER_POLICY:
            case QuotaTypes.PORT_FORWARDING_RULE:
            case QuotaTypes.IP_ADDRESS:
            case QuotaTypes.NETWORK_OFFERING:
            case QuotaTypes.SECURITY_GROUP:
            case QuotaTypes.VPN_USERS:
                qu = updateQuotaRaw(usageRecord, aggregationRatio, usageRecord.getUsageType());
                if (qu != null) {
                    quotaListForAccount.add(qu);
                }
                break;
            case QuotaTypes.NETWORK_BYTES_RECEIVED:
            case QuotaTypes.NETWORK_BYTES_SENT:
                qu = updateQuotaNetwork(usageRecord, usageRecord.getUsageType());
                if (qu != null) {
                    quotaListForAccount.add(qu);
                }
                break;
            case QuotaTypes.VM_DISK_IO_READ:
            case QuotaTypes.VM_DISK_IO_WRITE:
            case QuotaTypes.VM_DISK_BYTES_READ:
            case QuotaTypes.VM_DISK_BYTES_WRITE:
            default:
                break;
        }
    }
    return quotaListForAccount;
}
Also used : ArrayList(java.util.ArrayList) QuotaUsageVO(org.apache.cloudstack.quota.vo.QuotaUsageVO) UsageVO(com.cloud.usage.UsageVO) BigDecimal(java.math.BigDecimal) QuotaUsageVO(org.apache.cloudstack.quota.vo.QuotaUsageVO)

Aggregations

QuotaUsageVO (org.apache.cloudstack.quota.vo.QuotaUsageVO)16 BigDecimal (java.math.BigDecimal)11 ArrayList (java.util.ArrayList)8 QuotaTariffVO (org.apache.cloudstack.quota.vo.QuotaTariffVO)6 UsageVO (com.cloud.usage.UsageVO)5 Test (org.junit.Test)5 AccountVO (com.cloud.user.AccountVO)4 Date (java.util.Date)4 QuotaAccountVO (org.apache.cloudstack.quota.vo.QuotaAccountVO)4 List (java.util.List)3 Pair (com.cloud.utils.Pair)2 QuotaStatementResponse (org.apache.cloudstack.api.response.QuotaStatementResponse)2 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)1 Field (java.lang.reflect.Field)1 HashMap (java.util.HashMap)1 QuotaTypes (org.apache.cloudstack.quota.constant.QuotaTypes)1 QuotaBalanceVO (org.apache.cloudstack.quota.vo.QuotaBalanceVO)1 ServiceOfferingVO (org.apache.cloudstack.quota.vo.ServiceOfferingVO)1