mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-8592: Report quotaSummary command returns quota balance, quota usage and
state for all account.
This commit is contained in:
parent
d9e3b4c922
commit
db3c1bbd79
|
|
@ -16,8 +16,11 @@
|
|||
//under the License.
|
||||
package org.apache.cloudstack.quota;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
import com.cloud.utils.component.Manager;
|
||||
|
||||
public interface QuotaStatement extends Manager {
|
||||
void sendStatement();
|
||||
Calendar[] getCurrentStatementTime();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,6 +143,122 @@ public class QuotaStatementImpl extends ManagerBase implements QuotaStatement {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Calendar[] getCurrentStatementTime() {
|
||||
final Calendar today = Calendar.getInstance();
|
||||
int day_of_month = today.get(Calendar.DAY_OF_MONTH);
|
||||
int month_of_year = today.get(Calendar.MONTH);
|
||||
|
||||
Calendar firstDateOfCurrentPeriod, lastDateOfCurrentPeriod;
|
||||
Calendar aCalendar = (Calendar)today.clone();
|
||||
aCalendar.add(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
lastDateOfCurrentPeriod = aCalendar;
|
||||
|
||||
switch (_period) {
|
||||
case BIMONTHLY:
|
||||
if (day_of_month < 16) {
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.add(Calendar.MONTH, 0);
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
} else {
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.set(Calendar.DATE, 16);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
}
|
||||
case MONTHLY:
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
case QUATERLY:
|
||||
if (month_of_year < Calendar.APRIL) {
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.set(Calendar.MONTH, Calendar.JANUARY);
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
} else if (month_of_year < Calendar.JULY) {
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.set(Calendar.MONTH, Calendar.APRIL);
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
} else if (month_of_year < Calendar.OCTOBER) {
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.set(Calendar.MONTH, Calendar.JULY);
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
} else {
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.set(Calendar.MONTH, Calendar.OCTOBER);
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
}
|
||||
case HALFYEARLY:
|
||||
// statements are sent in Jan=1, Jul 7,
|
||||
if (month_of_year < Calendar.JULY) {
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.set(Calendar.MONTH, Calendar.JANUARY);
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
} else {
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.set(Calendar.MONTH, Calendar.JULY);
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
}
|
||||
case YEARLY:
|
||||
aCalendar = (Calendar)today.clone();
|
||||
aCalendar.add(Calendar.MONTH, Calendar.JANUARY);
|
||||
aCalendar.set(Calendar.DATE, 1);
|
||||
aCalendar.set(Calendar.HOUR, 0);
|
||||
aCalendar.set(Calendar.MINUTE, 0);
|
||||
aCalendar.set(Calendar.SECOND, 0);
|
||||
firstDateOfCurrentPeriod = aCalendar;
|
||||
return new Calendar[] {firstDateOfCurrentPeriod, lastDateOfCurrentPeriod};
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Calendar[] statementTime(final Calendar today, final STATEMENT_PERIODS period) {
|
||||
//check if it is statement time
|
||||
int day_of_month = today.get(Calendar.DAY_OF_MONTH);
|
||||
|
|
@ -226,7 +342,7 @@ public class QuotaStatementImpl extends ManagerBase implements QuotaStatement {
|
|||
return null;
|
||||
case YEARLY:
|
||||
// statements are sent in Jan=1
|
||||
if (month_of_year == Calendar.JANUARY ) {
|
||||
if (month_of_year == Calendar.JANUARY) {
|
||||
if (day_of_month < s_LAST_STATEMENT_SENT_DAYS) {
|
||||
Calendar aCalendar = (Calendar)today.clone();
|
||||
aCalendar.add(Calendar.MONTH, -12);
|
||||
|
|
|
|||
|
|
@ -16,8 +16,11 @@
|
|||
//under the License.
|
||||
package org.apache.cloudstack.api.response;
|
||||
|
||||
import com.cloud.domain.DomainVO;
|
||||
import com.cloud.domain.dao.DomainDao;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.Account.State;
|
||||
import com.cloud.user.AccountVO;
|
||||
import com.cloud.user.User;
|
||||
import com.cloud.user.dao.AccountDao;
|
||||
|
|
@ -30,12 +33,16 @@ import org.apache.cloudstack.api.command.QuotaStatementCmd;
|
|||
import org.apache.cloudstack.api.command.QuotaTariffListCmd;
|
||||
import org.apache.cloudstack.api.command.QuotaTariffUpdateCmd;
|
||||
import org.apache.cloudstack.quota.QuotaService;
|
||||
import org.apache.cloudstack.quota.QuotaStatement;
|
||||
import org.apache.cloudstack.quota.constant.QuotaConfig;
|
||||
import org.apache.cloudstack.quota.constant.QuotaTypes;
|
||||
import org.apache.cloudstack.quota.dao.QuotaAccountDao;
|
||||
import org.apache.cloudstack.quota.dao.QuotaBalanceDao;
|
||||
import org.apache.cloudstack.quota.dao.QuotaCreditsDao;
|
||||
import org.apache.cloudstack.quota.dao.QuotaEmailTemplatesDao;
|
||||
import org.apache.cloudstack.quota.dao.QuotaTariffDao;
|
||||
import org.apache.cloudstack.quota.dao.QuotaUsageDao;
|
||||
import org.apache.cloudstack.quota.vo.QuotaAccountVO;
|
||||
import org.apache.cloudstack.quota.vo.QuotaBalanceVO;
|
||||
import org.apache.cloudstack.quota.vo.QuotaCreditsVO;
|
||||
import org.apache.cloudstack.quota.vo.QuotaEmailTemplatesVO;
|
||||
|
|
@ -72,6 +79,8 @@ public class QuotaResponseBuilderImpl implements QuotaResponseBuilder {
|
|||
@Inject
|
||||
private QuotaCreditsDao _quotaCreditsDao;
|
||||
@Inject
|
||||
private QuotaUsageDao _quotaUsageDao;
|
||||
@Inject
|
||||
private QuotaEmailTemplatesDao _quotaEmailTemplateDao;
|
||||
|
||||
@Inject
|
||||
|
|
@ -79,9 +88,15 @@ public class QuotaResponseBuilderImpl implements QuotaResponseBuilder {
|
|||
@Inject
|
||||
private QuotaService _quotaService;
|
||||
@Inject
|
||||
AccountDao _accountDao;
|
||||
private AccountDao _accountDao;
|
||||
@Inject
|
||||
private DomainDao _domainDao;
|
||||
@Inject
|
||||
private RegionManager _regionMgr;
|
||||
@Inject
|
||||
private QuotaAccountDao _quotaAcc;
|
||||
@Inject
|
||||
private QuotaStatement _statement;
|
||||
|
||||
@Override
|
||||
public QuotaTariffResponse createQuotaTariffResponse(QuotaTariffVO tariff) {
|
||||
|
|
@ -100,6 +115,25 @@ public class QuotaResponseBuilderImpl implements QuotaResponseBuilder {
|
|||
@Override
|
||||
public List<QuotaSummaryResponse> createQuotaSummaryResponse() {
|
||||
List<QuotaSummaryResponse> result = new ArrayList<QuotaSummaryResponse>();
|
||||
Calendar[] period = _statement.getCurrentStatementTime();
|
||||
|
||||
for (final QuotaAccountVO quotaAccount : _quotaAcc.listAllQuotaAccount()) {
|
||||
QuotaSummaryResponse qr = new QuotaSummaryResponse();
|
||||
AccountVO account = _accountDao.findById(quotaAccount.getId());
|
||||
DomainVO domain = _domainDao.findById(account.getDomainId());
|
||||
BigDecimal curBalance = _quotaBalanceDao.lastQuotaBalance(account.getAccountId(), account.getDomainId(), period[1].getTime());
|
||||
BigDecimal quotaUsage = _quotaUsageDao.findTotalQuotaUsage(account.getAccountId(), account.getDomainId(), null, period[0].getTime(), period[1].getTime());
|
||||
|
||||
qr.setAccountId(account.getAccountId());
|
||||
qr.setAccountName(account.getAccountName());
|
||||
qr.setDomainId(account.getDomainId());
|
||||
qr.setDomainName(domain.getName());
|
||||
qr.setBalance(curBalance);
|
||||
qr.setQuotaUsage(quotaUsage);
|
||||
qr.setState(account.getState().compareTo(State.enabled) == 0);
|
||||
|
||||
result.add(qr);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,14 +36,22 @@ public class QuotaSummaryResponse extends BaseResponse {
|
|||
@Param(description = "account name")
|
||||
private String accountName;
|
||||
|
||||
@SerializedName("domain")
|
||||
@SerializedName("domainid")
|
||||
@Param(description = "domain id")
|
||||
private Long domainId;
|
||||
|
||||
@SerializedName("domain")
|
||||
@Param(description = "domain name")
|
||||
private String domainName;
|
||||
|
||||
@SerializedName("balance")
|
||||
@Param(description = "account balance")
|
||||
private BigDecimal balance;
|
||||
|
||||
@SerializedName("state")
|
||||
@Param(description = "account state")
|
||||
private Boolean state;
|
||||
|
||||
@SerializedName("quota")
|
||||
@Param(description = "quota usage of this period")
|
||||
private BigDecimal quotaUsage;
|
||||
|
|
@ -88,10 +96,26 @@ public class QuotaSummaryResponse extends BaseResponse {
|
|||
this.domainId = domainId;
|
||||
}
|
||||
|
||||
public String getDomainName() {
|
||||
return domainName;
|
||||
}
|
||||
|
||||
public void setDomainName(String domainName) {
|
||||
this.domainName = domainName;
|
||||
}
|
||||
|
||||
public BigDecimal getQuotaUsage() {
|
||||
return quotaUsage;
|
||||
}
|
||||
|
||||
public Boolean getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(Boolean state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public void setQuotaUsage(BigDecimal startQuota) {
|
||||
this.quotaUsage = startQuota.setScale(2, RoundingMode.HALF_EVEN);
|
||||
}
|
||||
|
|
@ -100,8 +124,8 @@ public class QuotaSummaryResponse extends BaseResponse {
|
|||
return balance;
|
||||
}
|
||||
|
||||
public void setBalance(BigDecimal endQuota) {
|
||||
this.balance = endQuota.setScale(2, RoundingMode.HALF_EVEN);
|
||||
public void setBalance(BigDecimal balance) {
|
||||
this.balance = balance.setScale(2, RoundingMode.HALF_EVEN);
|
||||
}
|
||||
|
||||
public Date getStartDate() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue