1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.linecorp.centraldogma.server;
17
18 import static org.apache.curator.shaded.com.google.common.base.Preconditions.checkArgument;
19
20 import com.fasterxml.jackson.annotation.JsonCreator;
21 import com.fasterxml.jackson.annotation.JsonProperty;
22 import com.google.common.base.MoreObjects;
23
24
25
26
27 public final class QuotaConfig {
28
29 private final int requestQuota;
30 private final int timeWindowSeconds;
31
32
33
34
35 @JsonCreator
36 public QuotaConfig(@JsonProperty("requestQuota") int requestQuota,
37 @JsonProperty("timeWindowSeconds") int timeWindowSeconds) {
38 checkArgument(requestQuota > 0, "requestQuota: %s (expected: > 0)", requestQuota);
39 checkArgument(timeWindowSeconds > 0, "timeWindowSeconds: %s (expected: > 0)", timeWindowSeconds);
40
41 this.requestQuota = requestQuota;
42 this.timeWindowSeconds = timeWindowSeconds;
43 }
44
45
46
47
48 @JsonProperty
49 public int timeWindowSeconds() {
50 return timeWindowSeconds;
51 }
52
53
54
55
56 @JsonProperty
57 public int requestQuota() {
58 return requestQuota;
59 }
60
61
62
63
64 public double permitsPerSecond() {
65 return requestQuota() * 1.0 / timeWindowSeconds();
66 }
67
68 @Override
69 public boolean equals(Object o) {
70 if (this == o) {
71 return true;
72 }
73 if (!(o instanceof QuotaConfig)) {
74 return false;
75 }
76
77 final QuotaConfig that = (QuotaConfig) o;
78 return requestQuota == that.requestQuota && timeWindowSeconds == that.timeWindowSeconds;
79 }
80
81 @Override
82 public int hashCode() {
83 return requestQuota * 31 + timeWindowSeconds;
84 }
85
86 @Override
87 public String toString() {
88 return MoreObjects.toStringHelper(this)
89 .add("requestQuota", requestQuota)
90 .add("timeWindowSeconds", timeWindowSeconds)
91 .toString();
92 }
93 }