From 11196436e9eed33e078509b5585826871e44fd60 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Fri, 12 Jun 2020 12:57:06 -0400 Subject: [PATCH] Time rate limiter validation calls. --- .../textsecuregcm/limits/RateLimiter.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiter.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiter.java index 77f573d25..cd6d74064 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiter.java @@ -19,6 +19,7 @@ package org.whispersystems.textsecuregcm.limits; import com.codahale.metrics.Meter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.SharedMetricRegistries; +import com.codahale.metrics.Timer; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; @@ -41,6 +42,7 @@ public class RateLimiter { private final ObjectMapper mapper = SystemMapper.getMapper(); private final Meter meter; + private final Timer validateTimer; protected final ReplicatedJedisPool cacheClient; protected final FaultTolerantRedisCluster cacheCluster; protected final String name; @@ -62,6 +64,7 @@ public class RateLimiter { MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); this.meter = metricRegistry.meter(name(getClass(), name, "exceeded")); + this.validateTimer = metricRegistry.timer(name(getClass(), name, "validate")); this.cacheClient = cacheClient; this.cacheCluster = cacheCluster; this.name = name; @@ -72,13 +75,15 @@ public class RateLimiter { } public void validate(String key, int amount) throws RateLimitExceededException { - LeakyBucket bucket = getBucket(key); + try (final Timer.Context ignored = validateTimer.time()) { + LeakyBucket bucket = getBucket(key); - if (bucket.add(amount)) { - setBucket(key, bucket); - } else { - meter.mark(); - throw new RateLimitExceededException(key + " , " + amount); + if (bucket.add(amount)) { + setBucket(key, bucket); + } else { + meter.mark(); + throw new RateLimitExceededException(key + " , " + amount); + } } }