diff --git a/common/pom.xml b/common/pom.xml
index 7f9aa3d7b94a9944b78fbe0587597532e8eb8aa8..4a53aedb90eb9f70175567bb72c4042ea74840ea 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -16,6 +16,12 @@
+
+ org.springframework
+ spring-aspects
+ 4.3.2.RELEASE
+ provided
+
junit
@@ -35,7 +41,6 @@
org.slf4j
slf4j-api
${org.slf4j.version}
- test
org.slf4j
@@ -49,6 +54,11 @@
${org.slf4j.version}
test
+
+ com.google.guava
+ guava
+ 23.2-jre
+
diff --git a/common/src/main/java/org/genesys/glis/v1/GlisRateLimiter.java b/common/src/main/java/org/genesys/glis/v1/GlisRateLimiter.java
new file mode 100644
index 0000000000000000000000000000000000000000..80ebe23b8fe0086a00e4d02fe30b8bfdab018322
--- /dev/null
+++ b/common/src/main/java/org/genesys/glis/v1/GlisRateLimiter.java
@@ -0,0 +1,35 @@
+package org.genesys.glis.v1;
+
+import com.google.common.util.concurrent.RateLimiter;
+
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Aspect to control the rate of calls to GLIS API
+ */
+@Aspect
+public class GlisRateLimiter {
+
+ private static final Logger LOG = LoggerFactory.getLogger(GlisRateLimiter.class);
+
+ private RateLimiter limiter = RateLimiter.create(20);
+
+ public GlisRateLimiter(double permitsPerSecond) {
+ setPermitsPerSecond(permitsPerSecond);
+ }
+
+ public void setPermitsPerSecond(double permitsPerSecond) {
+ limiter = RateLimiter.create(permitsPerSecond);
+ }
+
+ @Before("execution(* org.genesys.glis.v1.api.*.*(..))")
+ public void rateLimit(JoinPoint jp) {
+ double delay = limiter.acquire();
+ LOG.debug("Acquired rate limit permission ({} qps) in {} seconds for {}", limiter.getRate(), delay, jp.toLongString());
+ }
+
+}