You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/05/28 01:06:23 UTC
[13/13] james-project git commit: JAMES-2403 Retrieving the max ratio
should be defined once
JAMES-2403 Retrieving the max ratio should be defined once
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f8b587a7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f8b587a7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f8b587a7
Branch: refs/heads/master
Commit: f8b587a7a5d76d3da614a07b95e69c1fe07ea5d5
Parents: 95c4423
Author: Antoine Duprat <ad...@linagora.com>
Authored: Thu May 24 13:27:13 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Mon May 28 08:05:36 2018 +0700
----------------------------------------------------------------------
.../apache/james/mailbox/model/QuotaRatio.java | 80 ++++++++++++++++++++
.../james/mailbox/model/QuotaRatioTest.java | 79 +++++++++++++++++++
.../elasticsearch/json/QuotaRatioAsJson.java | 14 ++--
.../json/QuotaRatioToElasticSearchJson.java | 5 +-
.../json/QuotaRatioAsJsonTest.java | 29 ++++++-
.../quota/search/scanning/ClauseConverter.java | 3 +-
.../james/webadmin/dto/OccupationRatioDTO.java | 10 ++-
7 files changed, 205 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/f8b587a7/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRatio.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRatio.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRatio.java
new file mode 100644
index 0000000..5ba6bf1
--- /dev/null
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRatio.java
@@ -0,0 +1,80 @@
+/****************************************************************
+ * 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 org.apache.james.mailbox.model;
+
+import java.util.Objects;
+
+import org.apache.james.mailbox.quota.QuotaCount;
+import org.apache.james.mailbox.quota.QuotaSize;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
+
+public class QuotaRatio {
+
+ public static QuotaRatio from(Quota<QuotaSize> quotaSize, Quota<QuotaCount> quotaCount) {
+ return new QuotaRatio(quotaSize, quotaCount);
+ }
+
+ private final Quota<QuotaSize> quotaSize;
+ private final Quota<QuotaCount> quotaCount;
+
+ private QuotaRatio(Quota<QuotaSize> quotaSize, Quota<QuotaCount> quotaCount) {
+ Preconditions.checkNotNull(quotaSize, "'quotaSize' is mandatory");
+ Preconditions.checkNotNull(quotaCount, "'quotaCount' is mandatory");
+ this.quotaSize = quotaSize;
+ this.quotaCount = quotaCount;
+ }
+
+ public Quota<QuotaSize> getQuotaSize() {
+ return quotaSize;
+ }
+
+ public Quota<QuotaCount> getQuotaCount() {
+ return quotaCount;
+ }
+
+ public double max() {
+ return Math.max(quotaSize.getRatio(), quotaCount.getRatio());
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof QuotaRatio) {
+ QuotaRatio quotaRatio = (QuotaRatio) o;
+
+ return Objects.equals(this.quotaSize, quotaRatio.quotaSize)
+ && Objects.equals(this.quotaCount, quotaRatio.quotaCount);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(quotaSize, quotaCount);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("quotaSize", quotaSize)
+ .add("quotaCount", quotaCount)
+ .toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f8b587a7/mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaRatioTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaRatioTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaRatioTest.java
new file mode 100644
index 0000000..182caf6
--- /dev/null
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaRatioTest.java
@@ -0,0 +1,79 @@
+/****************************************************************
+ * 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 org.apache.james.mailbox.model;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.apache.james.mailbox.quota.QuotaCount;
+import org.apache.james.mailbox.quota.QuotaSize;
+import org.junit.jupiter.api.Test;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+public class QuotaRatioTest {
+
+ private static final Quota<QuotaSize> QUOTA_SIZE = Quota.<QuotaSize> builder()
+ .used(QuotaSize.size(15))
+ .computedLimit(QuotaSize.size(60))
+ .build();
+ private static final Quota<QuotaCount> QUOTA_COUNT = Quota.<QuotaCount> builder()
+ .used(QuotaCount.count(1))
+ .computedLimit(QuotaCount.count(2))
+ .build();
+
+ @Test
+ public void shouldMatchBeanContact() {
+ EqualsVerifier.forClass(QuotaRatio.class)
+ .allFieldsShouldBeUsed()
+ .verify();
+ }
+
+ @Test
+ public void quotaRatioShouldThrowWhenQuotaSizeIsNull() {
+ assertThatThrownBy(() -> QuotaRatio.from(null, QUOTA_COUNT))
+ .isInstanceOf(NullPointerException.class);
+ }
+
+ @Test
+ public void quotaRatioShouldThrowWhenQuotaCountIsNull() {
+ assertThatThrownBy(() -> QuotaRatio.from(QUOTA_SIZE, null))
+ .isInstanceOf(NullPointerException.class);
+ }
+
+ @Test
+ public void quotaSizeShouldReturnTheQuotaSize() {
+ QuotaRatio quotaRatio = QuotaRatio.from(QUOTA_SIZE, QUOTA_COUNT);
+ assertThat(quotaRatio.getQuotaSize()).isEqualTo(QUOTA_SIZE);
+ }
+
+ @Test
+ public void quotaCountShouldReturnTheQuotaCount() {
+ QuotaRatio quotaRatio = QuotaRatio.from(QUOTA_SIZE, QUOTA_COUNT);
+ assertThat(quotaRatio.getQuotaCount()).isEqualTo(QUOTA_COUNT);
+ }
+
+ @Test
+ public void maxShouldReturnTheMaxRatio() {
+ double max = QuotaRatio.from(QUOTA_SIZE, QUOTA_COUNT)
+ .max();
+
+ assertThat(max).isEqualTo(0.5);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f8b587a7/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJson.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJson.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJson.java
index ec8e597..4084727 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJson.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJson.java
@@ -21,6 +21,8 @@ package org.apache.james.quota.search.elasticsearch.json;
import java.util.Objects;
import java.util.Optional;
+import org.apache.james.mailbox.model.QuotaRatio;
+
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
@@ -36,7 +38,7 @@ public class QuotaRatioAsJson {
private String user;
private Optional<String> domain;
- private Double quotaRatio;
+ private QuotaRatio quotaRatio;
private Builder() {
domain = Optional.empty();
@@ -52,7 +54,7 @@ public class QuotaRatioAsJson {
return this;
}
- public Builder quotaRatio(double quotaRatio) {
+ public Builder quotaRatio(QuotaRatio quotaRatio) {
this.quotaRatio = quotaRatio;
return this;
}
@@ -67,9 +69,9 @@ public class QuotaRatioAsJson {
private final String user;
private final Optional<String> domain;
- private final double quotaRatio;
+ private final QuotaRatio quotaRatio;
- private QuotaRatioAsJson(String user, Optional<String> domain, double quotaRatio) {
+ private QuotaRatioAsJson(String user, Optional<String> domain, QuotaRatio quotaRatio) {
this.user = user;
this.domain = domain;
this.quotaRatio = quotaRatio;
@@ -86,8 +88,8 @@ public class QuotaRatioAsJson {
}
@JsonProperty(JsonMessageConstants.QUOTA_RATIO)
- public double getQuotaRatio() {
- return quotaRatio;
+ public double getMaxQuotaRatio() {
+ return quotaRatio.max();
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/f8b587a7/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJson.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJson.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJson.java
index ad8f975..a03577f 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJson.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJson.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
import org.apache.james.core.Domain;
import org.apache.james.mailbox.MailboxListener.QuotaUsageUpdatedEvent;
+import org.apache.james.mailbox.model.QuotaRatio;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -42,9 +43,7 @@ public class QuotaRatioToElasticSearchJson {
return mapper.writeValueAsString(QuotaRatioAsJson.builder()
.user(user)
.domain(event.getQuotaRoot().getDomain().map(Domain::asString))
- .quotaRatio(Math.max(
- event.getCountQuota().getRatio(),
- event.getSizeQuota().getRatio()))
+ .quotaRatio(QuotaRatio.from(event.getSizeQuota(), event.getCountQuota()))
.build());
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f8b587a7/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJsonTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJsonTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJsonTest.java
index e0b9c14..fb16937 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJsonTest.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioAsJsonTest.java
@@ -23,12 +23,25 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.util.Optional;
+import org.apache.james.mailbox.model.Quota;
+import org.apache.james.mailbox.model.QuotaRatio;
+import org.apache.james.mailbox.quota.QuotaCount;
+import org.apache.james.mailbox.quota.QuotaSize;
import org.junit.jupiter.api.Test;
import nl.jqno.equalsverifier.EqualsVerifier;
public class QuotaRatioAsJsonTest {
+ private static final Quota<QuotaSize> QUOTA_SIZE = Quota.<QuotaSize> builder()
+ .used(QuotaSize.size(15))
+ .computedLimit(QuotaSize.size(60))
+ .build();
+ private static final Quota<QuotaCount> QUOTA_COUNT = Quota.<QuotaCount> builder()
+ .used(QuotaCount.count(1))
+ .computedLimit(QuotaCount.count(2))
+ .build();
+
@Test
public void shouldMatchBeanContract() {
EqualsVerifier.forClass(QuotaRatioAsJson.class)
@@ -63,7 +76,7 @@ public class QuotaRatioAsJsonTest {
public void getDomainShouldReturnEmptyWhenNone() {
QuotaRatioAsJson quotaRatioAsJson = QuotaRatioAsJson.builder()
.user("user")
- .quotaRatio(0.3)
+ .quotaRatio(QuotaRatio.from(QUOTA_SIZE, QUOTA_COUNT))
.build();
assertThat(quotaRatioAsJson.getDomain()).isEmpty();
@@ -75,9 +88,21 @@ public class QuotaRatioAsJsonTest {
QuotaRatioAsJson quotaRatioAsJson = QuotaRatioAsJson.builder()
.user("user")
.domain(Optional.of(domain))
- .quotaRatio(0.2)
+ .quotaRatio(QuotaRatio.from(QUOTA_SIZE, QUOTA_COUNT))
.build();
assertThat(quotaRatioAsJson.getDomain()).contains(domain);
}
+
+ @Test
+ public void getMaxQuotaRatioShouldReturnTheMaxQuotaRatio() {
+ String domain = "domain";
+ QuotaRatioAsJson quotaRatioAsJson = QuotaRatioAsJson.builder()
+ .user("user")
+ .domain(Optional.of(domain))
+ .quotaRatio(QuotaRatio.from(QUOTA_SIZE, QUOTA_COUNT))
+ .build();
+
+ assertThat(quotaRatioAsJson.getMaxQuotaRatio()).isEqualTo(0.5);
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f8b587a7/mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ClauseConverter.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ClauseConverter.java b/mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ClauseConverter.java
index f1d9035..c527a70 100644
--- a/mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ClauseConverter.java
+++ b/mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ClauseConverter.java
@@ -28,6 +28,7 @@ import javax.inject.Inject;
import org.apache.james.core.User;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.Quota;
+import org.apache.james.mailbox.model.QuotaRatio;
import org.apache.james.mailbox.model.QuotaRoot;
import org.apache.james.mailbox.quota.QuotaCount;
import org.apache.james.mailbox.quota.QuotaManager;
@@ -95,7 +96,7 @@ public class ClauseConverter {
Quota<QuotaSize> storageQuota = quotaManager.getStorageQuota(quotaRoot);
Quota<QuotaCount> messageQuota = quotaManager.getMessageQuota(quotaRoot);
- return Math.max(storageQuota.getRatio(), messageQuota.getRatio());
+ return QuotaRatio.from(storageQuota, messageQuota).max();
} catch (MailboxException e) {
throw new RuntimeException(e);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f8b587a7/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationRatioDTO.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationRatioDTO.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationRatioDTO.java
index 1358f13..2189aa2 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationRatioDTO.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationRatioDTO.java
@@ -20,6 +20,7 @@
package org.apache.james.webadmin.dto;
import org.apache.james.mailbox.model.Quota;
+import org.apache.james.mailbox.model.QuotaRatio;
import org.apache.james.mailbox.quota.QuotaCount;
import org.apache.james.mailbox.quota.QuotaSize;
@@ -28,15 +29,18 @@ public class OccupationRatioDTO {
public static OccupationRatioDTO from(Quota<QuotaSize> sizeQuota, Quota<QuotaCount> countQuota) {
return new OccupationRatioDTO(
sizeQuota.getRatio(),
- countQuota.getRatio());
+ countQuota.getRatio(),
+ QuotaRatio.from(sizeQuota, countQuota).max());
}
private final double size;
private final double count;
+ private final double max;
- private OccupationRatioDTO(double size, double count) {
+ private OccupationRatioDTO(double size, double count, double max) {
this.size = size;
this.count = count;
+ this.max = max;
}
public double getSize() {
@@ -48,6 +52,6 @@ public class OccupationRatioDTO {
}
public double getMax() {
- return Math.max(size, count);
+ return max;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org