diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java index 18dccebec..42820ad3a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java @@ -11,8 +11,11 @@ import com.codahale.metrics.Meter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.SharedMetricRegistries; import io.lettuce.core.SetArgs; +import io.micrometer.core.instrument.Counter; +import io.micrometer.core.instrument.Metrics; import java.time.Duration; import org.whispersystems.textsecuregcm.controllers.RateLimitExceededException; +import org.whispersystems.textsecuregcm.metrics.MetricsUtil; import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster; import org.whispersystems.textsecuregcm.util.Constants; @@ -21,7 +24,9 @@ public class LockingRateLimiter extends StaticRateLimiter { private static final RateLimitExceededException REUSABLE_RATE_LIMIT_EXCEEDED_EXCEPTION = new RateLimitExceededException(Duration.ZERO, true); + @Deprecated private final Meter meter; + private final Counter counter; public LockingRateLimiter( @@ -31,12 +36,14 @@ public class LockingRateLimiter extends StaticRateLimiter { super(name, config, cacheCluster); final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); this.meter = metricRegistry.meter(name(getClass(), name, "locked")); + this.counter = Metrics.counter(MetricsUtil.name(getClass(), "locked"), "name", name); } @Override public void validate(final String key, final int amount) throws RateLimitExceededException { if (!acquireLock(key)) { meter.mark(); + counter.increment(); throw REUSABLE_RATE_LIMIT_EXCEEDED_EXCEPTION; } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/limits/StaticRateLimiter.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/StaticRateLimiter.java index 78fba93bb..150495190 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/limits/StaticRateLimiter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/limits/StaticRateLimiter.java @@ -10,13 +10,15 @@ import static java.util.Objects.requireNonNull; 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 io.micrometer.core.instrument.Counter; +import io.micrometer.core.instrument.Metrics; import java.io.IOException; import java.time.Duration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.whispersystems.textsecuregcm.controllers.RateLimitExceededException; +import org.whispersystems.textsecuregcm.metrics.MetricsUtil; import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster; import org.whispersystems.textsecuregcm.util.Constants; import org.whispersystems.textsecuregcm.util.SystemMapper; @@ -31,11 +33,10 @@ public class StaticRateLimiter implements RateLimiter { protected final FaultTolerantRedisCluster cacheCluster; + private final Counter counter; + @Deprecated private final Meter meter; - private final Timer validateTimer; - - public StaticRateLimiter( final String name, final RateLimiterConfig config, @@ -45,19 +46,18 @@ public class StaticRateLimiter implements RateLimiter { this.config = requireNonNull(config); this.cacheCluster = requireNonNull(cacheCluster); this.meter = metricRegistry.meter(name(getClass(), name, "exceeded")); - this.validateTimer = metricRegistry.timer(name(getClass(), name, "validate")); + this.counter = Metrics.counter(MetricsUtil.name(getClass(), "exceeded"), "name", name); } @Override public void validate(final String key, final int amount) throws RateLimitExceededException { - try (final Timer.Context ignored = validateTimer.time()) { - final LeakyBucket bucket = getBucket(key); - if (bucket.add(amount)) { - setBucket(key, bucket); - } else { - meter.mark(); - throw new RateLimitExceededException(bucket.getTimeUntilSpaceAvailable(amount), true); - } + final LeakyBucket bucket = getBucket(key); + if (bucket.add(amount)) { + setBucket(key, bucket); + } else { + meter.mark(); + counter.increment(); + throw new RateLimitExceededException(bucket.getTimeUntilSpaceAvailable(amount), true); } }