Skip to content

Commit bf29695

Browse files
author
Julien Hervot de Mattos Vaz
committed
Use account Quota settings
1 parent 0934fb1 commit bf29695

File tree

5 files changed

+49
-6
lines changed

5 files changed

+49
-6
lines changed

engine/schema/src/main/resources/META-INF/cloudstack/core/spring-engine-schema-core-common-daos-between-management-and-usage-context.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
>
2929

3030
<bean id="accountGuestVlanMapDaoImpl" class="com.cloud.network.dao.AccountGuestVlanMapDaoImpl" />
31+
<bean id="accountDetailsDaoImpl" class="com.cloud.user.AccountDetailsDaoImpl" />
32+
<bean id="domainDaoImpl" class="com.cloud.domain.dao.DomainDaoImpl" />
33+
<bean id="domainDetailsDaoImpl" class="com.cloud.domain.dao.DomainDetailsDaoImpl" />
3134
<bean id="clusterDaoImpl" class="com.cloud.dc.dao.ClusterDaoImpl" />
3235
<bean id="clusterDetailsDaoImpl" class="com.cloud.dc.ClusterDetailsDaoImpl" />
3336
<bean id="dataCenterDaoImpl" class="com.cloud.dc.dao.DataCenterDaoImpl" />

framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaAlertManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public boolean stop() {
149149
*/
150150
@Override
151151
public boolean isQuotaEmailTypeEnabledForAccount(AccountVO account, QuotaEmailTemplateTypes quotaEmailTemplateType) {
152-
boolean quotaEmailsEnabled = QuotaConfig.QuotaEnableEmails.valueIn(account.getAccountId());
152+
boolean quotaEmailsEnabled = _quotaManager.findConfigurationValue(account, QuotaConfig.QuotaEnableEmails);
153153
if (!quotaEmailsEnabled) {
154154
logger.debug("Configuration [{}] is disabled for account [{}]. Therefore, the account will not receive Quota email of type [{}].", QuotaConfig.QuotaEnableEmails.key(), account, quotaEmailTemplateType);
155155
return false;

framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818

1919
import com.cloud.user.AccountVO;
2020
import com.cloud.utils.component.Manager;
21+
import org.apache.cloudstack.framework.config.ConfigKey;
2122

2223
public interface QuotaManager extends Manager {
2324

2425
boolean calculateQuotaUsage();
2526

2627
boolean isLockable(AccountVO account);
2728

29+
boolean findConfigurationValue(AccountVO accountVO, ConfigKey<Boolean> key);
30+
2831
}

framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@
3232
import javax.inject.Inject;
3333
import javax.naming.ConfigurationException;
3434

35+
import com.cloud.domain.DomainDetailVO;
36+
import com.cloud.domain.dao.DomainDetailsDao;
3537
import com.cloud.user.Account;
38+
import com.cloud.user.AccountDetailVO;
39+
import com.cloud.user.AccountDetailsDao;
40+
import org.apache.cloudstack.framework.config.ConfigKey;
3641
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
3742
import org.apache.cloudstack.quota.activationrule.presetvariables.Configuration;
3843
import org.apache.cloudstack.quota.activationrule.presetvariables.GenericPresetVariable;
@@ -89,6 +94,10 @@ public class QuotaManagerImpl extends ManagerBase implements QuotaManager {
8994

9095
@Inject
9196
protected PresetVariableHelper presetVariableHelper;
97+
@Inject
98+
protected AccountDetailsDao accountDetailsDao;
99+
@Inject
100+
protected DomainDetailsDao domainDetailsDao;
92101

93102
private static TimeZone usageAggregationTimeZone = TimeZone.getTimeZone("GMT");
94103
static final BigDecimal GiB_DECIMAL = BigDecimal.valueOf(ByteScaleUtils.GiB);
@@ -340,12 +349,41 @@ protected List<QuotaUsageVO> createQuotaUsagesAccordingToQuotaTariffs(AccountVO
340349
}
341350

342351
protected boolean shouldCalculateUsageRecord(AccountVO accountVO, UsageVO usageRecord) {
343-
if (Boolean.FALSE.equals(QuotaConfig.QuotaAccountEnabled.valueIn(accountVO.getAccountId()))) {
352+
boolean calculateUsageRecord = findConfigurationValue(accountVO, QuotaConfig.QuotaAccountEnabled);
353+
if (!calculateUsageRecord && usageRecord != null) {
344354
logger.debug("Considering usage record [{}] as calculated and skipping it because account [{}] has the quota plugin disabled.",
345355
usageRecord.toString(usageAggregationTimeZone), accountVO.reflectionToString());
346356
return false;
347357
}
348-
return true;
358+
return calculateUsageRecord;
359+
}
360+
361+
@Override
362+
public boolean findConfigurationValue(AccountVO accountVO, ConfigKey<Boolean> key) {
363+
boolean result = Boolean.parseBoolean(getConfigValueOrDefaultValue(key));
364+
logger.trace("Searching configuration [{}] of account [{}] in its settings.", key.key(), accountVO);
365+
AccountDetailVO accountDetail = accountDetailsDao.findDetail(accountVO.getAccountId(), key.key());
366+
if (accountDetail != null) {
367+
result = Boolean.TRUE.equals(Boolean.valueOf(accountDetail.getValue()));
368+
logger.trace("Using value [{}] found in account [{}] settings to configuration [{}].", result, accountVO, key.key());
369+
return result;
370+
}
371+
372+
if (Boolean.parseBoolean(_configDao.getValue("enable.account.settings.for.domain"))) {
373+
logger.trace("Searching for configuration [{}] of account [{}] in its domain [{}] settings.", key.key(), accountVO, accountVO.getDomainId());
374+
DomainDetailVO domainDetail = domainDetailsDao.findDetail(accountVO.getDomainId(), key.key());
375+
if (domainDetail != null) {
376+
result = Boolean.TRUE.equals(Boolean.valueOf(domainDetail.getValue()));
377+
logger.trace("Using value [{}] found in domain [{}] settings to configuration [{}].", result, accountVO.getDomainId(), key.key());
378+
return result;
379+
}
380+
}
381+
logger.trace("Using default value [{}] to configuration [{}].", result, key.key());
382+
return result;
383+
}
384+
385+
protected String getConfigValueOrDefaultValue(ConfigKey<?> key) {
386+
return ObjectUtils.defaultIfNull(_configDao.getValue(key.key()), key.defaultValue());
349387
}
350388

351389
protected List<QuotaUsageVO> persistUsagesAndQuotaUsagesAndRetrievePersistedQuotaUsages(List<Pair<UsageVO, QuotaUsageVO>> pairsUsageAndQuotaUsage) {

framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaAlertManagerImplTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,6 @@ public void setup() throws IllegalAccessException, NoSuchFieldException, Configu
116116
@Test
117117
public void isQuotaEmailTypeEnabledForAccountTestConfigurationIsEnabledAndEmailIsConfiguredReturnConfiguredValue() {
118118
boolean expectedValue = !QuotaConfig.QuotaEnableEmails.value();
119-
QuotaEmailConfigurationVO quotaEmailConfigurationVoMock = Mockito.mock(QuotaEmailConfigurationVO.class);
120-
Mockito.when(quotaEmailConfigurationVoMock.isEnabled()).thenReturn(expectedValue);
121-
Mockito.doReturn(quotaEmailConfigurationVoMock).when(quotaEmailConfigurationDaoMock).findByAccountIdAndEmailTemplateType(Mockito.anyLong(), Mockito.any(QuotaConfig.QuotaEmailTemplateTypes.class));
122119

123120
boolean result = quotaAlertManager.isQuotaEmailTypeEnabledForAccount(accountMock, QuotaConfig.QuotaEmailTemplateTypes.QUOTA_EMPTY);
124121

@@ -129,6 +126,8 @@ public void isQuotaEmailTypeEnabledForAccountTestConfigurationIsEnabledAndEmailI
129126
public void isQuotaEmailTypeEnabledForAccountTestConfigurationIsEnabledAndEmailIsNotConfiguredReturnDefaultValue() {
130127
boolean defaultValue = QuotaConfig.QuotaEnableEmails.value();
131128

129+
Mockito.when(quotaManagerMock.findConfigurationValue(accountMock, QuotaConfig.QuotaEnableEmails)).thenReturn(true);
130+
132131
boolean result = quotaAlertManager.isQuotaEmailTypeEnabledForAccount(accountMock, QuotaConfig.QuotaEmailTemplateTypes.QUOTA_EMPTY);
133132

134133
Assert.assertEquals(defaultValue, result);

0 commit comments

Comments
 (0)