diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java index 0e3315586..9fd7db547 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -419,8 +419,6 @@ public class AccountController { Account account = accounts.create(number, password, signalAgent, accountAttributes, existingAccount.map(Account::getBadges).orElseGet(ArrayList::new)); - metricRegistry.meter(name(AccountController.class, "verify", Util.getCountryCode(number))).mark(); - Metrics.counter(ACCOUNT_VERIFY_COUNTER_NAME, Tags.of(UserAgentTagUtil.getPlatformTag(userAgent), Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number)), Tag.of(REGION_TAG_NAME, Util.getRegion(number)), diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java index d36b9fa4e..78a6d4a18 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java @@ -50,7 +50,6 @@ import org.whispersystems.textsecuregcm.storage.Account; import org.whispersystems.textsecuregcm.storage.AccountsManager; import org.whispersystems.textsecuregcm.storage.Device; import org.whispersystems.textsecuregcm.storage.Keys; -import org.whispersystems.textsecuregcm.util.Util; @SuppressWarnings("OptionalUsedAsFieldOrParameterType") @Path("/v2/keys") @@ -60,11 +59,8 @@ public class KeysController { private final Keys keys; private final AccountsManager accounts; - private static final String PREKEY_REQUEST_COUNTER_NAME = name(KeysController.class, "preKeyGet"); private static final String IDENTITY_KEY_CHANGE_FORBIDDEN_COUNTER_NAME = name(KeysController.class, "identityKeyChangeForbidden"); - private static final String SOURCE_COUNTRY_TAG_NAME = "sourceCountry"; - private static final String INTERNATIONAL_TAG_NAME = "international"; private static final String IDENTITY_TYPE_TAG_NAME = "identityType"; private static final String HAS_IDENTITY_KEY_TAG_NAME = "hasIdentityKey"; @@ -171,16 +167,6 @@ public class KeysController { target = maybeTarget.orElseThrow(); } - { - final String sourceCountryCode = account.map(a -> Util.getCountryCode(a.getNumber())).orElse("0"); - final String targetCountryCode = Util.getCountryCode(target.getNumber()); - - Metrics.counter(PREKEY_REQUEST_COUNTER_NAME, Tags.of( - SOURCE_COUNTRY_TAG_NAME, sourceCountryCode, - INTERNATIONAL_TAG_NAME, String.valueOf(!sourceCountryCode.equals(targetCountryCode)) - )).increment(); - } - if (account.isPresent()) { rateLimiters.getPreKeysLimiter().validate( account.get().getUuid() + "." + auth.get().getAuthenticatedDevice().getId() + "__" + targetUuid diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/http/FaultTolerantHttpClient.java b/service/src/main/java/org/whispersystems/textsecuregcm/http/FaultTolerantHttpClient.java index 976112b7a..f862a93fc 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/http/FaultTolerantHttpClient.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/http/FaultTolerantHttpClient.java @@ -5,18 +5,9 @@ package org.whispersystems.textsecuregcm.http; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.SharedMetricRegistries; import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.retry.Retry; import io.github.resilience4j.retry.RetryConfig; -import org.glassfish.jersey.SslConfigurator; -import org.whispersystems.textsecuregcm.configuration.CircuitBreakerConfiguration; -import org.whispersystems.textsecuregcm.configuration.RetryConfiguration; -import org.whispersystems.textsecuregcm.util.CertificateUtil; -import org.whispersystems.textsecuregcm.util.CircuitBreakerUtil; -import org.whispersystems.textsecuregcm.util.Constants; - import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @@ -29,6 +20,11 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.function.Supplier; +import org.glassfish.jersey.SslConfigurator; +import org.whispersystems.textsecuregcm.configuration.CircuitBreakerConfiguration; +import org.whispersystems.textsecuregcm.configuration.RetryConfiguration; +import org.whispersystems.textsecuregcm.util.CertificateUtil; +import org.whispersystems.textsecuregcm.util.CircuitBreakerUtil; public class FaultTolerantHttpClient { @@ -49,13 +45,12 @@ public class FaultTolerantHttpClient { this.retryExecutor = Executors.newSingleThreadScheduledExecutor(); this.breaker = CircuitBreaker.of(name + "-breaker", circuitBreakerConfiguration.toCircuitBreakerConfig()); - MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); - CircuitBreakerUtil.registerMetrics(metricRegistry, breaker, FaultTolerantHttpClient.class); + CircuitBreakerUtil.registerMetrics(breaker, FaultTolerantHttpClient.class); if (retryConfiguration != null) { RetryConfig retryConfig = retryConfiguration.toRetryConfigBuilder().retryOnResult(o -> o.statusCode() >= 500).build(); this.retry = Retry.of(name + "-retry", retryConfig); - CircuitBreakerUtil.registerMetrics(metricRegistry, retry, FaultTolerantHttpClient.class); + CircuitBreakerUtil.registerMetrics(retry, FaultTolerantHttpClient.class); } else { this.retry = null; } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/redis/FaultTolerantPubSubConnection.java b/service/src/main/java/org/whispersystems/textsecuregcm/redis/FaultTolerantPubSubConnection.java index 13e599ca4..f7ef7801a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/redis/FaultTolerantPubSubConnection.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/redis/FaultTolerantPubSubConnection.java @@ -38,7 +38,7 @@ public class FaultTolerantPubSubConnection { final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); this.executeTimer = metricRegistry.timer(name(getClass(), name + "-pubsub", "execute")); - CircuitBreakerUtil.registerMetrics(metricRegistry, circuitBreaker, FaultTolerantPubSubConnection.class); + CircuitBreakerUtil.registerMetrics(circuitBreaker, FaultTolerantPubSubConnection.class); } public void usePubSubConnection(final Consumer> consumer) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/redis/FaultTolerantRedisCluster.java b/service/src/main/java/org/whispersystems/textsecuregcm/redis/FaultTolerantRedisCluster.java index fd60d5fc6..1ea33a92d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/redis/FaultTolerantRedisCluster.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/redis/FaultTolerantRedisCluster.java @@ -5,7 +5,6 @@ package org.whispersystems.textsecuregcm.redis; -import com.codahale.metrics.SharedMetricRegistries; import com.google.common.annotations.VisibleForTesting; import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.reactor.circuitbreaker.operator.CircuitBreakerOperator; @@ -31,7 +30,6 @@ import org.whispersystems.textsecuregcm.configuration.CircuitBreakerConfiguratio import org.whispersystems.textsecuregcm.configuration.RedisClusterConfiguration; import org.whispersystems.textsecuregcm.configuration.RetryConfiguration; import org.whispersystems.textsecuregcm.util.CircuitBreakerUtil; -import org.whispersystems.textsecuregcm.util.Constants; import reactor.core.publisher.Flux; /** @@ -82,10 +80,8 @@ public class FaultTolerantRedisCluster { this.retry = Retry.of(name + "-retry", retryConfiguration.toRetryConfigBuilder() .retryOnException(exception -> exception instanceof RedisCommandTimeoutException).build()); - CircuitBreakerUtil.registerMetrics(SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME), circuitBreaker, - FaultTolerantRedisCluster.class); - CircuitBreakerUtil.registerMetrics(SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME), retry, - FaultTolerantRedisCluster.class); + CircuitBreakerUtil.registerMetrics(circuitBreaker, FaultTolerantRedisCluster.class); + CircuitBreakerUtil.registerMetrics(retry, FaultTolerantRedisCluster.class); } void shutdown() { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/redis/ReplicatedJedisPool.java b/service/src/main/java/org/whispersystems/textsecuregcm/redis/ReplicatedJedisPool.java index 8c76d9fcf..8ec3b36a5 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/redis/ReplicatedJedisPool.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/redis/ReplicatedJedisPool.java @@ -5,21 +5,16 @@ package org.whispersystems.textsecuregcm.redis; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.SharedMetricRegistries; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.whispersystems.textsecuregcm.configuration.CircuitBreakerConfiguration; -import org.whispersystems.textsecuregcm.util.CircuitBreakerUtil; -import org.whispersystems.textsecuregcm.util.Constants; - +import io.github.resilience4j.circuitbreaker.CircuitBreaker; +import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; - -import io.github.resilience4j.circuitbreaker.CircuitBreaker; -import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.whispersystems.textsecuregcm.configuration.CircuitBreakerConfiguration; +import org.whispersystems.textsecuregcm.util.CircuitBreakerUtil; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.exceptions.JedisException; @@ -39,11 +34,10 @@ public class ReplicatedJedisPool { { if (replicas.size() < 1) throw new IllegalArgumentException("There must be at least one replica"); - MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); CircuitBreakerConfig config = circuitBreakerConfiguration.toCircuitBreakerConfig(); CircuitBreaker masterBreaker = CircuitBreaker.of(String.format("%s-master", name), config); - CircuitBreakerUtil.registerMetrics(metricRegistry, masterBreaker, ReplicatedJedisPool.class); + CircuitBreakerUtil.registerMetrics(masterBreaker, ReplicatedJedisPool.class); this.master = CircuitBreaker.decorateSupplier(masterBreaker, master::getResource); this.replicas = new ArrayList<>(replicas.size()); @@ -52,7 +46,7 @@ public class ReplicatedJedisPool { JedisPool replica = replicas.get(i); CircuitBreaker slaveBreaker = CircuitBreaker.of(String.format("%s-slave-%d", name, i), config); - CircuitBreakerUtil.registerMetrics(metricRegistry, slaveBreaker, ReplicatedJedisPool.class); + CircuitBreakerUtil.registerMetrics(slaveBreaker, ReplicatedJedisPool.class); this.replicas.add(CircuitBreaker.decorateSupplier(slaveBreaker, replica::getResource)); } } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/util/CircuitBreakerUtil.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/CircuitBreakerUtil.java index 043264ebe..06cbc731a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/util/CircuitBreakerUtil.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/util/CircuitBreakerUtil.java @@ -5,10 +5,8 @@ package org.whispersystems.textsecuregcm.util; -import com.codahale.metrics.Meter; -import com.codahale.metrics.MetricRegistry; - import static com.codahale.metrics.MetricRegistry.name; + import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.retry.Retry; import io.micrometer.core.instrument.Counter; @@ -25,11 +23,7 @@ public class CircuitBreakerUtil { private static final String NAME_TAG_NAME = "name"; private static final String OUTCOME_TAG_NAME = "outcome"; - public static void registerMetrics(MetricRegistry metricRegistry, CircuitBreaker circuitBreaker, Class clazz) { - Meter successMeter = metricRegistry.meter(name(clazz, circuitBreaker.getName(), "success" )); - Meter failureMeter = metricRegistry.meter(name(clazz, circuitBreaker.getName(), "failure" )); - Meter unpermittedMeter = metricRegistry.meter(name(clazz, circuitBreaker.getName(), "unpermitted")); - + public static void registerMetrics(CircuitBreaker circuitBreaker, Class clazz) { final String breakerName = clazz.getSimpleName() + "/" + circuitBreaker.getName(); final Counter successCounter = Metrics.counter(CIRCUIT_BREAKER_CALL_COUNTER_NAME, @@ -45,33 +39,23 @@ public class CircuitBreakerUtil { OUTCOME_TAG_NAME, "unpermitted"); circuitBreaker.getEventPublisher().onSuccess(event -> { - successMeter.mark(); successCounter.increment(); }); circuitBreaker.getEventPublisher().onError(event -> { - failureMeter.mark(); failureCounter.increment(); }); circuitBreaker.getEventPublisher().onCallNotPermitted(event -> { - unpermittedMeter.mark(); unpermittedCounter.increment(); }); - metricRegistry.gauge(name(clazz, circuitBreaker.getName(), "state"), () -> ()-> circuitBreaker.getState().getOrder()); - Metrics.gauge(CIRCUIT_BREAKER_STATE_GAUGE_NAME, Tags.of(Tag.of(NAME_TAG_NAME, circuitBreaker.getName())), circuitBreaker, breaker -> breaker.getState().getOrder()); } - public static void registerMetrics(MetricRegistry metricRegistry, Retry retry, Class clazz) { - Meter successMeter = metricRegistry.meter(name(clazz, retry.getName(), "success" )); - Meter retryMeter = metricRegistry.meter(name(clazz, retry.getName(), "retry" )); - Meter errorMeter = metricRegistry.meter(name(clazz, retry.getName(), "error" )); - Meter ignoredErrorMeter = metricRegistry.meter(name(clazz, retry.getName(), "ignored_error")); - + public static void registerMetrics(Retry retry, Class clazz) { final String retryName = clazz.getSimpleName() + "/" + retry.getName(); final Counter successCounter = Metrics.counter(RETRY_CALL_COUNTER_NAME, @@ -91,22 +75,18 @@ public class CircuitBreakerUtil { OUTCOME_TAG_NAME, "ignored_error"); retry.getEventPublisher().onSuccess(event -> { - successMeter.mark(); successCounter.increment(); }); retry.getEventPublisher().onRetry(event -> { - retryMeter.mark(); retryCounter.increment(); }); retry.getEventPublisher().onError(event -> { - errorMeter.mark(); errorCounter.increment(); }); retry.getEventPublisher().onIgnoredError(event -> { - ignoredErrorMeter.mark(); ignoredErrorCounter.increment(); }); }